【问题标题】:How can i remove the remote object from the RMI runtime如何从 RMI 运行时中删除远程对象
【发布时间】:2015-09-15 05:01:29
【问题描述】:

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

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

【问题讨论】:

  • 你能解释一下吗?你的代码看起来不错。你的期望是什么。
  • 简单地说,我需要在多次关闭服务器后启动我的服务器。我第一次启动服务器并关闭它工作正常。在关闭服务器并尝试使用相同的端口、相同的远程对象和相同的密钥LibraryServer 再次启动它之后,它给了我这个异常。

标签: java rmi remote-server remoteobject


【解决方案1】:

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

正确。

如果我同时启动服务器,它会给我一个异常 ObjID 已在使用中。

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

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

你已经这样做了。您可能正在寻找一种方法来unexportUnicastRemoteObject.unexportObject() 给出的远程对象。

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

【讨论】:

    【解决方案2】:

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

    UnicastRemoteObject.unexportObject(serverReg, false);
    

    【讨论】:

    • 你误会了。 unbind() 从注册表中删除对象。 unexportObject() 取消导出对象。它们不是一回事。
    猜你喜欢
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    相关资源
    最近更新 更多