java - 在客户端上生成 RMI stub

标签 java rmi

虽然我将我的服务器绑定(bind)到 RMI 注册表,以便客户端可以从众所周知的源查找服务,但我需要更多地了解 RMI 机制,因为我不想在将来使用注册表,而我的客户端应该能够为他们想要联系的特定服务器创建 UnicastRemoteObject(或其子类)。

我觉得这个问题实际上可能有一个明显的答案,但如果有人可以指导我完成这些步骤,我确实会很感激。客户端需要了解什么才能创建 stub 并使用远程服务?

所以,我在一台设备上有一个服务器,并且我有一个想要使用此服务的客户端。服务器对象已导出,但尚未注册到服务器和客户端都知道的位置的目录上。客户端是否可以自己创建一个 stub ,而不必使用服务器导出的 stub ?服务器需要什么信息来创建 stub ?服务器的IP?港口?还有什么?如何将所有这些信息放在一起来创建 stub ?

我不想使用注册表,因为使用注册表过于集中。我实际上有一个设备集群,它们既充当客户端又充当服务器,这些设备提供并使用相同的服务。每个设备代表自己的自主神经元,它们一起发挥作用就像一个神经系统。

当非集群成员的设备被集群成员占用时,集群就会增长。一旦非成员设备成为成员,与其接合的成员就让其他成员知道现在新成员的 stub ,以便其他成员可以尝试接合新成员。使用注册表不会给这个集群带来任何有值(value)的东西。

如果没有注册表,第一个与非成员(member)互动的成员(member)是“手动”完成的。我想,当非成员设备启动并且非成员设备让运算符(operator)知道(通过某些显示)必须用于创建允许第一个成员设备使用它的 stub 的参数时,此手动过程将会有所帮助。

最佳答案

“为特定服务器创建一个UnicastRemoteObject”是没有意义的。任何时候您创建一个,它都会在本地主机上运行。 [有一个异常(exception),但不适用于本例。]

Can the client create a stub itself rather than having to use the one that was exported by the server?

没有。 [同样有一个异常(exception),因为这正是 Registry.locateRegistry() 所做的,但它使用您不知道的类,所以您不能。]

您必须解释您对将注册表用于此目的(如 RMI 设计者的意图)的厌恶。

编辑您真正需要的是分布式注册表。没有(也不可能)适用于 RMI/JRMP,但您可以调查 RMI/IIOP 和合适的 ORB 供应商,这对他们来说就是肉和饮料。或者通过 JNDI 使用中央 LDAP 服务器而不是注册表。

关于java - 在客户端上生成 RMI stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36475018/

相关文章:

java RMI - 多个主机注册具有相同名称的对象

java - GWT CellTable 选择并单击 CheckBoxCell

java - 通过在java中放入列表来设置和获取数据循环

Java 使用 StyledDocument 更改 JTextPane 上元素的颜色

Java RMI 错误 : Connection Reset

java - 异步 Java RMI

Java RMI 应用程序不退出

java - 如何在多层环境(REST + EJB + Core)中使用JPA EclipseLink连接DB?

java - 如何将表单字段绑定(bind)到 Play 2 Framework 中的对象

java - RMI - 线程池子线程套接字权限问题