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