根据 JMX API,我可以使用StandardMBean和StandardEmitterMBean之类的类来使用自定义挂钩。所以我可以将它包装在这些类之一中,而不是直接注册 MXBean 本身。这工作正常,但是一旦我尝试使用 JMX 通知框架,当直接使用这个包装类而不是 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 事件并以某种方式转发它,但这也不起作用。你知道我在这里想念什么吗?或者它只是在使用其中一个包装类时不起作用?
在此先感谢您的帮助!