rmid(1)

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

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

形式

rmid [options]

説明

rmid ツールは、起動システムデーモンを開始します。起動システムデーモンを開始してからでないと、起動可能オブジェクトを起動システムに登録したり、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

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

rmid をデフォルト設定で実行すると、次のような処理が行われます。

    o   アクティベータを起動し、デフォルトポート 1098 で内部レジストリを起動する

    o   この内部レジストリの中で、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 の動作は、次のことを除いて、 コマンド行から起動した場合と同じです。

    o   System.err に対する出力は、ファイルにリダイレクトされる。このファイルは java.io.tmpdir システムプロパティーで指定されるディレクトリ (通常は /var/tmp または /tmp) にある。 ファイル名の接頭辞は rmid-err で、接尾辞は "tmp" である

    o   -port オプションは拒否される。このオプションを指定すると、rmid はエラーメッセージを出して終了する

    o   -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 です。 それぞれの値について、このあと説明します。

        o   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 {
                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

        o

        o   <policyClassName>

        デフォルトの動作では十分な柔軟性が得られない場合、管理者は、rmid の起動時に、checkExecCommand メソッドが所属するクラスの名前を指定して、rmid が実行するコマンドをチェックすることができます。

        policyClassName には、引数なしのコンストラクタを持ち、次のような checkExecCommand メソッドを実装している public クラスを指定します。

            public void checkExecCommand(ActivationGroupDesc desc,
                                         String[] command)
                throws SecurityException;

        起動グループを開始する前に、rmid は、ポリシーの checkExecCommand メソッドを呼び出します。このとき、起動グループの記述子と、起動グループを開始するための完全なコマンドを含む配列をそのメソッドに渡します。checkExecCommand が SecurityException をスローすると、rmid はその起動グループを開始せず、オブジェクトの起動を試行している呼び出し側には ActivationException がスローされます。

        o   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(1)、 CLASSPATH @
http://java.sun.com/javase/6/docs/technotes/tools/index.html#classpath、java(1)