JDK 7 の拡張機能

JDK 7 Update 21 以降では、RMI プロパティー java.rmi.server.useCodebaseOnly がデフォルトで true に設定されています。以前のリリースでは、デフォルト値は false でした。

:この変更は、JDK 6 Update 45 と JDK 5 Update 45 リリースにも適用されます。

false に設定した場合、このプロパティーは、RMI 接続の反対側が Java クラスをロードする際のネットワークの場所 (URL) を、RMI 接続の片側から指定することを許可します。このメカニズムの一般的な使用法は、RMI クライアントとサーバーがリモートインタフェースとデータクラスを互いに提供し合うことで、構成を不要にするような場合です。

RMI 接続の一方の端の JVM が java.rmi.server.codebase システムプロパティーに 1 つ以上の URL を指定した場合、その情報は RMI 接続の反対側の端に渡されます。受信側の JVM がその java.rmi.server.useCodebaseOnly システムプロパティーを false に設定した場合、それらの URL を使用して、RMI 要求ストリームで参照される Java クラスをロードしようとします。

RMI 接続のリモート側で指定された場所からクラスをロードする動作は、java.rmi.server.useCodebaseOnlytrue に設定されると無効化されます。この場合、クラスはローカルで指定された java.rmi.server.codebase プロパティーやローカルの CLASSPATH など、事前構成された場所からのみロードされ、RMI 要求ストリームによって渡された codebase 情報は使用されません。

このデフォルト値への変更により、RMI ベースのアプリケーションが予期せず停止することがあります。一般的な症状は、ネストされた java.lang.ClassNotFoundException を含む java.rmi.UnmarshalException を含んだスタックトレースです。

これらの例外が発生した場合、問題を解決するための推奨される方法は、java.rmi.server.codebase システムプロパティーで適切な値を指定することによって、すべての RMI クライアントおよびサーバーが同じコードベースを使用するように構成することです。このためには通常、アプリケーションを開始するコマンドに -D オプションを追加します。

java -Djava.rmi.server.codebase=file:///<path-to-remote-classes>/

また、URL によって指定された場所へのアクセス権を許可するために、アプリケーションのセキュリティーポリシーファイル内のアクセス権を調整することが必要な場合もあります。これには FilePermissionSocketPermission などのアクセス権の付与が含まれます。

rmiregistry デーモンが特定のコードベースを使用するように構成するには、次の構文を使用することができます。

rmiregistry -J-Djava.rmi.server.codebase=file:///<path-to-remote-classes>/

rmid によって開始される起動グループ JVM のコードベースを指定するには、別の構文が必要です。このデーモン自体は RMI 要求を処理しませんが、RMI 要求を処理する JVM サブプロセスを作成します。rmid サブプロセスのコードベースを指定する構文は、次のとおりです。

rmid -C-Djava.rmi.server.codebase=file:///<path-to-remote-classes>/

場合によっては、RMI クライアントやサーバー、あるいは rmiregistryrmid デーモンを特定のコードベースで事前構成することが難しかったり、不可能だったりすることがあります。このような場合に非互換性を解決する方法は、単純に java.rmi.server.useCodebaseOnly プロパティーを false の設定に戻すことです。これは次のコマンド行オプションを使用して実行できます。

java -Djava.rmi.server.useCodebaseOnly=false

rmiregistry および rmid コマンドでも同様の構文を使用します。

注意:java.rmi.server.useCodebaseOnly プロパティーを false に設定してシステムを実行することは、信頼できないコードのロードと実行が許可されるため、お勧めできません。

詳細情報


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.