8

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

4

4 回答 4

11

如果您想在编程中这样做,我们会执行以下操作:

// 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);
}

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

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

于 2011-12-05T13:28:41.547 回答
9

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

顺便说一句,只需键入:

% fg

然后关闭它类型:

Ctrl + c

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

于 2011-12-08T11:24:36.333 回答
1

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

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

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

于 2011-12-05T13:47:49.153 回答
1

如果 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);
}
于 2014-04-10T13:14:04.343 回答