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

How can i remove the remote object from the RMI runtime

当我使用关闭 RMI 服务器程序时, serverReg.unbind("LibraryServer"); 它只删除远程对象的绑定和它的键'LibraryServer。如果我同时启动服务器,它会给我一个例外 ObjID already in use。我怎样才能从注册表中完全删除远程对象?。 远程对象的绑定语句及其关键是,

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

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

UnicastRemoteObject.unexportObject(serverReg, false);

When I shutdown the RMI server program by using, serverReg.unbind("LibraryServer"); it only remove the [binding] of remote object and it's key 'LibraryServer.

正确。

If i start the server same time it give me an exception ObjID already in use.

我想查看该异常和堆栈跟踪。

How can I entirety remove remote object from the registry?

您已经这样做了。您可能正在寻找 unexport 远程对象的方法,该对象由 UnicastRemoteObject.unexportObject().

给出

然而,ObjID already in use 错误实际上只能来自尝试从您已经导出一个的 JVM 导出另一个 Registry。这与您的描述完全不符。