オブジェクトをJava仮想マシン(JVM)に登録して起動できるようにする起動システム・デーモンを開始します。
rmid
コマンドは、起動システム・デーモンを開始します。起動システム・デーモンを開始してからでないと、起動可能オブジェクトを起動システムに登録したり、JVM内で起動したりすることができません。起動可能なオブジェクトを使用したプログラムを作成する方法の詳細は、「アクティベーションの使用」チュートリアル(http://docs.oracle.com/javase/jp/8/technotes/guides/rmi/activation/overview.html
)を参照してください。
次のように、rmid
コマンドを実行し、セキュリティ・ポリシー・ファイルを指定して、デーモンを開始します。
rmid -J-Djava.security.policy=rmid.policy
rmid
コマンドのOracleの実装を実行する場合、デフォルトでは、起動グループ用にJVMを開始する際に各ActivationGroupDesc
内の情報を使用できるかどうかをrmid
コマンドが検証できるように、セキュリティ・ポリシー・ファイルを指定する必要があります。特に、ActivationGroupDesc
コンストラクタに渡されるCommandEnvironment
や任意のプロパティによって指定されるコマンドおよびオプションは、rmid
コマンドのセキュリティ・ポリシー・ファイルで明示的に許可されることが必要になりました。sun.rmi.activation.execPolicy
プロパティの値によって、起動グループ用にJVMを開始する際にActivationGroupDesc
内の情報を使用できるかどうかを判断するときにrmid
コマンドが使用するポリシーが決定されます。詳細は、-J-Dsun.rmi.activation.execPolicy=policyオプションの説明を参照してください。
rmid
コマンドを実行すると、アクティベータおよび内部レジストリがデフォルト・ポート1098で開始され、この内部レジストリ内でActivationSystem
がjava.rmi.activation.ActivationSystem
という名前にバインドされます。
レジストリに代替のポートを指定するには、rmid
コマンドを実行するときに-port
オプションを指定する必要があります。たとえば、次のコマンドは、起動システム・デーモンおよびレジストリをレジストリのデフォルト・ポート1099で開始します。
rmid -J-Djava.security.policy=rmid.policy -port 1099
rmid
コマンドの子プロセス(起動グループ)が作成されたときに、それぞれの子プロセスにコマンド行引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システム・デーモンによって生成される各仮想マシンにプロパティを渡すことができます。
rmid -C-Dsome.property=value
コマンド行引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のコマンドを使用すると、すべての子JVMでサーバー呼出しのロギングが可能になります。
rmid -C-Djava.rmi.server.logCalls=true
RMIDを実行しているJavaインタプリタに渡されるオプションを指定します。たとえば、rmid
コマンドがrmid.policy
という名前のポリシー・ファイルを使用するように指定するには、rmid
のコマンド行で-J
オプションを使用して、java.security.policy
プロパティを定義します。次に例を示します。
rmid -J-Djava.security.policy-rmid.policy
起動グループが実行されるJVMを開始する際に使用されるコマンドおよびコマンド行オプションをチェックするために、RMIDが採用するポリシーを指定します。このオプションは、Java RMI起動デーモンのOracleの実装のみに存在することに注意してください。コマンド行にこのプロパティを指定しない場合、結果は-J-Dsun.rmi.activation.execPolicy=default
を指定した場合と同じになります。policy
に指定可能な値は、default
、policyClassName
またはnone
です。
default
execPolicy
の値がdefault
または指定されていない場合、rmid
コマンドが使用するセキュリティ・ポリシー・ファイル内のコマンドおよびオプションを実行するためのアクセス権がrmid
コマンドに付与されているときにのみ、rmid
コマンドは特定のコマンド行オプションを付けてコマンドを実行できます。デフォルトの実行ポリシーで使用できるのは、デフォルトの起動グループ実装のみです。
rmid
コマンドは、起動グループの登録済起動グループ記述子であるActivationGroupDesc
内の情報を使用して、そのグループ用のJVMを開始します。グループ記述子は、起動グループを開始する際に実行するコマンドと、そのコマンド行に追加されるコマンド行オプションが含まれるオプションのActivationGroupDesc.CommandEnvironment
を指定します。デフォルトでは、rmid
コマンドは、java.home
にあるjava
コマンドを使用します。グループ記述子には、-D<property>=<value>
のように定義されるオプションとしてコマンド行に追加されるプロパティ・オーバーライドも含まれています。アクセス権com.sun.rmi.rmid.ExecPermission
を使用すると、起動グループを開始する際に、グループ記述子のCommandEnvironment
で指定されたコマンドを実行するためのアクセス権がrmid
コマンドに付与されます。アクセス権com.sun.rmi.rmid.ExecOptionPermission
を使用すると、rmid
コマンドは起動グループを開始する際に、グループ記述子でプロパティ・オーバーライドとして指定されたコマンド行オプション、またはCommandEnvironment
でオプションとして指定されたコマンド行オプションを使用できるようになります。様々なコマンドおよびオプションを実行するためのアクセス権をrmid
コマンドに付与するときは、すべてのコード・ソースにアクセス権ExecPermission
およびExecOptionPermission
を付与する必要があります。
ExecPermission
ExecPermission
クラスは、起動グループを開始する際に、rmid
コマンドが特定のコマンドを実行するためのアクセス権を表します。
構文: ExecPermission
の名前は、rmid
コマンドに実行アクセス権を付与するためのコマンドのパス名です。スラッシュ(/)とアスタリスク(*)で終わるパス名は、そのディレクトリに含まれるすべてのファイルを示します。ここで、スラッシュはファイル区切り文字File.separatorChar
です。スラッシュ(/)とマイナス記号(-)で終わるパス名は、(再帰的に)そのディレクトリに格納されているすべてのファイルとサブディレクトリを示します。特別なトークン<<ALL FILES>>
で構成されるパス名は、任意のファイルと一致します。
アスタリスク(*)で構成されるパス名は、現在のディレクトリ内にあるすべてのファイルを示します。マイナス記号(-)で構成されるパス名は、現在のディレクトリ内にあるすべてのファイル、および(再帰的に)現在のディレクトリに格納されているすべてのファイルおよびサブディレクトリを示します。
ExecOptionPermission
ExecOptionPermission
クラスは、起動グループを開始する際に、rmid
コマンドが特定のコマンド行オプションを使用するためのアクセス権を表します。ExecOptionPermission
の名前は、コマンド行オプションの値です。
構文: オプションでは、ワイルドカードが限定的にサポートされます。アスタリスクは、ワイルドカードの一致を表し、オプション名自体として使用したり(任意のオプションと一致)、オプション名の末尾に使用したりできますが、アスタリスク(*)がドット(.)または等号(=)の後に続く場合にかぎります。
たとえば、*
、-Dmydir.*
または-Da.b.c=*
は有効ですが、*mydir
、-Da*b
またはab*
は無効です。
rmidのポリシー・ファイル
rmid
コマンドに様々なコマンドおよびオプションを実行するためのアクセス権を付与する場合は、アクセス権ExecPermission
およびExecOptionPermission
を汎用的にすべてのコード・ソースに付与する必要があります。これらのアクセス権をチェックするのはrmid
コマンドだけなので、これらのアクセス権を汎用的に付与しても安全です。
rmid
コマンドに様々な実行アクセス権を付与するポリシー・ファイルの例を、次に示します。
grant { permission com.sun.rmi.rmid.ExecPermission "c:\\files\\apps\\java\\jdk1.7.0\\win\\bin\\java"; permission com.sun.rmi.rmid.ExecPermission "c:\\files\\apps\\rmidcmds\\*"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=c:\\files\\policies\\group.policy"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.debug=*"; permission com.sun.rmi.rmid.ExecOptionPermission "-Dsun.rmi.*"; };
1番目に付与されているアクセス権を使用すると、rmid
コマンドは明示的なパス名で指定されたjava
コマンドの1.7.0リリースを実行できます。デフォルトでは、java.home
で見つかったバージョンのjava
コマンド(rmid
コマンドが使用するバージョンと同じ)が使用されるため、ポリシー・ファイルで指定する必要はありません。2番目のアクセス権を使用すると、rmid
コマンドはc:\files\apps\rmidcmds\
ディレクトリ内の任意のコマンドを実行できます。
3番目に付与されているアクセス権ExecOptionPermission
を使用すると、rmid
コマンドはセキュリティ・ポリシー・ファイルをc:\files\policies\group.policy
として定義している起動グループを開始できます。その次に付与されているアクセス権を使用すると、起動グループがjava.security.debug
プロパティを使用できます。最後のアクセス権を使用すると、起動グループがsun.rmi
というプロパティ名の階層内の任意のプロパティを使用できます。
ポリシー・ファイルを指定してrmid
コマンドを開始するには、rmid
のコマンド行でjava.security.policy
プロパティを指定する必要があります。次に例を示します。
rmid -J-Djava.security.policy=rmid.policy
。
<policyClassName>
デフォルトの動作では十分な柔軟性が得られない場合、管理者はrmid
コマンドの開始時に、checkExecCommand
メソッドが所属するクラスの名前を指定することで、rmid
で実行されるコマンドをチェックできます。
policyClassName
には、引数のないpublicコンストラクタを持ち、次のようなcheckExecCommand
メソッドを実装しているpublicクラスを指定します。
public void checkExecCommand(ActivationGroupDesc desc, String[] command) throws SecurityException;
起動グループを開始する前に、rmid
コマンドは、ポリシーのcheckExecCommand
メソッドを呼び出し、そのメソッドに起動グループ記述子と、起動グループを開始するための完全なコマンドを含む配列を渡します。checkExecCommand
がSecurityException
をスローすると、rmid
コマンドはその起動グループを開始せず、オブジェクトの起動を試行している呼出し側にActivationException
がスローされます。
none
sun.rmi.activation.execPolicy
プロパティの値がnone
の場合、rmid
コマンドは、起動グループを開始するコマンドをまったく検証しません。
起動システム・デーモンがデータベースおよび関連情報を書き込むのに使うディレクトリの名前を指定します。デフォルトでは、rmid
コマンドが実行されたディレクトリに、logというログ・ディレクトリが作成されます。
レジストリで使用されるポートを指定します。起動システム・デーモンは、このレジストリの中で、java.rmi.activation.ActivationSystem
という名前でActivationSystem
をバインドします。ローカル・マシン上のActivationSystem
は、次のようにNaming.lookup
メソッドを呼び出すことによって取得できます。
import java.rmi.*; import java.rmi.activation.*; ActivationSystem system; system = (ActivationSystem) Naming.lookup("//:port/java.rmi.activation.ActivationSystem");
-port
オプションで指定されたポートについて、rmid
コマンドの現在の呼出しを停止します。ポートが指定されていない場合、このオプションはポート1098で実行されているrmid
の呼出しを停止します。