在 Java 程序中释放 RMI 端口
2009年9月14日
没有评论
通过 LocateRegistry.createRegistry(port) 创建了一个 rmiregistry 监听 port 所在端口,
如果想要在程序中把这个端口关闭,也就是关闭 RMI registry 服务,可以参考以下的代码。
注:似乎在2003年的时候,这个方法还行不通,到了 JDK6 的版本才解决这个问题的。
参考 Sun bug 4457683, bug 4508962, 以及 这个 mail archive。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import java.rmi.NoSuchObjectException; import java.rmi.Remote; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; public class RMITest { public void testRMIPortRelease() { System.out.println("Testing port release"); System.out.println("Acquiring port... "); Remote reg = null; try { reg = LocateRegistry.createRegistry(1102); } catch (RemoteException ex) { ex.printStackTrace(); } System.out.println("releasing port... "); try { java.rmi.server.UnicastRemoteObject.unexportObject(reg, true); } catch (NoSuchObjectException ex1) { ex1.printStackTrace(); } reg = null; } public static void main(String[] args) { RMITest s = new RMITest(); s.testRMIPortRelease(); } } |