2011-01-30 8 views
0

BundlesRMIコールバック

。 RMIとOSGIのクラスローダーはあまりにも嫌いですが、私は最初の問題hereを解決できました。

私のサーバーアプリケーションはサーバーバンドルで構成され、コアに依存します。さらに、バンドルマップが、コアの拡張ポイント(DataUpdate)を使用してロードされます。

同様クライアントは、プラグインとしてコアとロード地図に応じて開始されます。

は今が(上記の問題を解決しました)もう問題ないクライアントからサーバにユーザーを送信します。悲しいことに、逆は機能しません。 クライアントは、サーバにコールバックとして保存され、DataUpdateオブジェクトを受け取る必要があります。それらはサーバ上のマップバンドルで作成され、RMI経由で送信されます。私はクライアント側でそれらを受け取ると、私は不吉なClassNotFound例外を取得します。私はサーバーと同じことをします:

Thread.currentThread().setContextClassLoader(
       this.getClass().getClassLoader()); 

しかし、これは役に立ちません。

-consoleLog -Djava.security.policy=java.policy -Djava.rmi.server.codebase=file:${workspace_loc} 

そしてクライアントに、私はすべてを可能にする個人的な実装にセキュリティマネージャを設定します。また、サーバーとクライアントの両方を開始するために私のスタートパラメータがあります。

だから誰も考えがあります、なぜクラスが見つからないのですか?

答えて

0

これに対する皮肉な答えは、Sun RMIの実装を使用することではありません。

ここでは、ネットワーク上で送信されるオブジェクトのクラスを設定できるKryonetを使用します。これらのクラスのそれぞれがそのクラスローダーを知っているので、問題は解決されます。