![]() | Documentation Contents |
rmid で起動システムデーモンを開始すると、オブジェクトを仮想マシン (VM) に登録して起動できるようになります。
rmid [options]
rmid ツールは、起動システムデーモンを開始します。起動システムデーモンを開始してからでないと、起動可能オブジェクトを起動システムに登録したり、VM 内で起動したりすることができません。起動可能なリモートオブジェクトを使ったプログラムの作成方法の詳細は、「Java RMI 仕様」および「起動のチュートリアル」を参照してくだ さい。
デーモンを起動するには、次のように、セキュリティーポリシーファイルを指定して
rmidコマンドを実行します。rmid -J-Djava.security.policy=rmid.policy注:
rmidの Sun の 実装を実行する場合、デフォルトでは、セキュリティーポリシーファイルを指定する必要があります。 それは、起動グループ用に VM を起動するために各ActivationGroupDesc内の情報を使用できるかどうかをrmidが検証できるようにするためです。特に、ActivationGroupDescのコンストラクタに渡されるCommandEnvironmentや任意のPropertiesによって指定されるコマンドおよびオプションは、rmidのセキュリティーポリシーファイルの中で明示的に許可することが必要になりました。sun.rmi.activation.execPolicyプロパティーの値は、起動グループ用に VM を起動するためにActivationGroupDesc内の情報を使用できるかどうかを判断するときにrmidが使用するポリシーを決定します。
rmidをデフォルト設定で実行すると、次のような処理が行われます。
- アクティベータを起動し、デフォルトポート 1098 で内部レジストリを起動する
- この内部レジストリの中で、
ActivationSystemをjava.rmi.activation.ActivationSystemという名前にバインドするレジストリにほかのポートを指定するには、
rmidの起動時に-portオプションを指定しなければなりません。次に例を示します。rmid -J-Djava.security.policy=rmid.policy -port 1099このコマンドは、起動システムデーモンを開始し、レジストリのデフォルトポート 1099 でレジストリを開始します。
rmidをinetd/xinetdから開始する
rmidをコマンド行から開始するには、inetd(Solaris の場合)、またはxinetd(Linux) を構成してrmidを必要に応じて開始する方法もあります。
rmidを開始すると、System.inheritedChannelメソッドを呼び出して、継承されたチャンネル (inetd/xinetdから継承) を取得しようとします。継承されたチャンネルがnullであるか、java.nio.channels.ServerSocketChannelのインスタンスでなかった場合、rmidはそのチャンネルはinetd/xinetdによって起動されたものではないと判断し、前述のように起動します。継承されたチャンネルが
ServerSocketChannelインスタンスである場合は、エクスポートするリモートオブジェクト、つまりjava.rmi.activation.ActivationSystemがバインドされているレジストリとjava.rmi.activation.Activatorリモートオブジェクトに対する要求を受信するサーバーソケットとして、ServerSocketChannelから取得したjava.net.ServerSocketをrmidでは使用します。このモードでは、rmidの動作は、次のことを除いて、 コマンド行から起動した場合と同じです。
System.errに対する出力は、ファイルにリダイレクトされる。このファイルはjava.io.tmpdirシステムプロパティーで指定されるディレクトリ (通常は/var/tmpまたは/tmp) にある。 ファイル名の接頭辞はrmid-errで、接尾辞は"tmp"である-portオプションは拒否される。このオプションを指定すると、rmidはエラーメッセージを出して終了する-logオプションは必須。このオプションを指定しないと、rmidはエラーメッセージを出して終了する必要に応じてサービスを開始するように設定する詳細については、
inetd(Solaris) またはxinetd(Linux) のマニュアルページを参照してください。
- -C<someCommandLineOption>
rmidの子プロセス (起動グループ) が作成されたときに、それぞれの子プロセスにコマンド行引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システムデーモ ンによって生成される各仮想マシンにプロパティーを渡すことができます。rmid -C-Dsome.property=valueコマンド行引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のようなコマンドを実行できます。rmid -C-Djava.rmi.server.logCalls=trueこのコマンドにより、すべての子 VM でサーバー呼び出しのログが作成されるようになります。- -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>
- 起動グループが実行されることになる VM の起動に使用するコマンドおよびコマンド行オプションをチェックするために、
rmidが採用するポリシーを指定します。このオプションは、Java RMI 起動デーモンの Sun の実装だけに存在することに注意してください。コマンド行にこのプロパティーを指定しない場合、結果は-J-Dsun.rmi.activation.execPolicy=defaultを指定した場合と同じになります。<policy> に指定可能な値は、default、<policyClassName>、またはnoneです。 それぞれの値について、このあと説明します。
- default (または、このプロパティーが「指定されていない」場合)
デフォルトの
execPolicyの場合、rmidが実行できるのは、rmidが使用する セキュリティーポリシーファイルの中で、実行する権限がrmidに与えられているコマンドおよびコマンド行オプションだけです。「デフォルト」の実行ポリシーで使用できるのは、デフォルトの起動グループ実装だけです。
rmidは、起動グループ用の VM を起動するときに、そのグループについて登録された起動グループ記述子である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を汎用的に許可する必要があります。 つまり、すべてのコードソースに対して許可します。
ExecPermissionExecPermissionクラスは、起動グループを開始するためにrmidが特定の「コマンド」を実行する権限を表します。構文
ExecPermissionの「名前」は、rmidに実行を許可するコマンドのパス名です。「/*」 (「/」はファイル区切り文字File.separatorChar) で終わるパス名は、そのディレクトリに含まれるすべてのファイルを示します。「/-」で終わるパス名は、そのディレクトリに含まれるすべてのファイルとサブディレクトリ (再帰的に) を示します。パス名に特別なトークン「<<ALL FILES>>」を指定した場合は、任意のファイルを示します。注:「*」を 1 つ指定しただけのパス名は、現在のディレクトリ内のすべてのファイルを表します。 また、「-」を 1 つ指定しただけのパス名は、現在のディレクトリ内のすべてのファイルと、現在のディレクトリに含まれるすべてのファイルとサブディレクトリ (再帰的に) を表します。
ExecOptionPermissionExecOptionPermissionクラスは、起動グループを開始するときにrmidが特定のコマンド行「オプション」を使用できる権限を表します。ExecOptionPermissionの「名前」は、コマンド行オプションの値です。構文
オプションでは、ワイルドカードが限定的にサポートされます。アスタリスクは、ワイルドカードマッチを表します。 アスタリスクは、オプション名そのものとして使用できます。 つまり、任意のオプションを表すことができます。 また、オプション名の末尾に使用することもできます。 ただし、「.」か「=」の直後にアスタリスクを指定する必要があります。例を示します。「*」、「-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として定義している起動グループの開始を許可します。5 番目のアクセス権は、起動グループがjava.security.debugプロパティーを使用することを許可しています。最後のアクセス権は、起動グループがsun.rmiというプロパティー名の階層内の任意のプロパティーを使用することを許可しています。ポリシーファイルを指定して
rmidを起動するには、rmidのコマンド行でjava.security.policyプロパティーを指定する必要があります。 次に例を示します。
rmid -J-Djava.security.policy=rmid.policy- <policyClassName>
デフォルトの動作では十分な柔軟性が得られない場合、管理者は、
rmidの起動時に、checkExecCommandメソッドが所属するクラスの名前を指定して、rmid が実行するコマンドをチェックすることができます。policyClassName には、引数なしのコンストラクタを持ち、次のような
checkExecCommandメソッドを実装している public クラスを指定します。public void checkExecCommand(ActivationGroupDesc desc, String[] command) throws SecurityException;起動グループを開始する前に、rmidは、ポリシーのcheckExecCommandメソッドを呼び出します。このとき、起動グループの記述子と、起動グループを開始するための完全なコマンドを含む配列をそのメソッドに渡します。checkExecCommandがSecurityExceptionをスローすると、rmidはその起動グループを開始せず、オブジェクトの起動を試行している呼び出し側にはActivationExceptionがスローされます。- none
sun.rmi.activation.execPolicyプロパティーの値が「none」の場合、rmidは、起動グループを開始するコマンドをまったく検証しません。- -log dir
- 起動システムデーモンがデータベースおよび関連情報を書き込むのに使うディレクトリの名前を指定します。デフォルトでは、
rmidコマンドを実行したディレクトリに、logというログディレクトリが作成されます。- -port port
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");- -stop
-portオプションによって指定されたポートの、現在のrmid呼び出しを停止します。ポートが指定されていない場合は、ポート 1098 で実行されているrmidを停止します。
- CLASSPATH
- ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで分割します。例を示します。
.:/usr/local/java/classes
Copyright © 1993, 2010, Oracle and/or its affiliates. All rights reserved. Please send comments using this Feedback page. |
Java Technology |