考虑以下设置:


因此,有一个JMX服务器,我们希望可以从不同的JMX客户端访问它,但是问题是这些不同的JMX客户端通过不同的名称/地址知道HostX。为了便于说明,假设HostA以hostx的名称知道HostX,但是HostB以hostxshadow的名称知道HostX。

我正在寻找有关在以下情况下如何解决此问题的建议:


在这里,我可以控制JMX客户端和JMX服务器的源代码。
在我无法控制源代码的地方,即可以在JVM上设置系统属性,仅此而已。


要解决的基本问题是,在RMI世界中,服务器端决定客户端应如何连接(对吗?)。所以设置例如HostX上的java.rmi.server.hostname不能提供帮助。如我所见,我只能使HostA高兴或HostB高兴,但不能同时使两者高兴。

是否真的得出结论:只有所有客户端都使用相同的名称来访问它,任何RMI Server才能正常工作?

最佳答案

您的结论是正确的。这是RMI中的设计缺陷。有一个基本的假设,即每个人都可以通过一个“最公开的”主机名或IP地址来联系服务器主机。

您关于主机在存根中嵌入其自己的名称或地址的声明也是正确的。

07-24 09:44