rmid [options]
options
rmidコマンドは、起動システム・デーモンを開始します。起動システム・デーモンを開始してからでないと、アクティブ化可能オブジェクトをアクティブ化システムに登録したり、JVM内でアクティブ化したりすることができません。アクティブ化可能なオブジェクトを使用するプログラムの作成方法の詳細は、アクティブ化の使用に関するチュートリアル(http://docs.oracle.com/javase/8/docs/technotes/guides/rmi/activation/overview.html)を参照してください
rmidコマンドを実行し、次のようにセキュリティ・ポリシー・ファイルを指定して、デーモンを起動します。
rmid -J-Djava.security.policy=rmid.policy
rmidコマンドのOracleの実装を実行する場合、デフォルトでは、セキュリティ・ポリシー・ファイルを指定する必要があります。それは、rmidコマンドが起動グループ用にJVMを起動するために各ActivationGroupDesc内の情報を使用できるかどうかを検証できるようにするためです特に、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をコマンド行から開始するには、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の動作は、次のことを除いて、コマンド行から起動した場合と同じです。
必要に応じてサービスを開始するように構成する方法の詳細は、inetd (Oracle Solarisの場合)、またはxinetd (Linux)のマニュアル・ページを参照してください。
-Cオプション
rmid -C-Dsome.property=value
rmid -C-Djava.rmi.server.logCalls=true
-Joption
rmid -J-Djava.security.policy-rmid.policy
-J-Dsun.rmi.activation.execPolicy=policy
defaultまたは未指定値のexecPolicyの場合、rmidコマンドが実行できるのは、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>>で構成されるパス名は、どのファイルとも一致します。
パス名にアスタリスク(*)を指定した場合は、現在のディレクトリ内のすべてのファイルを示します。パス名にマイナス符号(-)を指定した場合は、現在のディレクトリ内のすべてのファイルおよび(再帰的に)現在のディレクトリに含まれるすべてのファイルとサブディレクトリを示します。
ExecOptionPermission
ExecOptionPermissionクラスは、起動グループを開始するときにrmidコマンドで特定のコマンド行オプションを使用できる権限を表します。ExecOptionPermissionの名前は、コマンド行オプションの値です。
構文: オプションでは、ワイルドカードが限定的にサポートされます。アスタリスクは、ワイルドカード・マッチを表します。アスタリスク(*)は、オプション名そのものとして使用できます。つまり、任意のオプションを表すことができます。また、オプション名の末尾に使用することもできます。ただし、ドット(.)か等号(=)の直後にアスタリスク(*)を指定する必要があります。
例: *や-Dmydir.*や-Da.b.c=*は有効ですが、*mydirや-Da*bやab*は無効です。
rmidのポリシー・ファイル
rmidコマンドに様々なコマンドおよびオプションを実行する権限を許可する場合は、権限ExecPermissionおよびExecOptionPermissionをすべてのコード・ソースに付与する必要があります(汎用的に)。これらの権限をチェックするのはrmidコマンドのみなので、これらの権限を汎用的に付与しても安全です。
rmidコマンドに各種の実行権限を付与するポリシー・ファイルの例を、次に示します。
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.*"; };
3番目に付与されている権限ExecOptionPermissionは、rmidコマンドに対して、セキュリティ・ポリシー・ファイルを/files/policies/group.policyとして定義している起動グループの開始を許可します。次の権限は、起動グループがjava.security.debug propertyを使用することを許可しています。最後の権限は、起動グループがsun.rmi property名の階層内の任意のプロパティを使用することを許可しています。
ポリシー・ファイルを指定してrmidコマンドを起動するには、rmidのコマンド行でjava.security.policyプロパティを指定する必要があります。次に例を示します。
rmid -J-Djava.security.policy=rmid.policy.
デフォルトの動作では十分な柔軟性が得られない場合、管理者は、rmidの起動時に、checkExecCommandメソッドが所属するクラスの名前を指定して、rmidコマンドが実行するコマンドをチェックすることができます。
policyClassNameには、引数なしのコンストラクタを持ち、次のようなcheckExecCommandメソッドを実装しているpublicクラスを指定します。
public void checkExecCommand(ActivationGroupDesc desc, String[] command) throws SecurityException;
sun.rmi.activation.execPolicyプロパティの値がnoneの場合、rmidコマンドは、起動グループを開始するコマンドをまったく検証しません。
-log dir
-port port
import java.rmi.*; import java.rmi.activation.*; ActivationSystem system; system = (ActivationSystem) Naming.lookup("//:port/java.rmi.activation.ActivationSystem");
-stop
CLASSPATH