JMX的概述
JMX(Java Management Extensions)是SUN创建的一套规范。BEA WebLogic Server实现了JMX大部分的API,并且提供了一个完全兼容JMX的控制台来管理各种资源。
在JMX中,被管理的资源被封装为Managed Bean ,简称MBean。MBean是对所有资源的一种抽象。目前,JMX定义了四种类型的MBean:
- standard MBeans
- dynamic MBeans
- open MBeans
- model MBeans
其中, open MBean,model MBean 继承自dynamic MBean。
WebLogic的实现
WebLogic中定义了接口WebLogicMBean,该接口继承了DynamicMBean(上面描述的dynamic MBean必须实现的接口),MBeanRegistration(用于MBean在Agent注册),NotificationBroadcaster(用于发送Notification,参见JMX Notification Model)。所有的weblogic的MBean都是该接口的子类。也就是说,weblogic里面所有的MBean都是dynamic MBean。
WebLogicMBean主要具有以下三种类型的MBeans:
-
Administration MBeans, 封装从config.xml读取的整个weblgoic domain的配置信息;
-
Configuration MBeans, 每个weblogic server一份, 是Administration MBeans的copy,用于server配置自己;
-
Runtime MBeans, 代表着运行时刻WebLogic Server的各种组件和子系统。
我们通常通过weblogic提供的HTML形式的控制台对weblogic的配置操作,最终都通过调用Administration MBeans实现,在系统运行结束时写回config.xml配置文件。利用JMX可以不通过HTML的控制台,使用自己定制的方法来配置WebLogic中的各种资源。如,对于最终用户比较关心的JDBC数据源的信息,你完全可以自己写一个图形界面来配置。从而不让用户通过浏览器进入weblogic自己带的console进行操作。这样就可以避免用户修改一些很关键的系统信息。
在weblogic server的JMX Agent的视图里,一个EJB组件,一个JDBC数据源都是Runtime MBeans,甚至weblgoic自己的shutdown类也是一个Runtime MBeans。weblogic为各种资源定义了不同的子Runtime MBeans接口。比如对大家都熟悉的EJB来说,就定义了接口EJBRuntimeMBean,而且更详细的是,对于不同的Bean还定义了不同子接口,比如:EntityEJBRuntimeMBean, MessageDrivenEJBRuntimeMBean, StatefulEJBRuntimeMBean, StatelessEJBRuntimeMBean。
当我们调用一个EJB的某个方法时,请求会首先送到JMX的Agent,Agnet根据请求确定要访问哪一个Runtime MBeans,然后调用该Runtime MBeans的方法,这是通过DynamicMBean的方法invoke(java.lang.String actionName, java.lang.Object[] params, java.lang.String[] signature) (actionName:要调用的方法名;params:参数数组 ;signature:该方法的型构)来实现的,invoke的返回结果就是被调用的ejb的方法的返回结果。最后,将结果返回给调用者。
为MBean定义了Home接口,这是JMX1.0规范所没有的,这样,对于应用程序来说就可以像访问EJB那样在远程首先通过JNDI查找该MBean的Home接口,获得Home接口后就可以获得该MBean,然后,就可以通过MBean对资源进行管理操作。这个流程与EJB几乎完全一样。
而且,更方便的是,weblogic提供了一个类weblogic.management.Helper,该类通过了一组静态方法getMBeanHome可以非常方便的得到MBeanHome对象。