简单的切入点单RMI服务?(Simple entry point for single RMI se

2019-09-19 06:18发布

我有几个服务,导出RMI接口。

他们用通过创建自己的注册表(与提供此LocateRegistry.createRegistry ),并有约束力的。 然而,这成为不可能当服务被转移到运行在相同的虚拟机(Tomcat)的作为单独的应用,因为某些原因只有一个注册表可以存在那里。

我工作围绕这通过使用一个中央注册表中的所有服务。 即使这样,我不是在注册表中的多对象注册表的角色很感兴趣,只是它的入口点设施。 一个中心登记,但是,引入了更多的复杂性(例如,它必须首先启动,它必须有服务的它注册接口)。

有没有一种方法带回每个服务提供自主承担切入点,以它的RMI接口的情况,同时让他们在同一个虚拟机上运行(这是一个托管的细节,而不是设计的一部分)?

Answer 1:

我忘了,我问过类似的问题已经(出于不同的原因,减少了代码,之前我在1 VM移动服务结合在一起),其中第一个答案提示的方式来规避注册表:

使用了UnicastRemoteObject,序列化,当你导出对象,并使用一个共享的文件或插座,或sneakernet,使存根可供客户端所获得的存根。



Answer 2:

你不能让每个JVM一个以上的注册,因为注册表有一个固定的RMI对象ID。 只要调整所有的服务器,开始是这样的:

static Registry registry;
// ...
try
{
  registry = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
}
catch (...) // whatever the exception is, probably ExportException
{
  registry = LocateRegistry.locateRegistry(Registry.REGISTRY_PORT);
}
registry.rebind(...); // etc

然后其中哪一个先启动将启动注册表和其他人将使用它。



Answer 3:

如果您仍有兴趣在这个问题一年后....

它可以在同一个JVM中启动多个注册。 只需拨打LocateRegistry.getRegistry具有鲜明的端口。 你必须有知名端口为每个服务,但我认为你这样做已如果你从实现的选项3 这样的回答其他问题 。

很久以前有,阻止多注册在同一个JVM共存的错误,但这种固定在JDK 5可能有东西在Tomcat中,以防止多个RMI注册表运行。 或者,它可能是Tomcat的使用你的版本是一个非常老的JDK的顶部。



文章来源: Simple entry point for single RMI service?