2012-06-02 42 views
2

在工作中,我們有兩臺裝有Windows XP和JDK 1.6.0_07的PC(目前無法更新Java),兩種網絡接口(NIC)都具有IP形式190.1.XXX.XXX(讓我們稱它爲IA),第二個爲190.2.XXX.XXX(IB)。 「ipconfig/all」爲這兩個NIC帶來主機名HOSTNAME,所以做「nbtstat/a IA」和「nbtstat/a IB」。從IB到IA不存在ping(我想,從IA到IB沒有,儘管沒有檢查它)。出於健壯性的考慮,我們應該確保我們的真實應用程序能夠在兩個NIC上使用JMX。這裏的問題開始了。相同的行爲可以與以下觀察:JMX和兩個網絡接口

java -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar <JDK_HOME>/demo/jfc/Java2D/Java2Demo.jar 

在第二PC帶來的JConsole並附着到遠程進程與一個:IA:9000或IB:9000或主機名:9000。他們都工作。但是,如果我在第一臺PC(Java2Demo正在運行)上禁用IA,則根本不可能有任何附件(無論是IB還是HOSTNAME)。通過IB平安工作,所以做mstsc(所以有一個IB連接)。但是,如果我禁用IB,則通過IA和HOSTNAME獲取附件。

  1. 我只是不明白它是如何可能的,在這種情況下JConsole不會附加在IB上。 AFAIK,如果我們沒有定義java.rmi.server.hostname,JMX使用0.0.0.0並監聽兩個NIC。如果這與網絡本身有關,請提出建議,詢問IT部門。
  2. 我們真正的應用程序有一個解決方法:在第一臺PC上啓動2個獨立的進程,每個進程僅在一個NIC上具有JMX,第三個進程將來自客戶端的數據與第三個JMX進行合併。這三個進程分別從.bat文件啓動。我真的想改變這種情況,在兩個NIC上都有一個JMX的進程;或者至少,用兩個JMX啓動一個進程,每個NIC啓動一個進程(如果可能的話)。是嗎?

非常感謝。

回答

0

您可以使用JMXConnectorServerFactory在同一個jvm上啓動多個JMXConnectorServers(網上有很多示例/教程)。您可以公開平臺MBeanServer或您自己的自定義MBeanServer。

+0

實際上,正如我所見,連接問題是由於綁定到IA的RMIRegistry。根據[this](http://weblogs.java.net/blog/emcmanus/archive/2006/12/multihomed_comp.html),可以找到解決方法。根據[that](https://kr.forums.oracle.com/forums/thread.jspa?messageID=4816956),必須運行2個JVM。我應該正確地檢查問題,但我會很樂意得到一些幫助。感謝 – igorepst

+0

使用我的建議,您將設置2個獨立的rmi註冊表,這樣就不會成爲問題。你真的嘗試過嗎? – jtahlborn

+0

謝謝你的迴應。是的,我做到了。不幸的是,它沒有奏效。你可以發佈一個鏈接到任何教程,這可能對我有幫助嗎?同樣,根據我發佈的鏈接,有些人認爲在一個JVM中做不到這一點。如果您願意,我可以發佈我寫的參考應用程序,其行爲與我們的主應用程序相同。謝謝! – igorepst