【问题标题】:How to close rmiregistry running on particular port?如何关闭在特定端口上运行的 rmiregistry?
【发布时间】:2012-01-13 05:36:53
【问题描述】:

我正在研究 Java RMI。我在端口 2028 上运行我的 rmiregistry 几乎没有问题,因为我已经使用它来运行我的测试程序。我可以使用其他端口运行我的程序,但我想知道,我们如何关闭在特定端口上运行的 rmiregistry?

【问题讨论】:

  • 您是以编程方式启动 rmiregistry 还是作为单独进程手动启动?
  • 没有。我正在启动它的 Linux shell,如下 % rmiregistry 2028&
  • 如果是手动启动,不能也手动停止吗?
  • 我找不到这样做的命令。这就是为什么在这里提出这个问题......

标签: java linux rmi rmiregistry


【解决方案1】:

如果你想在编程中这样做,我们会这样做:

// create the registry
Registry rmiRegistry = LocateRegistry.createRegistry(port);
...
// connect to it
JMXConnectorServer connector =
    JMXConnectorServerFactory.newJMXConnectorServer(url,
        new HashMap<String, Object>(),
        ManagementFactory.getPlatformMBeanServer());
// do stuff with it ...

// close the connection
if (connector != null) {
    connector.stop();
}
// deregister the registry
if (rmiRegistry != null) {
    UnicastRemoteObject.unexportObject(rmiRegistry, true);
}

这是full code for our JMXServer class。我们在创建其中 2 个并完全注销它们时遇到了问题,因此我们确保在不同的端口上运行我们的单元测试。

我在我的SimpleJmx JMX 客户端/服务包中使用此代码。

【讨论】:

  • 我正在从 shell 启动 rmiregistry。不通过程序使用它。
  • 我在 Eclipse 中遇到了类似的问题,注册表线程将继续使用上面的代码 sn-ps 永远运行。最后添加了 System.exit(0) ,这会杀死 JVM 中的所有线程,并且一切都很好;-)
  • +1 我正在停止连接器,但不知道如何摆脱注册表的服务器套接字。感谢您的回答。
【解决方案2】:

经过这么多的麻烦,我突然意识到 rmiregistry 在 shell 的后台运行。所以我们要做的就是关闭它,首先将它带到前台,然后关闭它。它奏效了。

顺便说一句,只需键入:

% fg

然后关闭它,输入:

Ctrl + c

就是这样。非常感谢所有试图帮助我的人。

【讨论】:

    【解决方案3】:

    如果您从 shell 运行 rmiregistry,请尝试使用以下命令关闭它:

    Process p = 
    Runtime.getRuntime().exec("ps -ef | grep rmiregistry | awk '{ print $2 }' | kill -9");
    

    我对 shell 命令不太熟悉,但我希望你能明白。

    【讨论】:

    • 我想从 shell 我将不得不使用 ps -ef | grep 注册表。我还没有尝试过。但我一定会让你知道的。谢谢。
    • @Tudor:对不起,没有成功……但我确实找到了答案。
    【解决方案4】:

    如果 rmi 注册中心已经在使用该端口,并且您想重新绑定服务而不使用另一个端口。你可以试试下面的代码

    Registry registry = null;
    try {
        registry = LocateRegistry.createRegistry(1099);
    } catch (ExportException ex) {
       registry = LocateRegistry.getRegistry(1099);
    } catch (RemoteException ex) {
      Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      相关资源
      最近更新 更多