2012-06-02 41 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