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。

你可能感兴趣的:(Java)