2016-05-24 8 views
0

は私のRMIテストで問題を抱えて...のJava RMI - NoSuchObjectException:表中にそのようなオブジェクト

サーバー:

LocateRegistry.createRegistry(non-default-port); 
obj = new HelloImpl(); 
Naming.rebind("//ip-of-server/HelloServer", obj); 

クライアント:

RMISocketFactory.setSocketFactory(new sun.rmi.transport.proxy.RMIHttpToCGISocketFactory()); 

obj = (Hello) LocateRegistry.getRegistry("ip of server", non-default-port).lookup("HelloServer"); 

obj.sayHello("test"); 
(唯一のHTTPプロキシを経由して!)

すべてのオブジェクトはクラス内で静的です..

しかし、私は "java.rmi.NoSuchObjectException:そのようなオブジェクトはテーブルに"私は

RMISocketFactory.setSocketFactory(new sun.rmi.transport.proxy.RMIHttpToCGISocketFactory()); 

を経由してHTTPトンネリングを使用する場合、私は(通常のWeb内の他のPCからの)HTTPトンネリングなしでそれをしようとした場合-Exceptionすべての時間.. これはのみ発生し、それが正常に動作します!

何が問題なのですか?

答えて

0

これは、lookup()ではなく、sayHello()から取得されます。例外の意味は、スタブが「古く」、つまりリモートオブジェクトがアンエクスポートされているということです。これはおそらく、DGCも同様です。一度、この順に、1を次のように試してみてください:

  1. createRegistry()によって返された値に静的参照してください。

    これは、それ自体で十分なはずですが、それがない場合:

  2. は、リモートオブジェクト自体への静的な参照を保持し、ノー私はそのスタブを意味するものではありません。この場合、obj

それが唯一のHTTPトンネリングを経由してなぜ起こるか私が説明することはできませんが、とにかくすべてのケースで(1)を行う必要がありますので、実際にそれはどんな手段を介して起こるのを待っているバグです。

+0

お返事ありがとうございます! 私のクライアントにはすでに静的であると宣言されています: 静的レジストリ登録; \t static Hello obj; しかし、これは機能しませんでした.. – naja08

+0

'createRegistry()'はクライアントではなくサーバーによって呼び出されます。私はサーバーを参照しています。 – EJP

+0

これも試してみました..まだ動作していません:/ – naja08

関連する問題