RMI NoSuchObjectException異常
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
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);