0

根据 JMX API,我可以使用StandardMBeanStandardEmitterMBean之类的类来使用自定义挂钩。所以我可以将它包装在这些类之一中,而不是直接注册 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 事件并以某种方式转发它,但这也不起作用。你知道我在这里想念什么吗?或者它只是在使用其中一个包装类时不起作用?

在此先感谢您的帮助!

4

1 回答 1

0

简而言之(在移动设备上你看到),你需要扩展你的类来为你的通知类型提供通知信息元数据。

于 2012-06-21T11:14:27.613 回答