RMI 起動可能なサーバーを機能させようとしていますが、今のところうまくいきません。実際にはサーバーは実行されているように見えますが、クライアントは奇妙な例外を引き起こします。
私は3つのプロジェクトを持っています:
- クライアント
- 一般
- サーバ
Common は、クライアントとサーバー間で共有されるコード (リモート インターフェイスなど) です。
私が従う手順(このチュートリアルを適応させています):
- レジストリを起動 --> OK
- rmid を実行 --> OK
- サーバーのセットアップを開始します --> OK
- クライアントを起動 -->ブーム! サーバー スレッドで NoClassDefFoundError を使用して共通のクラスが見つからないため、アクティブ化は失敗します。
サーバーのコードベースに共通のクラス ファイルを含めているので、これらのクラス/インターフェイスをサーバーで使用できるようにする必要があります。それはリモートインターフェース自体で燃え尽きます-したがって、唯一の代替手段はすべての共通コードをサーバーコードにプルするように見えますが、この方法では、クライアントコードはサーバーコードについて知る必要があり、それは単純ではありません.
少しブラウジングしたところ、ここにいるこの男がまったく同じ問題を抱えているようです。
どちらの場合も、アクティブ化可能なサーバーが他のパッケージのクラスを参照するときに発生しているように見えます (私の場合、上記のリンクのカスタム パッケージはサードパーティです)。
私は本当にここで途方に暮れています-だから、どんなアイデアでも大歓迎です!
編集: いくつかの追加情報 - 問題をデバッグしようとしています。クライアントは件名のリモート オブジェクトを正常に取得しているようです (参照は null ではありません)。リモート インターフェイスのメソッド (クライアントはそのインターフェイスを認識している) が呼び出されるとすぐに、例外がスローされます。最初のメソッド呼び出しでアクティブ化が発生した場合、これは明らかですが、実際にリモート オブジェクト/サーバーをアクティブ化しようとした時期についてはあまり確信が持てません。