发出JMX通知的最佳做法

时间:2011-04-05 15:40:12

标签: java jmx

在定义发出通知的MBean时查找指南,特别是通知类型。 Oracle网站上的JMX Best Practices说明如下。但它有点陈旧且在Java6之前。

  

通知应该是javax.management.Notification的实例或javax.management命名空间中的一个子类。应通过使用setUserData方法将CompositeData附加到通知来传达不适合其中一个子类的信息。

同样在Oracle的网站上,我看到Weblogic定义了一些自己的子类,例如: WebLogicLogNotification。其Best Practices州:

  

所有JMX通知对象都扩展了javax.management.Notification对象类型。 JMX和WebLogic Server定义其他通知对象类型,例如javax.management.AttributeChangeNotification。其他对象类型包含适用于不同类型事件的专用信息集。

我们的通知不适合任何标准子类,因此与WLS一样,考虑使用自定义getter定义我们自己的子类,以获取我们希望通过通知传达的信息。或者更好的是坚持使用基础javax.management.Notification并将我们的信息附加到通用setUserData(Object)?如果我们执行后者,我认为Object应该是一个JMX类型,例如CompositeData,这看起来不太好。从消费者的角度来看哪些更好的想法?

编辑:从消费者的角度来看,我猜自定义子类的缺点是他们必须在应用程序/类路径中包含它。

1 个答案:

答案 0 :(得分:4)

在jmx中使用自定义数据类型几乎总是一个坏主意。这是非常限制。坚持开放类型,任何jmx客户端(java或其他)都可以使用您的数据。

请注意,您始终可以提供一些辅助类,这些类可以执行某种“自定义bean”< - > “开放式”转换。可以访问辅助类的类可以使用这些方便的方法(例如ThreadInfo.from()),而外部和非Java代码仍然可以使用这些数据。