我正在使用IP:192.168.133.2在虚拟机(运行Windows XP)上运行RMI Regitry 并尝试绑定RMI服务器(在不同的vm XP IP上运行:192.168.133.3) 使用此代码:
Naming.rebind("//192.168.133.2/rmi.2", new RMI());
,其中
public class RMI extends UnicastRemoteObject
但我得到了这个例外:
java.rmi.AccessException: Registry.Registry.rebind disallowed; origin /192.168.133.3 is non-local host
我认为RMI注册表不接受任何未运行的rmi服务器 RMI Registry运行机器。
但如何使这个注册表接受我的rmi服务器?
p.s:我正在使用JBuilder X作为IDE。
我正在尝试实现一个移动代理,它将在某些rmi服务器上运行以对它们进行一些工作并将结果返回到起始站,因此RMI服务器实现托管此代理的环境以完成其工作并发送它到下一个通过注册表找到的电台
答案 0 :(得分:4)
尝试绑定RMI服务器(在不同的vm XP IP上运行:192.168.133.3)
停在那儿。你不能这样做。您只能将RMI服务器绑定到与执行绑定的代理程序在同一主机中运行的注册表。
请注意, not 不一定意味着与远程对象本身运行的主机相同。例如,客户端可以查找远程注册表并将检索到的存根绑定到本地注册表中。但是你不能将任何东西绑定到远程注册表。
答案 1 :(得分:1)
RMI不提供任何类型的“联合”或分布式命名服务。
RMI的结构允许您在服务器上运行RMI注册表。它托管可以通过网络访问的服务,但服务在本地服务器上运行。
所提供的服务必须在服务器上启动 - 并“重新绑定” - 而不是在任何客户端系统上。仅限本地地址。
然后您的客户应该联系该服务器......