有一种方法可以绕过这个限制,但它只是一个权宜之计。无论如何,请随意尝试。对我们有效。
在运行中央RMI注册表的主机上运行一个小服务,该服务将绑定一个仅具有一个远程方法proxyRebind的远程对象。此方法的实现只需将供应的对象绑定到中央注册表中(这不会失败,因为注册表与此服务位于同一台机器上)。
所有其他主机只需查找此远程对象并使用自己的远程对象调用proxyRebind。
这样做是可行的,因为允许在远程托管的注册表上查找。您最初的尝试失败是因为不允许在远程托管的注册表上进行绑定。
如果您需要进一步的澄清,请告诉我。
/ RS
2 有一个绕过限制的方法,但它只是一个解决方法。无论如何,随意尝试一下。对我们来说有效。
在运行中央RMI注册表的主机上运行一个小服务,该服务将绑定一个具有仅一个远程方法:proxyRebind的远程对象。此方法的实现仅会将提供给它的对象绑定到中央注册表中(这不会失败,因为注册表位于与此服务相同的计算机上)。
所有其他主机将简单地查找此远程对象并使用自己的远程对象调用proxyRebind。
这能够工作是因为允许在远程托管的注册表上进行查找。您最初的尝试失败是因为不允许在远程托管的注册表上进行绑定。
如果需要进一步澄清,请告诉我。
这个方法完全有效。唯一需要注意的是始终正确设置以下内容。 -Djava.rmi.server.hostname="LOCAL HOST IP"
如果我误解了你的问题,请告诉我。
我在Java RMI方面经验有限,我们在代理模式的设计模式课程中使用它。(教材:Headfirst Design Patterns)
我们无法从大学网络外部使项目正常工作,但是当直接连接到网络时,它们可以完美地工作。根据我们的教授,不可能在互联网或广域网上使用RMI来实现我们的实现。她建议的解决方案是需要VPN。我相信弗拉基米尔是正确的,这与它是本地命名服务有关。
我可能错了,但看起来rmiregistry应用程序本质上是本地命名服务的包装器。这意味着没有办法使其指向远程对象。
您需要的是一个命名实现,并且要集群化。考虑转移到J2EE AS集群解决方案中。JNDI树在集群内共享。
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
即使远程对象应该解析为 IP 192.168.126.137。我想知道是否有什么我漏掉的东西,你能否详细说明一下你的建议,将不胜感激。 - Mark Davidson