Linux上的java.rmi.NoSuchObjectException

时间:2013-01-24 12:54:57

标签: java linux rmi



我正在开发两个通过RMI连接的应用程序。通信是双向的,一切正常,直到我在Windows上运行。当我把jar文件带到Debian时,连接失败了java.rmi.NoSuchObjectException

知道linux有什么区别或为什么不工作?

编辑:我的代码:
服务器端:

static Registrator clientRegistrator = null; // static field, interface extending java.rmi.Remote
...
Registry rmiRegistry = LocateRegistry.createRegistry(RmiConstants.RMI_REGISTRY_PORT);
clientRegistrator = (Registrator) UnicastRemoteObject.exportObject(new RmiClientRegistrator(networkListeners), RmiConstants.RMI_REGISTRY_PORT); // RmiClientRegistrator implements Registrator interface
rmiRegistry.bind(RmiConstants.RMI_SERVER_MARK, clientRegistrator);


客户方:

static Registrator serverRegistrator = null;
String rmiConnectionString = "rmi://localhost:" + RmiConstants.RMI_REGISTRY_PORT + "/" + RmiConstants.RMI_SERVER_MARK;
serverRegistrator = (Registrator) Naming.lookup(rmiConnectionString);
serverRegistrator.registerClient(dataReceiver); // fails here, with mentioned exception

2 个答案:

答案 0 :(得分:2)

存根引用的远程对象不再存在。更准确地说,它不再导出。当客户端仍然有活动存根时,不应该发生这种情况,除非您自己取消了它,或者除非网络分区导致DGC失败。

对此最可靠的解决方法是在导出的JVM中保留对远程对象的静态引用。

答案 1 :(得分:-1)

你看到了吗:

java.rmi.NoSuchObjectException: no such object in table

Java RMI NoSuchObjectException

here

  

如果尝试在远程虚拟机中不再存在的对象上调用方法,则抛出 NoSuchObjectException 。如果在尝试调用远程对象上的方法时发生NoSuchObjectException,则可以重新传输该调用并仍然保留RMI的“最多一次”调用语义。方法java.rmi.server.RemoteObject.toStub以及java.rmi.server.UnicastRemoteObject和java.rmi.activation.Activatable和

的unexportObject方法也抛出NoSuchObjectException。