[英]Getting java.rmi.NoSuchObjectException while invoking a method on remote object
我知道以前曾問過這類問題。但是我的問題沒什么不同。 我有2個服務,A和BA通過RMI使用B的方法。 B通過以下3條語句輸出自身:
Remote stub = UnicastRemoteObject.exportObject( rs, port,socketFactory,socketFactory);
Registry registry = LocateRegistry.createRegistry( port,socketFactory,socketFactory );
registry.rebind( serviceBindName, stub );
其中rs是遠程對象實現。
現在,A通過以下2條語句查找B:
Registry registry = LocateRegistry.getRegistry( BsIP, BsRMIPort);
RemoteServiceRegistry rs = ( RemoteServiceRegistry ) registry.lookup( serviceBindName);
現在一切都順利進行,A通過查找從B獲取存根並將其緩存用於所有后續請求。 但是當我重新啟動BI時問題就開始了,它具有一種機制,無論何時B重新啟動,我都會通過該機制清除緩存並在A中執行B的新查找。
我對此一無所知。 請幫助。如果您需要更多信息,請告訴我。
A中的例外
java.rmi.NoSuchObjectException: no such object in table
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
B中的異常(將屬性添加到JVM之后,-Djava.rmi.server.logCalls = true)
FINE: RMI TCP Connection(10)-192.168.50.243: [192.168.50.243] exception:
java.rmi.NoSuchObjectException: no such object in table
at sun.rmi.transport.Transport.serviceCall(Transport.java:135)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
此異常意味着遠程存根是“陳舊的”,即,它指向不再從存根來自的JVM導出的對象。 當您收到此異常時,必須首先使用相同的方法重新獲取存根:
lookup()
,則重做查找。 。我有一種機制,每當B重新啟動時,我都會通過該機制清除緩存並在A中執行B的新查找
顯然,該機制不起作用或未被調用。
注意:應始終將LocateRegistry.createRegistry()
的結果存儲在靜態變量中,以防止垃圾回收注冊表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.