如何关闭在特定端口上运行的rmiregistry



我正在开发Java RMI。我在端口2028上运行我的rmiregistry没有什么问题,因为我已经使用该注册表来运行我的测试程序。我可以使用其他端口运行我的程序,但我想知道,我们如何关闭在特定端口上运行的rmiregistry ?

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

// 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客户端/服务包中使用了这段代码。

经过这么多的麻烦,我突然意识到rmiregistry是在shell的后台运行的。我们要做的就是先关闭它把它放到前台,然后再关闭。

顺便说一下,要把它放到前台,只需键入:

% fg

,然后键入:

Ctrl + c

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

如果您正在从shell运行rmiregistry,请尝试使用:

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

我对shell命令不是很熟悉,但是我希望你能理解。

如果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);
}

相关内容

  • 没有找到相关文章

最新更新