2013-04-04 69 views
1

我想通過將客戶端包裝到javaagent包中並在本地查詢MBean來將自定義JMX客戶端加載到JVM中。我的意圖是JMX客戶端將定期查詢主機應用程序的MBean或接收通知。但是,由於javaagent是在主jar之前加載的(通過premain),主機應用程序的MBean尚不可用。我應該如何處理這個「雞蛋之前的雞」問題?線程是否適合這個?還是有其他一些首選的JMX機制? 謝謝如何在JavaAgent中打包JMXClient

+0

你能抓住並處理沒有應用程序Mbeans的第一對民意調查嗎?或者可能在投票中最初拖延? – Gray 2013-04-04 18:37:59

回答

1

開始一個帶有睡眠的循環,直到您成功獲取目標MBeanServer。如果這是平臺MBeanServer,您應該立即使用ManagementFactory.getPlatformMBeanServer()來獲取它。然後註冊一個notification listener,其ObjectName定義爲MBeanServerDelegate.DELEGATE_NAME。篩選類別爲MBeanServerNotification的通知,通知類型爲MBeanServerNotification.REGISTRATION_NOTIFICATION。每次在目標MBeanServer中註冊新的MBean時,您的通知偵聽器都會收到回調。

+0

非常好。這是一個很好的解決方案。謝謝。 – 2013-04-05 20:02:39