rmid
rmidコマンドは、オブジェクトをJava仮想マシン(JVM)に登録して起動できるようにする、起動システム・デーモンを開始する場合に使用します。
説明
rmidコマンドは、起動システム・デーモンを開始します。起動システム・デーモンを開始してからでないと、起動可能オブジェクトを起動システムに登録したり、JVM内で起動することができません。
次のように、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の開始(Oracle SolarisおよびLinuxのみ)
rmidをコマンド行から開始するには、inetd (Oracle Solarisの場合)、またはxinetd (Linux)を構成してrmidを必要に応じて開始する方法もあります。
RMIDを開始すると、System.inheritedChannelメソッドを呼び出して、継承されたチャネル(inetd/xinetdから継承)を取得しようとします。継承されたチャネルがnullであるか、java.nio.channels.ServerSocketChannelのインスタンスでない場合、RMIDはそのチャネルがinetd/xinetdによって開始されたものではないと見なし、前述のように開始します。
継承されたチャネルがServerSocketChannelインスタンスである場合、RMIDは、自分がエクスポートするリモート・オブジェクト(java.rmi.activation.ActivationSystemがバインドされているレジストリとjava.rmi.activation.Activatorリモート・オブジェクト)に対する要求を受信するサーバー・ソケットとして、ServerSocketChannelから取得したjava.net.ServerSocketを使用します。このモードでは、RMIDの動作は、次の場合を除いて、コマンド行から開始した場合と同じです。
-
System.errに対する出力は、ファイルにリダイレクトされます。このファイルはjava.io.tmpdirシステム・プロパティで指定されるディレクトリ(通常は/var/tmpまたは/tmp)にあります。ファイル名の接頭辞はrmid-errで、接尾辞はtmpです。 -
-portオプションは使用できません。このオプションを指定した場合、RMIDはエラー・メッセージを出して終了します。 -
-logオプションは必須である。このオプションを指定しなかった場合、RMIDはエラー・メッセージを出して終了します。
rmidのオプション
-
-C option -
rmidコマンドの子プロセス(起動グループ)が作成されたときに、それぞれの子プロセスにコマンド行引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システム・デーモンによって生成される各仮想マシンにプロパティを渡すことができます。rmid -C-Dsome.property=valueコマンド行引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のコマンドを使用すると、すべての子JVMでサーバー呼出しのロギングが可能になります。
rmid -C-Djava.rmi.server.logCalls=true -
-Joption -
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コマンドが採用するポリシーを指定します。このオプションは、Java RMI起動デーモンのOracleの実装のみに存在します。コマンド行にこのプロパティを指定しない場合、結果は
-J-Dsun.rmi.activation.execPolicy=defaultを指定した場合と同じになります。policyに指定可能な値は、default、policyClassNameまたはnoneです。-
defaultexecPolicyの値がdefaultまたは指定されていない場合、rmidコマンドが使用するセキュリティ・ポリシー・ファイル内のコマンドおよびオプションを実行するためのアクセス権がrmidコマンドに付与されているときにのみ、rmidコマンドは特定のコマンド行オプションを付けてコマンドを実行できます。デフォルトの実行ポリシーで使用できるのは、デフォルトの起動グループ実装のみです。rmidコマンドは、起動グループの登録済起動グループ記述子であるActivationGroupDesc内の情報を使用して、そのグループ用のJVMを起動します。グループ記述子は、起動グループを開始する際に実行するコマンドと、そのコマンド行に追加されるコマンド行オプションが含まれるオプションのActivationGroupDesc.CommandEnvironmentを指定します。デフォルトでは、rmidコマンドは、java.homeにあるjavaコマンドを使用します。グループ記述子には、オプションとしてコマンド行に追加されるプロパティ・オーバーライド(-Dproperty=valueと定義)も含まれています。アクセス権com.sun.rmi.rmid.ExecPermissionは、rmidコマンドに、グループ記述子のCommandEnvironmentで指定されたコマンドを実行して起動グループを開始するアクセス権を付与します。アクセス権com.sun.rmi.rmid.ExecOptionPermissionを使用すると、rmidコマンドで、起動グループを開始するときにグループ記述子でプロパティ・オーバーライドとして指定され指定されたコマンド行オプションまたはCommandEnvironmentでオプションとして指定されたコマンド行オプションを使用できるようになります。rmidコマンドに様々なコマンドおよびオプションを実行するアクセス権を付与する場合は、アクセス権ExecPermissionおよびExecOptionPermissionをすべてのコード・ソースに付与する必要があります。ExecPermissionクラス:rmidコマンドが特定のコマンドを実行して起動グループを開始するためのアクセス権を表します。ExecPermissionの構文:ExecPermissionの名前は、rmidコマンドに実行するアクセス権を付与するためのコマンドのパス名です。スラッシュ(
/)とアスタリスク(*)で終わるパス名は、すべてのファイルがそのディレクトリに含まれることを示します(スラッシュはファイル・セパレータFile.separatorCharです)。スラッシュ(
/)とマイナス記号(-)で終わるパス名は、(再帰的に)すべてのファイルとサブディレクトリがそのディレクトリに格納されていることを示します。特別なトークン
<<ALL FILES>>で構成されるパス名は、任意のファイルと一致します。アスタリスク(
*)で構成されるパス名は、現在のディレクトリ内にあるすべてのファイルを示します。マイナス記号(
-)で構成されるパス名は、すべてのファイルが現在のディレクトリ内にあり、(再帰的に)すべてのファイルおよびサブディレクトリが現在のディレクトリに格納されていることを示します。ExecOptionPermissionクラス: 起動グループを開始する際に、rmidコマンドが特定のコマンド行オプションを使用するためのアクセス権を表します。ExecOptionPermissionの名前は、コマンド行オプションの値です。ExecOptionPermissionの構文: オプションでは、ワイルドカードが限定的にサポートされます。アスタリスクは、ワイルドカードの一致を表し、オプション名自体として使用したり(任意のオプションと一致)、アスタリスク(*)がドット(.)または等号(=)の後に続く場合にかぎってオプション名の末尾に使用できます。たとえば、
*、-Dmydir.*または-Da.b.c=*は有効ですが、*mydir、-Da*bまたはab*は無効です。rmidのポリシー・ファイル
rmidコマンドに様々なコマンドおよびオプションを実行するためのアクセス権を付与する場合は、アクセス権ExecPermissionおよびExecOptionPermissionを汎用的にすべてのコード・ソースに付与する必要があります。これらのアクセス権をチェックするのはrmidコマンドだけなので、これらのアクセス権を汎用的に付与しても安全です。rmidコマンドに様々な実行アクセス権を付与するポリシー・ファイルの例を、次に示します。-
Oracle Solaris:
grant { permission com.sun.rmi.rmid.ExecPermission "/files/apps/java/jdk1.7.0/solaris/bin/java"; 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.*"; }; -
Windows:
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コマンドは、ディレクトリ/files/apps/rmidcmds(Oracle Solaris、LinuxおよびmacOS)またはディレクトリc:\files\apps\rmidcmds\(Windows)のいずれかでコマンドを実行できます。3番目に付与されているアクセス権
ExecOptionPermissionを使用すると、rmidコマンドは、セキュリティ・ポリシー・ファイルを/files/policies/group.policy(Oracle Solaris)またはc:\files\policies\group.policy(Windows)のいずれかとして定義している起動グループを開始できます。その次に付与されているアクセス権を使用すると、起動グループが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がスローされます。 -
nonesun.rmi.activation.execPolicyプロパティの値がnoneの場合、rmidコマンドは、起動グループを開始するコマンドの検証を一切実行しません。
-
-
-log dir -
起動システム・デーモンがデータベースおよび関連情報を書き込むのに使用するディレクトリの名前を指定します。デフォルトでは、
rmidコマンドが実行されたディレクトリに、logというログ・ディレクトリが作成されます。 -
-port port -
レジストリで使用されるポートを指定します。起動システム・デーモンは、このレジストリの中で、
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の呼出しを停止します。