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