在 Java 程序中释放 RMI 端口

目录 技术

通过 LocateRegistry.createRegistry(port) 创建了一个 rmiregistry 监听 port 所在端口,

如果想要在程序中把这个端口关闭,也就是关闭 RMI registry 服务,可以参考以下的代码。

注:似乎在2003年的时候,这个方法还行不通,到了 JDK6 的版本才解决这个问题的。

参考 Sun bug 4457683bug 4508962, 以及 这个 mail archive


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


暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注