我正在研究Java RMI。我在端口2028上运行我的rmiregistry没有什么问题,因为我已经使用那个来运行我的测试程序。我可以使用其他端口运行我的程序,但我想知道,我们如何关闭在特定端口上运行的rmiregistry?
答案 0 :(得分:10)
如果您想在编程中执行此操作,我们会执行以下操作:
// 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客户端/服务包中使用此代码。
答案 1 :(得分:8)
BTW将它带到前台只需键入:
% fg
然后关闭它类型:
Ctrl + c
就是这样。非常感谢所有试图帮助我的人。
答案 2 :(得分:1)
如果你从shell运行rmiregistry,请尝试用以下命令关闭它:
Process p =
Runtime.getRuntime().exec("ps -ef | grep rmiregistry | awk '{ print $2 }' | kill -9");
我对shell命令不是很新鲜,但我希望你明白这一点。
答案 3 :(得分: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);
}