0

JDK 7リリースノートに記載されているように、私は次のJavaRMIバグの犠牲になりました。

このリリースに含まれるrmiregistryコマンドのバグにより、RMIサーバーが「file:」URLスキームを使用してコードベースアノテーションを含むエクスポートされたオブジェクトをバインドしようとすると、意図しない例外がスローされる場合があります。影響を受ける可能性が最も高いRMIサーバーは、サーバーと同じホストで実行されているRMIクライアントによってのみ呼び出されるサーバーです。

RMIは、リモートオブジェクト参照のシリアル化された状態の一部としてコードベース情報に注釈を付け、実行時にオブジェクトに関連付けられた必要なクラスとインターフェイスをRMIクライアントがロードするのを支援します。RMIレジストリで検索され、サーバー以外のホストで実行されているRMIクライアントによって呼び出されるエクスポートされたオブジェクトは、通常、「http:」や「ftp:」などのコードベースURLスキームで注釈が付けられ、これらは引き続き正しく機能するはずです。

回避策として、RMIサーバーはjava.rmi.server.codebaseプロパティを設定して、エクスポートするオブジェクトに「file:」スキーム以外のコードベースURLを使用することができます。

(強調鉱山)

ローカルマシンでRMIアプリケーションを開発していますが、いくつかのライブラリを含めるようにコードベースを設定する必要があります。

StringBuilder codebase = new StringBuilder();
codebase.append(" file:/").append(projectPath).append("/bin/lib/rmiio-2.0.0.jar")
        .append(" file:/").append(projectPath).append("/bin/lib/log4j-1.2.9.jar")
        .append(" file:/").append(projectPath).append("/bin/lib/commons-logging.jar")
        .append(" file:/").append(projectPath).append("/bin/lib/commons-logging-api.jar");
System.setProperty("java.rmi.server.codebase", codebase.toString());

'file:/'構文なしで同じことをどのように達成できますか?私の状況でのバグの有効な回避策は何ですか?

4

1 に答える 1

0


ファイルの URL スキームにバグがある場合
(そして、構文がたとえば - であることを検証したと思いますfile:///home/user/myprojects/myjar.jar)
、オープン JDK で問題を修正するか、ファイルを Apache Web サーバーに配置する以外に選択肢はないと思います。 (またはこの件については tomcat) を使用し、"http://" プレフィックスを持つ URI を使用します。
ここでは静的リソースを扱っているため、このような tomcat や apache のデプロイは非常に簡単です。
私が覚えていることから、ここを見た後、あなたがしたように、URIのチェーンをコードベースに提供する以外に選択肢はありません。
もう 1 つのオプションは、単純にこの jar に RMI クライアント コードを提供することです。

于 2012-10-20T12:32:45.033 に答える