0

JMX API によると、StandardMBeanStandardEmitterMBeanなどのクラスを使用して、カスタマイズ フックを使用できます。そのため、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 つを使用すると機能しないのでしょうか。

よろしくお願いします。

4

1 に答える 1

0

簡単に言うと (モバイルでは を参照)、クラスを拡張して、通知タイプの通知情報メタデータを提供する必要があります。

于 2012-06-21T11:14:27.613 に答える