下面來講前面的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:
運作效果圖如下:

運作結果:
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>