rmid で起動システムデーモンを開始することにより、オブジェクトを Java Virtual Machine (JVM) に登録して起動できるようになります。
rmid [options]
rmid ツールは、起動システムデーモンを開始します。起動システムデーモンを開始してからでないと、起動可能オブジェクトを起動システムに登録したり、JVM で起動したりすることはできません。起動可能なリモートオブジェクトを使ったプログラムの作成方法の詳細は、RMI 仕様および起動のチュートリアルを参照してください。デーモンを起動するには、次のように、
rmid
コマンドを実行し、セキュリティポリシーファイルを指定します。rmid -J-Djava.security.policy=rmid.policy注: Sun の
rmid
実装を実行する場合、デフォルトでセキュリティポリシーファイルを指定する必要があります。ポリシーファイルを指定することにより、起動グループが使用する JVM の起動に、各ActivationGroupDesc
内の情報を使用可能かどうかをrmid
が確認することができます。特に、CommandEnvironment
により指定されるコマンドやオプション、およびActivationGroupDesc
のコンストラクタに渡されるすべてのProperties
は、rmid
のセキュリティポリシーファイルで明示的に許可することが必要になりました。sun.rmi.activation.execPolicy
プロパティの値は、rmid
が、起動グループが使用する JVM の起動にActivationGroupDesc
内の情報を使用できるかどうかを判断するために使用するポリシーを決定します。
rmid
をデフォルト設定で実行することにより、以下が行われます。レジストリにほかのポートを指定するには、
- デフォルトポート 1098 で Activator および内部レジストリを起動し、
ActivationSystem
を内部レジストリ内の名前java.rmi.activation.ActivationSystem
にバインドします。rmid
の起動時に-port
オプションを指定しなければなりません。次に例を示します。rmid -J-Djava.security.policy=rmid.policy -port 1099このコマンドは、起動システムデーモンを開始し、レジストリのデフォルトポート 1099 でレジストリを開始します。
- -C<someCommandLineOption>
rmid
の子プロセス (起動グループ) が作成されたときに、各子プロセスにコマンド行引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システムデーモンによって生成される各 Java Virtual Machine にプロパティを渡すことができます。rmid -C-Dsome.property=valueコマンド行引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のようなコマンドを実行できます。rmid -C-Djava.rmi.server.logCalls=trueこのコマンドによって、すべての子 JVM でサーバコールのログが作成されるようになります。- -J<someCommandLineOption>
rmid
を実行中のjava
インタプリタに渡すオプションを指定します。たとえば、rmid
でrmid.policy
という名前のポリシーファイルを使用する場合、rmid
のコマンド行で-J
オプションを使ってjava.security.policy
プロパティを定義します。次に例を示します。rmid -J-Djava.security.policy=rmid.policy- -J-Dsun.rmi.activation.execPolicy=<policy>
- 起動グループの実行対象となる JVM の起動に使用するコマンドおよびコマンド行オプションをチェックするために、
rmid
が採用するポリシーを指定します。このオプションは、Sun の RMI 起動デーモン実装だけに存在することに留意してください。コマンド行にこのプロパティを指定しない場合、結果は-J-Dsun.rmi.activation.execPolicy=default
を指定した場合と同じになります。<policy> に指定可能な値は、default
、<policyClassName>、またはnone
です。
- default (または、このプロパティが「未指定」の場合)
デフォルトの
execPolicy
では、rmid
が特定のコマンド行オプションを指定してコマンドを実行できるのは使用するセキュリティポリシーファイル内のコマンドおよびオプションを実行する権限がrmid
に与えられている場合だけです。「デフォルト」の実行ポリシーで使用できるのは、デフォルトの起動グループ実装だけです。
rmid
は、起動グループの JVM を起動する際、グループの登録済み起動グループ記述子であるActivationGroupDesc
内の情報を使用します。グループ記述子は、オプションのActivationGroupDesc.CommandEnvironment
を指定しています。これには、起動グループを開始する「コマンド」およびコマンド行に追加する任意のコマンド行「オプション」が含まれます。デフォルトでは、rmid
はjava.home
のjava
コマンドを使用します。グループ記述子には、オプションとしてコマンド行に追加される「プロパティ」オーバーライドも含まれます。プロパティは次のように定義します。-D<property>=<value>アクセス権
com.sun.rmi.rmid.ExecPermission
を使用すると、rmid
に対し、グループ記述子のCommandEnvironment
で指定されたコマンドを実行して起動グループを開始する権限を与えることができます。アクセス権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
の「名前」は、コマンド行オプションの値です。構文
オプションでは、限定されたワイルドカードスキーマがサポートされます。1 つのアスタリスクは、1 つのワイルドカードマッチングを表します。アスタリスクは、オプション名自体 (つまり、すべてのオプションに一致する) として使用することもできます。また、「.」か「=」の次にアスタリスクを指定する場合にのみ、オプション名の最後に使用できます。例を示します。「*」、「-Dfoo.*」、「-Da.b.c=*」は有効です。「*foo」、「-Da*b」、「ab*」は無効です。
rmid
のポリシーファイルrmid
にさまざまなコマンドとオプションの実行権限を与える場合、アクセス権ExecPermission
およびExecOptionPermission
を汎用的に (つまり、すべてのコードソースに対して) 許可する必要があります。これらのアクセス権をチェックするのはrmid
だけであるため、これらのアクセス権を汎用的に許可しても安全です。
rmid
に複数の実行権限を付与しているポリシーファイルの例を、次に示します。grant { permission com.sun.rmi.rmid.ExecPermission "/files/apps/java/jdk1.2.2/solaris/bin/java"; permission com.sun.rmi.rmid.ExecPermission "/files/apps/java/jdk1.2.2/solaris/bin/java_g"; permission com.sun.rmi.rmid.ExecPermission "/files/apps/rmidcmds/*"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=/files/policies/group.policy"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.debug=*"; permission com.sun.rmi.rmid.ExecOptionPermission "-Dsun.rmi.*"; };最初の 2 つの付与されているアクセス権は、rmid
に対し、パス名により明示的に指定されるjava
コマンドおよびjava_g
コマンドの 1.2.2 バージョンの実行を許可します。デフォルトでは、java.home
内のjava
コマンドのバージョン (rmid
が使用するのと同じバージョン) が使用されるため、ポリシーファイルで指定する必要はありません。3 番目のアクセス権は、rmid
に対し、ディレクトリ/files/apps/rmidcmds
内の任意のコマンドの実行権限を許可します。4 番目に付与されているアクセス権
ExecOptionPermission
は、rmid
に対し、セキュリティポリシーファイルを/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 で引数を取らないコンストラクタをもつ public クラスを指定します。また、次の
checkExecCommand
メソッド実装も指定します。public void checkExecCommand(ActivationGroupDesc desc, String[] command) throws SecurityException;起動グループを開始する前に、rmid
は、ポリシーのcheckExecCommand
メソッドを呼び出して、起動グループの記述子および起動グループを開始する完全なコマンドを含む配列をメソッドに渡します。checkExecCommand
がSecurityException
をスローする場合、rmid
は起動グループを開始せず、オブジェクトの起動を試みている呼び出し側にActivationException
がスローされます。
- CLASSPATH
- ユーザ定義クラスへのパスをシステムに指定します。ディレクトリはコロンで分割します。例を示します。
.:/usr/local/java/classes
rmic、CLASSPATH、java