使用单个RMI注册表

Mar*_*son 8 java networking distributed rmi exception

我一直在使用RMI进行我正在进行的项目,并且我想从多个主机绑定到单个RMI注册表.

但是,当我尝试这样做时,我得到一个错误说

java.rmi.AccessException:不允许Registry.Registry.bind; origin/192.168.0.9是非本地主机

我这样做谷歌搜索,似乎RMI默认停止远程主机绑定,我想知道是否有某种方式覆盖或绕过这个?

如果有人就如何解决这个问题提出任何建议,我们将非常感激,我尝试过使用不同的策略文件并覆盖安全管理器,但似乎都没有.

小智 7

有一种方法可以绕过限制,但事实就是如此:一种解决方法.无论如何,请随意尝试.它对我们有用.

在运行中央RMI注册表的主机上运行一个小服务,它将使用一个远程方法绑定远程对象:proxyRebind.此方法的实现只是绑定在中央注册表中提供给它的对象(这不会失败,因为注册表与此服务在同一台机器上).

所有其他主机只需查找此远程对象并使用自己的远程对象调用proxyRebind.

这是有效的,因为允许在远程托管的注册表上进行查找.您的原始尝试失败,因为不允许绑定远程托管的注册表.

如果您需要进一步明确这一点,请与我们联系.

/ RS


Mar*_*son 0

感谢大家的回答,我最终提出的解决方案是使用Cajo 框架,这提供了一个非常灵活的分发系统,它允许我按照我认为合适的方式处理注册表。它还可以在 NAT、防火墙和 HTTP 代理后面工作,这非常有用。

我相信 rndm.buoy 建议的代理方法在某些情况下会起作用,但在某些系统上可能会很麻烦。RMI 似乎在关联到错误的网络接口时存在一些问题。在基于 Debian 的 Linux 发行版上运行时,我尤其遇到了这个问题。