天天看點

[JMX一步步來] 4、動态MBean:DynamicMBean

一、前言

 

  動态MBean是在運作期才定義它的屬性和方法,也就是說它有什麼屬性和方法是可以動态改變的。動态MBean主要利用一些輔助類(構造函數類MBeanConstructorInfo、屬性類MBeanAttributeInfo、方法類MBeanOperationInfo)來完成這個功能,所有的動态MBean必須實作DynamicMBean接口。DynamicMBean寫好後,使用方法和第一篇文章中普通的MBean一樣。

  給出一個動态MBean的執行個體,這個執行個體最初動态構了一個Name屬性及一個print方法,當我們執行它的print方法之後,又給此MBean新增了一個print1方法。執行個體的代碼如下:

二、執行個體

1、HelloDynamic類

說明:

實作于接口DynamicMBean

借助于各種輔助類完成一個類的構造。構造函數類MBeanConstructorInfo、屬性類MBeanAttributeInfo、方法類MBeanOperationInfo

這裡所有public方法是實作于DynamicMBean的。主要提供:setAttribute設定屬性、getAttribute取得屬性、setAttributes設定一組屬性、getAttributes取得一組屬性、invoke方法調用、getMBeanInfo MBeanServer由這個方法得到關鍵的MBean類的構造資訊。

2、HelloAgent類

  

  前面說了HelloDynamic和普通MBean的使用方法是一樣的,是以HelloAgent和第一篇的HelloAgent基本一樣,就是把Hello改成HelloDynamic而已。為了執行個體完整,也一并帖出來吧。

3、運作

4、總結

  動态MBean的代碼稍顯複雜,但對于一些特殊需求的情況,它将顯示出強大威力。而且它還是模型MBeans(Model MBeans)的基礎。不過在一般的項目中,動态MBean還是用得比較少,所謂利器深藏之而不用,非常時方現光芒。

作者簡介

陳剛,廣西桂林人,著作有《Eclipse從入門到精通》

[JMX一步步來] 4、動态MBean:DynamicMBean

<a></a>

public Object getAttribute(String attribute_name) { if (attribute_name != null) return null; if (attribute_name.equals("Name")) return name; return null; } 

應該是 

public Object getAttribute(String attribute_name) { if (attribute_name == null) return null; if (attribute_name.equals("Name")) return name; return null; } 

(attribute_name != null) 改為(attribute_name == null)

繼續閱讀