天天看点

从零开始玩转JMX(四)——Apache Commons Modeler & Dynamic MBean

下面来讲前面的Hello.java和HelloAgent.java的例子采用Apache Commons Modele进行改造。

首先还是Hello.java,和Model MBean中的一样,没有implements任何接口。

接下去就是最关键的描述文件(mbeans-descriptors.xml)了:

描述文件的名字可以随意,最主要的是要和下面的HelloAgent.java对应起来。

通过这个xml文件的定义就描述了Model MBean所需要的metadata信息和一个基本的ModelMBean实现。

关于这个xml文件有几个需要说明的地方:

<mbean>的属性classname,name,type:

name属性是每个MBean被Registry对象注册的对象名

type属性是真正被管理资源的全面(包括包名)

classname属性是用户扩展的用于实现代理功能的Model MBean的全名,如果不提供Modeler会使用BaseModelMBean;如果提供了代理的ModelMBean对象,在使用时可以使用如下的代码样本访问他所代理的资源对象。

其余的标签就比较好理解了。综述:上面所示代码声明了一个Model MBean, 唯一标示是“Hello”,该MBean负责管理的对象是com.test.jmx.modeler.Hello的实例。域是MyMBean。这个MBean暴露了一个属性name和两个方法printHello()和printHello(String whoName).

下面是新的HelloAgent.java的代码:

注意这里的Registry是指org.apache.commons.modeler.Registry,因为JMX自身也有一个Registry(java.rmi.registry.Registry)。通过Modeler组件提供的Registry对象,可以很方便的完成MBeanServer的创建。

运行效果和之前的一样,这里就不赘述了,有兴趣的小伙伴可以试一下。

四种类型的MBean,前面所讲的都是常用的,现在还剩两种Open MBean就不讲述了,这里简单记录下Dynamic MBean。

Dynamic MBean不需要自定义MBean接口,只需要实现DynamicMBean接口即可,Dynamic MBean没有任何明显些在代码里的属性和方法,所有的属性和方法都是通过反射结合JMX提供的辅助元数据从而动态生成。

下面的代码中首先定义了一个属性name和一个方法print,之后在管理界面(localhost:8082)中点击print之后生成一个print1的方法。

Dynamic MBean的代码如下:

通过Agent调用Dynamic MBean:

运行效果图如下:

从零开始玩转JMX(四)——Apache Commons Modeler & Dynamic MBean

运行结果:

wanna more?

<a href="http://www.open-open.com/lib/view/open1397359125465.html">JMX整理</a>

<a href="http://blog.chinaunix.net/uid-20749563-id-718398.html">JMX简介</a>

<a href="http://blog.csdn.net/DryKillLogic/article/category/762777">http://blog.csdn.net/DryKillLogic/article/category/762777</a>

<a href="http://blog.csdn.net/s464036801/article/details/9980439">用Apache的commons-modeler来辅助开发JMX</a>