当我使用关闭RMI服务器程序时, serverReg.unbind("LibraryServer"); 它只删除远程对象及其键的绑定 LibraryServer 。如果我同时启动服务器,它会给我一个异常 ObjID already in use 。如何从注册表中完全删除远程对象?。 Remote对象的绑定语句及其关键是,
serverReg.unbind("LibraryServer");
LibraryServer
ObjID already in use
serverReg.rebind("LibraryServer", new RemoteFactoryImpl());
当我使用serverReg关闭RMI服务器程序时。解除绑定(“LibraryServer”);它只删除远程对象的[绑定]及其键“LibraryServer”。
对的
如果我同时启动服务器,它会给我一个已在使用的异常ObjID。
我希望看到异常和堆栈跟踪。
如何从注册表中完全删除远程对象?
你已经这么做了。你可能正在寻找一种方法 未出口的 远程对象,由 UnicastRemoteObject.unexportObject() .
UnicastRemoteObject.unexportObject()
然而 ObjID already in use 实际上,错误只能来自于试图导出另一个 注册表 从您已经在其中导出了一个JVM。这与你的描述完全不相符。
好吧,我找到了答案, unbined 方法只删除远程对象及其键之间的连接。所以无法使用相同的远程对象重新启动rmi服务器,因为第一个远程对象仍在注册表中。通过使用 unexportObject 方法 UnicastRemoteObject 类可以从注册表中完全删除远程对象。我从 this .
unbined
unexportObject
UnicastRemoteObject
UnicastRemoteObject.unexportObject(serverReg, false);