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
であり、rmid
がコマンド行から開始された場合は、前述のように起動します。継承されたチャンネルが
java.io.channels.ServerSocketChannel
のインスタンスでない場合、rmid
は終了します。継承されたチャンネルが
ServerSocketChannel
インスタンスである場合は、エクスポートするリモートオブジェクト、つまりjava.rmi.activation.ActivationSystem
がバインドされているレジストリとjava.rmi.activation.Activator
リモートオブジェクトに対する要求を受信するサーバソケットとして、ServerSocketChannel
から取得したjava.net.ServerSocket
をrmid
では使用します。
rmid
ツールは、inetd
/xinetd
から開始すると、コマンド行から開始した場合と同じ動作になります。ただし、次の場合を除きます。
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
を汎用的に許可する必要があります。つまり、すべてのコードソースに対して許可します。
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 {最初の 2 つの付与されているアクセス権は、
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.*";
};rmid
に対し、パス名により明示的に指定されるjava
コマンドおよびjava_g
コマンドの 1.2.2 バージョンの実行を許可します。デフォルトでは、java.home
にあるバージョンのjava
コマンド (rmid
が使用するのと同じバージョン) が使用されるため、そのコマンドは、ポリシーファイルで指定する必要はありません。3 番目のアクセス権は、rmid
に対して、ディレクトリ/files/apps/rmidcmds
内の任意のコマンドの実行権限を許可します。ポリシーファイルを指定して
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
rmic、CLASSPATH、java
Copyright
© 2004 Sun Microsystems, Inc.All
Rights Reserved. コメントの送付先: rmi-comments@java.sun.com |