【发布时间】:2017-01-06 22:57:21
【问题描述】:
我读到我可以使用 rmiregistry 或 JNDI 作为 RMI 的目录服务。据我了解,远程对象的存根被存储并与此类目录服务中的键相关联。
现在我的问题是,存根是以序列化形式存储还是作为 rmiregistry/JNDI 中的“活动”对象存储?
如果是序列化存储,分布式垃圾回收不会失败吗?
【问题讨论】:
我读到我可以使用 rmiregistry 或 JNDI 作为 RMI 的目录服务。据我了解,远程对象的存根被存储并与此类目录服务中的键相关联。
现在我的问题是,存根是以序列化形式存储还是作为 rmiregistry/JNDI 中的“活动”对象存储?
如果是序列化存储,分布式垃圾回收不会失败吗?
【问题讨论】:
RMI 注册表将远程对象存储为“活动”对象的原因是 RMI 注册表只是一个常规 RMI 对象。它通过java.rmi.registry.Registry 接口公开其操作,这是一个常规的java.rmi.Remote 接口。
实际上与常规 RMI 对象有一个小区别 - RMI 注册表gets exported 作为永久对象 - 它是一个内部选项,使对象不受分布式垃圾收集的影响。
【讨论】:
我了解到我可以使用 rmiregistry 或 JNDI 作为 RMI 的目录服务。
不,你没有。您读到可以将 Registry 用作目录服务,并将 JNDI 用作它的 API。
据我了解,远程对象的存根被存储并与此类目录服务中的键相关联。
正确。
现在我的问题是,存根是以序列化形式存储还是作为 rmiregistry/JNDI 中的“活动”对象存储?
它被序列化到注册表并在到达时反序列化(解组)。在 Registry 中,它是一个普通的 Java 对象。
如果是序列化存储的……
不是。
JNDI 真的与它无关。
【讨论】: