如何在JavaAgent中包装JMXClient

时间:2013-04-04 18:34:40

标签: jmx mbeans javaagents

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

1 个答案:

答案 0 :(得分:1)

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