JMX中的描述說明

JMX中的描述說明

在開發工作中,會時常遇到通過JMX對應用進行監控、管理,此時JMX MBean自身的描述信息就很重要了 (否則Swagger UI也不會那麼火。。。)。但是,在實際應用中,我們會發現自己寫的MBean是沒有意義的,都是默認的值,說的不錯但是是廢話,而別人家的MBean是這樣的(以Tomcat爲例),是有意義的,能知道這個是幹啥的。

感謝Tomcat是開源的,趕緊看看人家怎麼實現的吧。。。

通過學習(學習過程會在其他地方說明),結論就是:Tomcat中的使用的MBean是DynamicMBean,而我們開發使用的是StandardMBean,而DynamicMBean是可以通過getMBeanInfo()獲得MBeanInfo對象實例,進而獲取具體的描述信息的。

那麼問題來了,StandardMBean怎麼添加描述信息呢?必應一下,發現如果單純的JDK環境貌似不行啊。。。理由如下:

  • 實際上所有的MBean在向MBean Server註冊時最終都會被轉化爲DynamicMBean,詳見com.sun.jmx.mbeanserver.Introspector.makeDynamicMBean(Object)方法

  • StandardMBean、MXBean在轉化過程中使用的是它們的接口通過反射獲取JMX操作、屬性的,這個也完全符合它們的編寫要求。

  • 在將StandardMBean、MXBean轉化的過程中,他們的MBeanInfo中的描述信息只能使用默認值了:

類型 默認值
Informationon the management interface of the MBean
構造方法 Public constructor of the Mbean
屬性 Attribute exposed for management
操作 Operation exposed for management

結論

綜上所述:

  1. JMX中MBean的描述信息幾乎完全來源於MBeanInfo對象實例,此對象實例來源於getMBeanInfo方法。
  2. 雖然所有的MBean在最終註冊時都會轉化爲DynamicMBean,但是StandardMBean以及MXBean只能使用默認的描述說明信息。
  3. 在大量使用JMX的場景推薦直接使用DynamicMBean,參照Tomcat。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章