代码之家  ›  专栏  ›  技术社区  ›  ccc

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

  •  0
  • ccc  · 技术社区  · 10 年前

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

    serverReg.rebind("LibraryServer", new RemoteFactoryImpl());
    
    2 回复  |  直到 10 年前
        1
  •  3
  •   user207421    10 年前

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

    对的

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

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

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

    你已经这么做了。你可能正在寻找一种方法 未出口的 远程对象,由 UnicastRemoteObject.unexportObject() .

    然而 ObjID already in use 实际上,错误只能来自于试图导出另一个 注册表 从您已经在其中导出了一个JVM。这与你的描述完全不相符。

        2
  •  -1
  •   ccc    10 年前

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

    UnicastRemoteObject.unexportObject(serverReg, false);