簡體   English   中英

是否可以使用JMX在一個中央MBean服務器中注冊或顯示不同VM的MBean?

[英]Is it possible with JMX to register or show the MBeans form different VMs in one central MBean server?

我正在尋找一個解決方案來從中央MBean Server中的不同Java VM注冊MBean或整個MBean Servers本身,它也應該在一個單獨的VM中運行。 目標是只有一個中央MBean Server,它包含整個系統的所有MBean。 另外一個要求就是難度:-),“客戶端”MBean服務器必須連接/注冊到中央MBean Server而不是其他方式。 中央MBean Server不需要任何“客戶端”MBean服務器的知識來注冊。

我只找到了JMX示例,其中“主”MBean服務器連接到“客戶端”MBean服務器並且注冊了他們的注冊MBean但不是其他方式。 遺憾的是,用於注冊自己的MBean的registerMBean()方法僅對本地MBean服務器存在,但對MBeanServerConnection上的遠程MBean服務器不存在。 在那里,只能使用createMbean()方法,問題在於,它可以在遠程MBean Server中注冊MBean,但是您必須在遠程MBean Server中使用不同的對象,一個本地和另一個本地。 所以問題現在是,當本地對象上的某些內容發生更改時,只有那里的更改,遠程MBean Server中的已注冊MBean不會獲得這些更改(變量的新值...)。 到目前為止,我唯一的解決方案是創建一個循環來取消注冊遠程服務器中的MBean並創建它們,以獲取對象的實際值。 這非常難看,也不太好。

我希望有人可以給我一個提示,我怎么能以更好的方式做到這一點。

OpenDMK使用級聯服務提供了完整的方法。 從文檔:

級聯服務使您可以直接通過主代理的MBean服務器訪問子代理的MBean。 Java動態管理工具包(Java DMK)5.1中的級聯服務已經過全面改進,允許它通過Java Management Extensions(JMX)Remote API定義的連接器協議進行操作。 舊版級聯服務現已棄用。 出於向后兼容性的原因,第25章保留了傳統級聯服務的示例。 但是,在使用舊版Java DMK連接器時,應將新的CasdingServiceMBean與包裝的舊連接器一起使用,而不是依賴於已棄用的舊級聯代理API。

這個庫中有一些有趣的部分內容可以歸入JMX 2.0中的標准Java SE。 我認為,級聯服務就是其中之一。 一旦你理解它是如何工作的,你可以得出結論,你可以自己實現它,盡管OpenDMK確實有幾個棘手的角落案例。 我不確定該項目有多活躍,但軟件似乎很穩定。

您可以在此處找到文檔集。 另外,我在這里創建了一個包的mavenized項目構建。

//尼古拉斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM