当我运行一个使用Java RMI的客户端-服务器应用程序时,我注意到即使我没有在命令提示符中启动"rmiregistry",它似乎仍然可以工作
try {
LocateRegistry.getRegistry(1099).list();
System.out.println("rmiregistry WAS started before running the application"); }
catch (RemoteException e) {
LocateRegistry.createRegistry(1099);
System.out.println("rmiregistry WAS NOT started before running the application"); }
任何有知识的人都可以弄清楚发生了什么,以及它对项目的影响?
LocateRegistry.getRegistry(1099).list();
System.out.println("rmiregistry WAS started before running the application"); }
这种信息具有误导性。getRegistry()
不执行任何网络通信,因此它成功的事实并不能有效地表明注册表正在运行。只有使用getRegistry()
的结果才能告诉您这一点。
你是背靠背的。您必须首先尝试createRegistry()
调用,如果该调用失败,则如果注册表已在运行,则执行getRegistry() call.
createRegistry()`将失败,如果未运行,则成功。