JMX API によると、StandardMBeanやStandardEmitterMBeanなどのクラスを使用して、カスタマイズ フックを使用できます。そのため、MXBean 自体を直接登録する代わりに、これらのクラスの 1 つにラップすることができます。これは正常に動作していますが、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 に接続し、通知メカニズムにサブスクライブして、hello() メソッドを実行しても、何も起こりません。MXBean を直接登録する場合のみ、すべて正常に動作します。カスタム NotificationListeners を MXBean に追加するときにも機能しません。私はすでにラッピングクラスでこの通知イベントを何とかキャッチして転送しようとしましたが、これもうまくいきませんでした。ここで何が欠けているのか分かりますか? それとも、ラッピング クラスの 1 つを使用すると機能しないのでしょうか。
よろしくお願いします。