JMX,Java Management Extensions,翻译过来也很容易理解,JAVA管理扩展接口,为什么要提出这个来呢?我们先来看看JMX提出的目的,在一个复杂的网络系统中通常面对各种各样需要管理的设备,如打印机、各服务器、各网络设备等,这些都需要进行管理和实时的监控,通常,这些设备本身会提供自己的管理接口,但由于这些接口的不统一已经管理方式的不同导致不得不一个一个去管理或者干脆自己定义出一种统一管理的方法,并分别去做Delegate,而由于各厂商定义的方法不同又导致了编写的困难,又比如一个应用系统,通常需要管理应用的一些配置,如log等级呀,运行数量呀,数据库连接呀等等,但修改这些又不希望仅仅为此而去重启,那么对于一个统一的管理的需求也就产生了,JMX就是在这种背景下诞生的,JMX提供了一种简单的办法使得对于这些设备、配置文件等等的管理可统一起来,通过编写遵循约定的MBean来实现对于资源(设备、配置文件)的管理,通过编写Agent来建立MBeanServer、注册MBean、监听器至MBeanServer以及注册Protocol、Connector至MBeanServer以提供多种访问MBeanServer方便对于MBean进行操作。
MBean为对资源管理的类,可以是一个proxy类或是具体的handle类抑或是一个delegate类,这个根据需要而定,此类为具体的资源管理类,暴露出可供管理的属性以在运行期间动态的对资源的配置进行调整,暴露出可供使用的操作以调用资源的一些管理操作,如停止资源、启动资源、卸载资源等。
MBean又分为Standard MBean、Dynamic MBean、Model MBean、Open MBean,关于这四种MBean的介绍有很多,请参阅相关的文档。
MBeanServer相当于MBean的容器,MBean可动态的注册到MBeanServer中或从MBeanServer中卸载,并可通过MBeanServer对MBean进行属性的修改以及动作的调用。
Protocol、Connector则提供了可访问MBeanServer的方式,使得外部可通过各种Protocol(Http、SNMP等)、Connector(RMI等)的方式访问MBeanServer,以对其中的MBean进行管理或者操作。
Agent除了MBeanServer以及Protocol、Connector的组合外,还提供了一些好用的服务,如Mlet Service(可用于加载远程的MBean)、Relation Service、Monitor Service等等,能够更加方便的对MBean进行管理和监控。
提供的Notification更是使得MBean在需要的时候可通知相应感兴趣的MBean做出相应的行为,以提高管理的实效性。
在这里对JMX做了一个基本的介绍,可以看出JMX在设计上多方面的考虑到了对于资源的管理的简易性(MBean的编写)、易管理性(多种访问的形式)、实效性(Notification),但同时我们也看出JMX有作为一个Plugin Architecture的潜质,因为MBean是作为即插即用的形式注册到MBeanServer中的,而且JMX还提供了对于MBean的多种便捷的管理方式,MBean呢就像plugin一样,暴露的是可供管理的属性和可供外部调用的操作,^_^,在这里为下一篇基于JMX实现Plugin Architecture埋下伏笔先。