rmid(1)

名前
rmid - RMI 起動システムデーモン

rmid で起動システムデーモンを開始すると、オブジェクトを仮想マシン (VM) に登録して起動できるようになります。

形式
rmid [ options ]

機能説明
rmid ツールは、起動システムデーモンを開始します。起動可能なオブジェクトを起動 システムに登録したり、Java VM でアクティブにしたりするには、あらかじめ起動 システムデーモンを開始しておく必要があります。 起動可能なリモートオブジェクト を使ったプログラムの作成方法についての詳細は、Java RMI の仕様
 (http://java.sun.com/javase/6/docs/platform/rmi/spec/rmitoc.html) および起動のチュートリアル
 (http://java.sun.com/javase/6/docs/technotes/guides/rmi/activation/overview.html) を参照してください。

起動システムデーモンは、次のようにセキュリティポリシーファイルを指定して rmid コマンドを実行することによって開始できます。

% rmid -J-Djava.security.policy=rmid.policy

注: Sun の rmid 実装を実行する場合、デフォルトではセキュリティポリシーファイルを指定する必要があります。そうすることで、起動グループ用の JVM の起動に、各 ActivationGroupDesc 内の情報を使用できるかどうかを rmid が確認できます。特に、 CommandEnvironment により指定されるコマンドやオプション、および ActivationGroupDesc のコンストラクタに渡されるすべての プロパティ は、 rmid 用のセキュリティポリシーファイルで明示的に許可することが必要になりました。 sun.rmi.activation.execPolicy プロパティの値は、起動グループの JVM の起動に ActivationGroupDesc 内の情報を使用できるかどうかの判断に rmid が使用するポリシーを定義します。

rmid をデフォルト設定で実行することにより、以下が行われます。

    •   このコマンドはアクティベータを起動するとともにデフォルトポートの 1098 で内部レジストリを 開始し、

    •   ActivationSystem を java.rmi.activation.ActivationSystem という名前に内部レジストリ上でバインドします。

レジストリにほかのポートを指定するには、 rmid の起動時に -port オプションを指定しなければなりません。たとえば、次のようにします。

rmid -J-Djava.security.policy=rmid.policy -port 1099

このコマンドは、起動システムデーモンを開始し、レジストリのデフォルトポート 1099 でレジストリを開始します。

  inetd/xinetd からの rmid の起動

コマンド行から rmid を起動しないで、 inetd (Solaris) または xinetd (Linux) を設定し、 rmid を必要に応じて起動することができます。

起動時に rmid は、System.inheritedChannel メソッドを呼び出して 継承チャネル (inetd/xinetd からの継承) の 取得を試みます。 継承されたチャンネルが null であるか、java.nio.channels.ServerSocketChannel のインスタンスでなかった場合、rmid はそのチャンネルは inetd/xinetd によって起動されたものではないと判断し、前述のように起動します。

継承チャンネルが ServerSocketChannel インスタンスの場合、 rmid は ServerSocketChannel から 取得した java.net.ServerSocket を、 エクスポートするリモートオブジェクト (java.rmi.activation.ActivationSystem が バインドされるレジストリと java.rmi.activation.Activator リモートオブジェクト) に対する要求を 受け入れるサーバソケットとして使用します。
このモードでは、 rmid の動作は、次のことを除いて、 コマンド行から起動した場合と同じです。

• System.err に表示される出力はファイルにリダイレクト
    されます。このファイルは、接頭辞「rmid-err」と接尾辞「tmp」を 使用して java.io.tmpdir システムプロパティ (通常 /var/tmp または /tmp) で指定したディレクトリにあります。

• -port オプションは許可されていません。このオプションが
    指定されている場合、 rmid はエラーメッセージを表示して 終了します。

• -log オプションは必須です。このオプションが
    指定されていない場合、 rmid はエラーメッセージを表示して 終了します。

必要に応じて開始するサービスの設定方法についての詳細は、 inetd (Solaris) または xinetd (Linux) のマニュアルページを 参照してください。

オプション

-CsomeCommandLineOption
    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 は特定のコマンド行オプションを指定してコマンドを実行できます。 default の実行ポリシーを使用できるのは、 デフォルトの起動グループ実装だけです。

    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 の「名前」は、コマンド行オプションの値です。

    構文
        オプションでは、制限付きワイルドカード指定がサポートされます。 アスタリスクは、ワイルドカードマッチングを指定します。アスタリスクは、 オプション名自体を表す (つまり、すべてのオプションに一致する) ために 使用できます。また、「.」および「=」の次に指定する場合にのみ、 オプション名の最後にアスタリスクを使用できます。

        例を示します。「*」、「-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 に対し、パス名により明示された 1.2.2 バージョンの java コマンドを実行する許可を与えます。デフォルトでは、 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 がスローされます。

    •   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