根据JMX API,我可以使用StandardMBean和StandardEmitterMBean等类来使用自定义挂钩。因此,我可以将其包装在其中一个类中,而不是直接注册MXBean本身。 这工作正常,但是当我尝试使用JMX Notification框架时,在使用此包装类而不是MXBean时,将不会触发通知。 一些示例代码:
MXBean接口
public interface MyMXBean {
public void hello();
}
实施
public class MyMXBeanImpl extends NotificationBroadcasterSupport implements MyMXBean {
@Override
public void hello() {
Notification n = //...creating new Notification
sendNotification(n);
}
}
注册:
public class Registration() {
public static void main(String[] args) throws Exception {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName oname =
new ObjectName("example:type=myexample,name=MyExamleMXBean");
// does not fire any notifications
mbs.registerMBean(
new StandardEmitterMBean(new MyMXBeanImpl(), MyMXBean.class, true), oname);
// would fire the notification
// mbs.register(new MyMXBeanImpl(), oname);
}
}
当我将JConsole连接到我的bean时,订阅Notification机制并执行hello()方法没有任何反应。只有在直接注册MXBean时,一切正常。 将自定义NotificationListeners添加到MXBean时,它也无法正常工作。 我已经尝试以某种方式在包装类中捕获此Notification事件并以某种方式转发它,但这也不起作用。 你知道我在这里缺少什么吗?或者在使用其中一个包装类时它是否正常工作?
提前感谢您的帮助!
答案 0 :(得分:0)
简要地说(在手机上看到),您需要扩展您的课程,为您的通知类型提供通知信息元数据。