我有几个导出 RMI 接口(interface)的服务。
他们过去常常通过创建自己的注册表(使用 LocateRegistry.createRegistry
)并将其绑定(bind)到那里来提供此服务。然而,当服务被移动为在同一 VM (Tomcat) 中作为单独的应用程序运行时,这变得不可能了,因为出于某种原因,那里只能存在一个注册表。
我通过对所有服务使用中央注册表来解决这个问题。即便如此,我对注册表的多对象注册表角色并不真正感兴趣,只对它的入口点设施感兴趣。然而,中央注册表引入了更多的复杂性(例如,它必须首先启动,它必须具有它注册的服务的接口(interface))。
有没有办法恢复每个服务独立提供其 RMI 接口(interface)的入口点,同时让它们在同一 VM 中运行(这是托管细节,而不是设计的一部分)的情况?
最佳答案
我忘了我问过 a similar question已经(出于不同的原因,减少代码,在我将服务一起移动到一个 VM 之前),第一个答案提出了一种绕过注册表的方法:
Use UnicastRemoteObject, serialize the stub obtained when you export the object, and use a shared file, or a socket, or sneakernet, to make the stub available to clients.
关于java - 单个 RMI 服务的简单入口点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11399408/