gpt4 book ai didi

Java RMI : setup-method returns immediatly and RMI threads aren't created

转载 作者:行者123 更新时间:2023-11-29 08:49:08 24 4
gpt4 key购买 nike

我正在尝试设置一个简单的 RMI 服务器,该服务器绑定(bind)到注册表以便客户端获取所有进一步的通信。我正在使用下面的代码:

public class RMIServer implements ServerInterface {

static Registry reg;

public static void main(String[] args) throws NoSuchObjectException {
//Registry reg;
try {
reg = LocateRegistry.createRegistry(1099);
System.out.println("Registry created.");
} catch (RemoteException ex) {
System.err.println("Registry already existed.");
return;
}
ServerInterface server = new RMIServer();
ServerInterface stub;
try {
stub = (ServerInterface)UnicastRemoteObject.exportObject(server, 0);
} catch (RemoteException ex) {
System.err.println("Could not create stub.");
ex.printStackTrace();
return;
}
try {
reg.rebind("server", stub);
System.out.println("Server bound to registry.");
} catch (RemoteException ex) {
System.err.println("Could not bind server to registry.");
ex.printStackTrace();
//UnicastRemoteObject.unexportObject(server, true);
return;
}
}
...
}

这在我的本地机器上测试时工作得很好,我能够在(本地)客户端和服务器之间建立连接。上面的主要方法在我手动终止之前不会退出,这是预期的行为。我的本地计算机 (Win8) 运行 Java 1.7.0_17 64 位。

现在,当我在带有 OpenJDK(版本 1.7.0_55 64 位)的 Ubuntu 12.04 服务器上执行与上面相同的代码时,主要方法和整个 JVM 立即退出并且 RMI 线程没有运行。没有打印错误信息;我只收到有关正在创建的注册表和绑定(bind)到注册表的服务器的消息。显然客户端无法连接,因为服务器上没有运行 RMI 进程。

据我所知,只要有我没有再次取消导出的导出对象,main 方法就不会自动退出。但它在我的一台机器上确实如此。

有谁知道我在这里遗漏了什么?

谢谢!

更新 1:(抱歉,最近很忙,直到现在才有机会进一步了解它)。即使更新到 Ubuntu 14.04 后,问题仍然存在于 Java 6、7、OpenJDK 和 Sun 的版本。

但是,我设法在云中托管的另一台完全不同的机器上重现了该问题,该机器也运行 Ubuntu 服务器 14.04 x64(尽管除了 java 安装之外几乎完全干净)。不过,我仍在尝试弄清楚如何准确地重现它(当我知道更多时会更新)。

在两台机器上重新启动系统时,问题都消失了(似乎是暂时的)。同样为了完整性:奇怪的是,当系统日志级别设置为 FINE 或 FINEST 时,代码突然按预期运行。我仍然很困惑。

最佳答案

将“reg”变量设为静态。否则对GC和DGC负责,会unexport,进而导致服务端的DGC及其unexporting,进而导致socket关闭,监听线程退出。

关于Java RMI : setup-method returns immediatly and RMI threads aren't created,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23575469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com