RMI NoSuchObjectException异常
java.rmi.NoSuchObjectException: no such object in table
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
at com.nineday.ServiceImpl_Stub.doService(Unknown Source)
… …
异常的含义是:试图调用远程虚拟机上已不存在的对象上的方法。这个问题很隐蔽,现象是有时候抛这个异常,有时候调用正常。
问题的原因:由于在远程服务器export匿名远程对象,
Remote stub = UnicastRemoteObject.exportObject(new ServiceImpl(), 9999);
匿名对象没有引用,导致随时可能会被JAVA垃圾回收器回收,所以出现了上述现象。
把代码改成如下即可:
static ServiceImpl service = new ServiceImpl()
Remote stub = UnicastRemoteObject.exportObject(service, 9999);