rmid で起動システムデーモンを開始すると、オブジェクトを Java 仮想マシン (JVM) に登録して起動できるようになります。
rmid [options]
rmid ツールは、起動システムデーモンを開始します。起動システムデーモンを開始してからでないと、起動可能オブジェクトを起動システムに登録したり、JVM 内で起動したりすることができません。起動可能なリモートオブジェクトを使ったプログラムの作成方法の詳細は、RMI 仕様および起動のチュートリアルを参照してください。
デーモンを起動するには、次のように、セキュリティーポリシーファイルを指定して rmid
コマンドを実行します。
rmid -J-Djava.security.policy=rmid.policy
注:rmid
の Sun の実装を実行する場合、デフォルトでは、セキュリティーポリシーファイルを指定する必要があります。それは、起動グループ用に JVM を起動するために各 ActivationGroupDesc
内の情報を使用できるかどうかを rmid
が検証できるようにするためです。特に、ActivationGroupDesc
のコンストラクタに渡される CommandEnvironment
や任意の Properties
によって指定されるコマンドおよびオプションは、rmid
のセキュリティーポリシーファイルの中で明示的に許可することが必要になりました。sun.rmi.activation.execPolicy
プロパティーの値は、起動グループ用に JVM を起動するために ActivationGroupDesc
内の情報を使用できるかどうかを判断するときに rmid
が使用するポリシーを決定します。
rmid
をデフォルト設定で実行すると、次のような処理が行われます
ActivationSystem
を java.rmi.activation.ActivationSystem
という名前にバインドする。rmid
の起動時に -port
オプションを指定しなければなりません。次に例を示します。
rmid -J-Djava.security.policy=rmid.policy -port 1099このコマンドは、起動システムデーモンを開始し、レジストリのデフォルトポート 1099 でレジストリを開始します。
rmid
の子プロセス (起動グループ) が作成されたときに、それぞれの子プロセスにコマンド行引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システムデーモンによって生成される各 Java 仮想マシンにプロパティーを渡すことができます。
rmid -C-Dsome.property=valueコマンド行引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のようなコマンドを実行できます。
rmid -C-Djava.rmi.server.logCalls=trueこのコマンドにより、すべての子 JVM でサーバー呼び出しのログが作成されるようになります。
rmid
を実行している java
インタプリタに渡すオプションを指定します。たとえば、rmid
が rmid.policy
という名前のポリシーファイルを使用するように指定するには、rmid
のコマンド行で -J
オプションを使って、java.security.policy
プロパティーを定義します。次に例を示します。rmid -J-Djava.security.policy=rmid.policy
rmid
が採用するポリシーを指定します。このオプションは、RMI 起動デーモンの Sun の実装だけに存在することに注意してください。コマンド行にこのプロパティーを指定しない場合、結果は -J-Dsun.rmi.activation.execPolicy=default
を指定した場合と同じになります。<policy> に指定可能な値は、default
、<policyClassName>、または none
です。それぞれの値について、このあと説明します。
デフォルトの execPolicy
の場合、rmid
が実行できるのは、rmid
が使用するセキュリティーポリシーファイルの中で、実行する権限が rmid
に与えられているコマンドおよびコマンド行オプションだけです。デフォルトの実行ポリシーで使用できるのは、デフォルトの起動グループ実装だけです。
rmid
は、起動グループ用の JVM を起動するときに、そのグループについて登録された起動グループ記述子である ActivationGroupDesc
内の情報を使用します。グループ記述子は、ActivationGroupDesc.CommandEnvironment
を指定します (省略可能)。これには、起動グループを開始するコマンドと、そのコマンド行に追加できるコマンド行オプションが含まれています。デフォルトでは、rmid
は、java.home
にある java
コマンドを使用します。グループ記述子には、オプションとしてコマンド行に追加されるプロパティーオーバーライドも含まれています。このプロパティーは、次のように定義します。
-D<property>=<value>
アクセス権 com.sun.rmi.rmid.ExecPermission
を使用すると、グループ記述子の CommandEnvironment
で指定されたコマンドを実行して起動グループを開始する権限を、rmid
に対して許可できます。アクセス権 com.sun.rmi.rmid.ExecOptionPermission
を使用すると、グループ記述子でプロパティーオーバーライドとして指定されたコマンド行オプション、または CommandEnvironment
でオプションとして指定されたコマンド行オプションを、起動グループを開始するときに rmid
が使用できるようになります。
rmid
にさまざまなコマンドおよびオプションを実行するアクセス権を付与する場合は、アクセス権 ExecPermission
および ExecOptionPermission
を汎用的に付与する必要があります (すべてのコードソースに付与)。
ExecPermission
ExecPermission
クラスは、起動グループを開始するために rmid
が特定のコマンドを実行する権限を表します。
構文
ExecPermission
の名前は、rmid
に実行を許可するコマンドのパス名です。「\*」 (「\」はファイル区切り文字 File.separatorChar
) で終わるパス名は、そのディレクトリに含まれるすべてのファイルを示します。「\-」で終わるパス名は、そのディレクトリに含まれるすべてのファイルとサブディレクトリ (再帰的に) を示します。パス名に特別なトークン「<<ALL FILES>>」を指定した場合は、任意のファイルを示します。
注:「*」を 1 つ指定しただけのパス名は、現在のディレクトリ内のすべてのファイルを表します。また、「-」を 1 つ指定しただけのパス名は、現在のディレクトリ内のすべてのファイルと、現在のディレクトリに含まれるすべてのファイルとサブディレクトリ (再帰的に) を表します。
ExecOptionPermission
ExecOptionPermission
クラスは、起動グループを開始するときに rmid
が特定のコマンド行オプションを使用できる権限を表します。ExecOptionPermission
の名前は、コマンド行オプションの値です。
構文
オプションでは、ワイルドカードが限定的にサポートされます。アスタリスクは、ワイルドカードマッチを表します。アスタリスクは、オプション名そのものとして使用できます。つまり、任意のオプションを表すことができます。また、オプション名の末尾に使用することもできます。ただし、「.」か「=」の直後にアスタリスクを指定する必要があります。
たとえば、「*」、「-Dfoo.*」、「-Da.b.c=*」は有効ですが、「*foo」、「-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.*"; };付与されている最初のアクセス権は、
rmid
に対して、パス名により明示的に指定される java
コマンドの 1.7.0 バージョンの実行を許可しています。デフォルトでは、java.home
にあるバージョンの java
コマンド (rmid
が使用するのと同じバージョン) が使用されるため、そのコマンドは、ポリシーファイルで指定する必要はありません。2 番目のアクセス権は、rmid
に対して、ディレクトリ c:\files\apps\rmidcmds\
内の任意のコマンドの実行を許可しています。
3 番目のアクセス権 ExecOptionPermission
は、rmid
に対して、セキュリティーポリシーファイルを c:\files\policies\group.policy
として定義している起動グループの起動を許可しています。4 番目のアクセス権は、起動グループが java.security.debug
プロパティーを使用することを許可しています。最後のアクセス権は、起動グループが sun.rmi
というプロパティー名の階層内の任意のプロパティーを使用することを許可しています。
ポリシーファイルを指定して rmid
を起動するには、rmid
のコマンド行で java.security.policy
プロパティーを指定する必要があります。次に例を示します。
rmid -J-Djava.security.policy=rmid.policy
デフォルトの動作では十分な柔軟性が得られない場合、管理者は、rmid
の起動時に checkExecCommand
メソッドが所属するクラスの名前を指定して、rmid が実行するコマンドをチェックできます。
policyClassName には、引数のない public コンストラクタを持ち、次のような checkExecCommand
メソッドを実装している public クラスを指定します。
public void checkExecCommand(ActivationGroupDesc desc, String[] command) throws SecurityException;起動グループを開始する前に、
rmid
は、ポリシーの checkExecCommand
メソッドを呼び出します。このとき、起動グループの記述子と、起動グループを開始するための完全なコマンドを含む配列をそのメソッドに渡します。checkExecCommand
が SecurityException
をスローすると、rmid
はその起動グループを開始せず、オブジェクトの起動を試行している呼び出し側には ActivationException
がスローされます。
sun.rmi.activation.execPolicy
プロパティーの値が「none」の場合、rmid
は、起動グループを開始するコマンドをまったく検証しません。
rmid
コマンドを実行したディレクトリに、log
というログディレクトリが作成されます。rmid
のレジストリが使うポートを指定します。起動システムデーモンは、このレジストリの中で、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
を停止します。.;C:\usr\local\java\classes