可以想像一下如果我们不用JMX,我们是如何来管理我们的JAVA应用的,通过命令行部署包(或者有一些是直接将应用包拷到相应目录下),通过修改配置文件来新建连接池或数据源等,这样的管理方式要求管理人员具有较高的技术水平,相应管理成本也就高了,而最大的问题是所有的可管理的资源没有一个统一的管理平台,各种资源以不同的方式被管理着,涉及到大量修改的时候难免会有问题产生,而JMX则提供这么一个统一的管理平台,我们只要在WEBLOGIC的控制台下做相应操作,即可实现对整个系统的控制。
JMX是如何实现对资源的控制的呢?又是如何是松耦合的方式被加入到系统中的呢?
对于平台中可由JAVA编程访问到的资源,JMX通过一个被称为MBean的对象将资源进行封装,被封装的资源甚至不需要知道自己被封装了,在封闭的MBean中提供对资源各种属性的访问,并定义各种资源上可进行的操作,比如对于文件资源,可进行的操作有读写等,对于数据库连接池有新建删除等。将封装好的MBean注册到一个MBeanServer的对象中,该对象用于管理在其之上注册的MBean,实现的对任意一个在其之上注册的MBean对象属性的访问及操作的调用,客户层只要知道被封装的MBean的注册名(为ObjectName对象)即可向MBeanServer请求查看该对象的属性及在该对象上进行封装MBean时暴露出来的操作方法的调用,由于进行管理的客户层不一这与被管理的对象及MBeanServer对象处于同一机器,因此需要定义相关的访问协议,协议由各种各样的连接器(Connector)及适配器(Adaptor)组成。
较为常用的即是RMIConnector及HttpAdaptor,连接器一般由连接器MBean,连接器服务及连接器客户端组成,如RMIConnector,则需要在MBeanServer端注册一个代表连接器的MBean,该MBean管理着相应的底层连接服务,在RMI中则为RMI的服务端对象,在客户端则需要通过客户端的RMI对象与服务器端的RMI对象进行通过才能进行MBeanServer的访问。适配器(Adaptor)一般由适配器MBean及相应的服务组成,如HTTPAdaptor,只需要在MBeanServer中注册一个HTTPAdaptor的MBean,则可在客户端通过浏览器访问MBeanServer,从而访问其中注册的MBean,当然包括HTTPAdaptor。
JMX中的MBean有两种,一种是标准MBean(Standard MBean),其实现主要是为需要管理的资源新建一个类及相应的MBean接口,在类中暴露相应的属性及操作,再将该MBean注册到MBeanServer中,因为所暴露的属性及操作在编译期就已经明确了,因此标准MBean又以静态MBean区分于动态MBean;动态MBean在编译期间并不知道所产生的MBean对象所暴露的属性及操作,而是直到运行期间才知道的,它主要的实现方式构造用于描述暴露的属性及操作等内容的MBeanInfo对象并将之赋予MBean对象,在运行期间,MBeanServer通过其MBeanInfo中的元信息来判断其可执行的操作及可访问的属性的。
另外MBean通过实现NotificationEmiter或直接继承Notificationbroadcastersupport类来实现发送事件通知的功能
这里只做简单的描述,欲了解更多JMX相关的内容,可在下面的网址找到各种JMX相关的内容,若有其它好的网址也请推荐一下:)
Java theory and practice: Instrumenting applications with JMX