Java rmi注册表绑定问题

Java rmi注册表绑定问题,java,rmi,distribution,distributed-system,rmiregistry,Java,Rmi,Distribution,Distributed System,Rmiregistry,我正在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()); 在哪里 但我有一个例外: java.rmi.AccessException: Registry.Registry.rebind disallowed; origin /192.16

我正在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());
在哪里

但我有一个例外:

    java.rmi.AccessException: Registry.Registry.rebind disallowed; origin /192.168.133.3 is non-local host
我认为RMI注册表不接受任何不在同一服务器上运行的RMI服务器 RMI注册表正在运行的计算机

但是如何让这个注册表接受我的rmi服务器呢

p、 s:我正在使用JBuilderX作为IDE


我正在尝试实现一个移动代理,它将在一些rmi服务器上运行,在这些服务器上执行一些工作,并将结果返回到起始站点,这样rmi服务器将实现承载此代理执行其工作的环境,并将其发送到它将通过注册表找到的下一个站点


RMI不提供任何类型的“联合”或分布式命名服务

RMI的结构允许您在服务器上运行RMI注册表。它承载可以通过网络访问的服务,但是这些服务在该服务器上本地运行

所提供的服务必须在服务器上启动并“重新绑定”,而不是在任何客户端系统上。仅限本地地址

然后,您的客户应该联系到该服务器

尝试绑定RMI服务器(在不同的vm XP IP:192.168.133.3上运行)

停在那里。你不能那样做。您只能将RMI服务器绑定到与执行绑定的代理运行在同一主机上的注册表


请注意,这并不一定意味着与远程对象本身运行的主机相同。例如,客户端可以查找远程注册表并将检索到的存根绑定到本地注册表中。但是您无法将任何内容绑定到远程注册表。

我正在尝试实现一个移动代理,它将在一些rmi服务器上运行,对它们执行一些工作,并将结果返回到起始站点,以便rmi服务器实现承载此代理执行其工作的环境,并将其发送到下一个站点,该站点将通过注册表。。所以你说我不能创建一个多主机服务器(每个服务器运行在不同的机器上,但在同一个网络上)。对吗?我是说“多主机”集合中的每台服务器都必须单独运行本地注册中心,您的服务的本地副本将绑定到该注册中心。如果您希望您的客户能够轮换到不同的RMI服务,这是RMI提供的之上的一层;您必须在RMI之外想出一些方法来实现这一点(JNDI命名在这里可能很有用:-),但是如果代理在机器A上运行,并且想要移动到机器B,那么如果没有包含所有服务的联合注册中心,它如何定位B?这是一个很好的问题,还有一个问题RMI没有提供答案。你的描述很接近,足以解决这个问题,但并不准确。注册表将只接受来自本地主机上运行的进程的
bind/rebind/unbind
请求,但不要求要绑定的对象在本地主机上运行。例如,程序可以在远程注册表中查找对象并将其绑定到本地注册表;然后,本地注册表将包含对远程主机中运行的服务器的引用。
    java.rmi.AccessException: Registry.Registry.rebind disallowed; origin /192.168.133.3 is non-local host