3

我在 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 Registry 不接受任何不在同一台 RMI Registry 运行机器上运行的 rmi 服务器。

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

ps:我使用 JBuilder X 作为 IDE。

我正在尝试实现一个移动代理,它将在一些 rmi 服务器上运行以对它们进行一些工作并将结果返回到起始站,以便 RMI 服务器实现托管该代理的环境以完成其工作并将其发送到下一个它将通过注册表找到的站点

4

2 回答 2

4

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

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

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

于 2012-12-13T09:47:14.883 回答
1

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

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

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

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

于 2012-12-12T22:22:56.630 回答