考虑以下设置:
因此,有一个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地址来联系服务器主机。
您关于主机在存根中嵌入其自己的名称或地址的声明也是正确的。