0



RMI接続アプリを介して2つ開発しています。通信は双方向で、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
4

2 に答える 2

2

スタブが参照するリモート オブジェクトは存在しません。より正確には、エクスポートされなくなりました。これは、クライアントがまだライブ スタブを持っている間は、自分でエクスポートを解除したり、ネットワーク パーティションが原因で DGC の障害が発生したりしない限り、発生するべきではありません。

これに対する最も確実な解決策は、エクスポート元の JVM 内のリモート オブジェクトへの静的参照を保持することです。

于 2013-01-24T22:18:28.580 に答える
-1

ここを見ましたか:

java.rmi.NoSuchObjectException: テーブルにそのようなオブジェクトがありません

Java RMI NoSuchObjectException

そしてここに

リモート仮想マシンに存在しなくなったオブジェクトでメソッドを呼び出そうとすると、NoSuchObjectException がスローされますリモート オブジェクトでメソッドを呼び出そうとして NoSuchObjectException が発生した場合、呼び出しが再送信され、RMI の「最大 1 回」の呼び出しセマンティクスが保持される場合があります。NoSuchObjectException は、メソッド java.rmi.server.RemoteObject.toStub と、java.rmi.server.UnicastRemoteObject および java.rmi.activation.Activatable の unexportObject メソッドによってもスローされます。

于 2013-01-24T12:58:12.547 に答える