1

我想通过将客户端包装在 javaagent 包中并在本地查询 MBean 来将自定义 JMX 客户端加载到 JVM 中。我的意图是 JMX 客户端将定期查询主机应用程序的 MBean 或接收通知。但是,由于 javaagent 在主 jar 之前加载(通过 premain),所以宿主应用程序的 MBean 尚不可用。我应该如何处理这个“先有鸡”的问题?线程适合这个吗?还是有其他一些首选的 JMX 机制?谢谢

4

1 回答 1

1

开始一个循环并在其中休眠,直到您成功获取目标 MBeanServer。如果这是平台 MBeanServer,您应该立即使用ManagementFactory.getPlatformMBeanServer()获取它。然后使用定义为MBeanServerDelegate.DELEGATE_NAME的 ObjectName注册一个通知侦听器。过滤MBeanServerNotification类的通知,通知类型为MBeanServerNotification.REGISTRATION_NOTIFICATION。每次在目标 MBeanServer 中注册新的 MBean 时,您的通知侦听器都会收到回调。

于 2013-04-05T14:07:33.433 回答