RMI服务器会在一段时间后终止

时间:2016-05-18 08:55:09

标签: java eclipse rmi

我从Eclipse运行我的测试RMI服务器。 目前,它只包含我的RMI接口(IRDSA)的实现,只有很少的方法,服务器本身在这个主要实现: (使用专用端口号)

    static Registry registry;
    public static void main(String[] args) {
        // start Registry
        try {
            registry = LocateRegistry.createRegistry(RMI_PORT);
        } catch (ExportException exp) {
            System.out.format ("RMI Registry (Port %d) already active. Providing", RMI_PORT);
            try {
                Registry    existingReg = LocateRegistry.getRegistry(RMI_PORT);
                String[] bound = existingReg.list();
                for (String entry : bound)
                    System.out.println (entry);
            } catch (RemoteException e) {
                e.printStackTrace();
            } 
            return;
        } catch (RemoteException e) {
            e.printStackTrace();
            return;
        }

        try {
            IRDSA server = new RDSAServer();
            IRDSA stub = (IRDSA) UnicastRemoteObject.exportObject(server, 0);

            // Bind the remote object's stub in the registry
            registry.bind(RMI_NAME, stub);

            System.out.println("RDSAServer ready");
        } catch (Exception e) {
            System.err.println("RDSAServer exception: " + e.toString());
            e.printStackTrace();
        }
    }
}

对于测试,我启动一个本地客户端,它可以很好地执行这些方法。 这可以重复,服务器保持活动状态,无论主服务器已经完成。 但过了一段时间,即使我保持客户端连接(暂停休息),当我从午餐返回时,客户端仍然被暂停,但服务器被静默终止。

当它完全发生时,我该如何避免呢?

发现了一个类似的问题,其中注册表应该是静态的(在这里)

我必须保持活着吗?

还有别的吗?

2 个答案:

答案 0 :(得分:1)

您的服务器 - 应用程序仅包含启动和绑定RMI服务器的主方法。只有存在客户端调用的存根实例时,RMI服务器才会存在。如果它们被垃圾收集,那么服务器将被JVM关闭。

为了简单起见,您可以在main方法中使用循环,这样主线程就不会结束,并且您的RMI-Server也将保持活动状态。

答案 1 :(得分:0)

希望这个能帮到你, Java远程方法调用(Java RMI)是一种Java API,它执行远程方法调用,这是面向对象的远程过程调用(RPC),支持直接传输序列化Java类和分布式垃圾收集。

https://en.wikipedia.org/wiki/Java_remote_method_invocation