rmir​​egistry或JNDI是否以序列化形式存储对象

时间:2016-08-30 15:10:37

标签: java jndi rmi

我读到我可以使用rmiregistry或JNDI作为RMI的目录服务。据我所知,远程对象的存根被存储并与这种目录服务中的密钥相关联。

现在我的问题是,存根是以序列化形式存储还是作为rmiregistry / JNDI中的“活动”对象存储?

如果存储序列化不会分布式垃圾收集失败吗?

2 个答案:

答案 0 :(得分:2)

  

我读到我可以使用rmiregistry或JNDI作为RMI的目录服务。

不,你没有。您了解到可以将Registry用作目录服务,并将JNDI用作它的API。

  

据我所知,远程对象的存根被存储并与这种目录服务中的密钥相关联。

正确。

  

现在我的问题是,存根是以序列化形式存储还是作为rmiregistry / JNDI中的“活动”对象存储?

它被序列化到注册表并在到达时进行反序列化(解组)。在Registry中,它是一个普通的Java对象。

  

如果它是存储序列化的......

不是。

JNDI真的与它毫无关系。

答案 1 :(得分:0)

RMI 注册表将远程对象存储为“活动”对象的原因是 RMI 注册表只是一个常规的 RMI 对象。它通过 java.rmi.registry.Registry 接口公开其操作,这是一个常规的 java.rmi.Remote 接口。

实际上与常规 RMI 对象有一个小的区别 - RMI 注册表 gets exported 作为永久对象 - 它是一个内部选项,使对象不受分布式垃圾收集的影响。