我读到我可以使用rmiregistry或JNDI作为RMI的目录服务。据我所知,远程对象的存根被存储并与这种目录服务中的密钥相关联。
现在我的问题是,存根是以序列化形式存储还是作为rmiregistry / JNDI中的“活动”对象存储?
如果存储序列化不会分布式垃圾收集失败吗?
答案 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 作为永久对象 - 它是一个内部选项,使对象不受分布式垃圾收集的影响。