以前は動作していた RMI アプリケーションをセットアップしようとしていますが、現在は奇妙な動作をしています。スタブなしで実行すると、java.lang.ClassNotFoundException: HelloInterface が発生します。次に、(rmic を使用して) ディレクトリに新しいファイル (Hello_Stub) を追加すると、java.lang.ClassNotFoundException: Hello_Stub が発生します。
なに?Hello_Stub が欠落しているときに欠落していると不平を言うことはありませんでした。しかし、そのファイルを追加すると、そこにないという不平を言い始めます。は?
以下は、端末からのトランスクリプトです。最初に 1 つのエラーが表示されます。次に、現在のディレクトリ内のファイルを一覧表示します。次に、スタブ ファイルを生成し、それを示します。次に、追加したばかりのファイルが見つからないというエラーが表示されます。
sjudd@kearnsgroup:/kearnsgroup/www/RMItest/classes> java HelloServer
initializing Hello class: Hello, world!
Hello Server failed: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: HelloInterface
sjudd@kearnsgroup:/kearnsgroup/www/RMItest/classes> ll
total 32
-rw------- 1 sjudd sjudd 765 Oct 25 19:52 Hello.class
-rw------- 1 sjudd sjudd 967 Oct 25 19:52 HelloClient.class
-rw-r----- 1 sjudd sjudd 614 Oct 25 19:42 HelloClient.java
-rw------- 1 sjudd sjudd 222 Oct 25 19:52 HelloInterface.class
-rw-r----- 1 sjudd sjudd 360 Oct 25 09:08 HelloInterface.java
-rw-r----- 1 sjudd sjudd 847 Oct 25 09:56 Hello.java
-rw------- 1 sjudd sjudd 916 Oct 25 19:52 HelloServer.class
-rw-r----- 1 sjudd sjudd 439 Oct 25 09:14 HelloServer.java
sjudd@kearnsgroup:/kearnsgroup/www/RMItest/classes> rmic Hello
sjudd@kearnsgroup:/kearnsgroup/www/RMItest/classes> ll
total 36
-rw------- 1 sjudd sjudd 765 Oct 25 19:52 Hello.class
-rw------- 1 sjudd sjudd 967 Oct 25 19:52 HelloClient.class
-rw-r----- 1 sjudd sjudd 614 Oct 25 19:42 HelloClient.java
-rw------- 1 sjudd sjudd 222 Oct 25 19:52 HelloInterface.class
-rw-r----- 1 sjudd sjudd 360 Oct 25 09:08 HelloInterface.java
-rw-r----- 1 sjudd sjudd 847 Oct 25 09:56 Hello.java
-rw------- 1 sjudd sjudd 916 Oct 25 19:52 HelloServer.class
-rw-r----- 1 sjudd sjudd 439 Oct 25 09:14 HelloServer.java
-rw------- 1 sjudd sjudd 1635 Oct 25 20:34 Hello_Stub.class
sjudd@kearnsgroup:/kearnsgroup/www/RMItest/classes> java HelloServer
initializing Hello class: Hello, world!
Hello Server failed: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: Hello_Stub
ここで失敗しているのは、クライアントではなく rmi SERVER であることに注意してください。
このコードは、あるマシン (Mac) では問題なく動作しますが、別のマシン (Linux) にコピーすると、この驚くべきエラーがスローされます。
この奇妙さに圧倒されすぎて、どうアプローチしたらいいのかわからない。これはアンマーシャリングのステップと何か関係があるのでしょうか? または環境変数で?おそらくCLASSPATH?何を探すべきかわかりません。ワイルドな理論はありますか?