如何从RMI运行时中删除远程对象

时间:2015-09-15 05:01:29

标签: java rmi remote-server remoteobject

当我使用时关闭RMI服务器程序时, serverReg.unbind("LibraryServer");它只删除远程对象的边界,它的关键字为“LibraryServer。如果我同时启动服务器,它会给我一个异常ObjID already in use。如何从注册表中完整删除远程对象? Remote对象的绑定语句及其关键是

serverReg.rebind("LibraryServer", new RemoteFactoryImpl());

2 个答案:

答案 0 :(得分:1)

  

当我使用serverReg.unbind(“LibraryServer”)关闭RMI服务器程序时;它只删除远程对象的[绑定],它的关键是'LibraryServer。

正确。

  

如果我同时启动服务器,它会给我一个例外ObjID已经在使用。

我希望看到异常和堆栈跟踪。

  

如何从注册表中完整删除远程对象?

你已经这样做了。您可能正在寻找一种取消导出远程对象的方法,该方法由UnicastRemoteObject.unexportObject()提供。

但是,ObjID already in use错误实际上只能来自尝试从已导出其中一个的JVM导出另一个 Registry 。这完全不符合你的描述。

答案 1 :(得分:-1)

好的,我找到了答案,unbined方法只删除了远程对象与其密钥之间的连接。因此无法使用相同的远程对象重新启动rmi服务器,因为第一个远程对象仍在注册表中。通过使用unexportObject类的UnicastRemoteObject方法可以完全从注册表中删除远程对象。我是从this的帖子中找到的。

UnicastRemoteObject.unexportObject(serverReg, false);