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

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

形式

rmid [options]

解説

rmid ツールは、起動システムデーモンを開始します。起動システムデーモンを開始してからでないと、起動可能オブジェクトを起動システムに登録したり、JVM で起動したりすることはできません。起動可能なリモートオブジェクトを使ったプログラムの作成方法の詳細は、RMI 仕様および起動のチュートリアルを参照してください。

デーモンを起動するには、次のように、rmid コマンドを実行し、セキュリティポリシーファイルを指定します。

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

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

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

レジストリにほかのポートを指定するには、rmid の起動時に -port オプションを指定しなければなりません。次に例を示します。
    rmid -J-Djava.security.policy=rmid.policy -port 1099
このコマンドは、起動システムデーモンを開始し、レジストリのデフォルトポート 1099 でレジストリを開始します。

オプション

-C<someCommandLineOption>
rmid の子プロセス (起動グループ) が作成されたときに、各子プロセスにコマンド行引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システムデーモンによって生成される各 Java Virtual Machine にプロパティを渡すことができます。
    rmid -C-Dsome.property=value
コマンド行引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のようなコマンドを実行できます。
    rmid -C-Djava.rmi.server.logCalls=true
このコマンドによって、すべての子 JVM でサーバコールのログが作成されるようになります。

-J<someCommandLineOption>
rmid を実行中の java インタプリタに渡すオプションを指定します。たとえば、rmidrmid.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 に与えられている場合だけです。「デフォルト」の実行ポリシーで使用できるのは、デフォルトの起動グループ実装だけです。

    rmid は、起動グループの JVM を起動する際、グループの登録済み起動グループ記述子である ActivationGroupDesc 内の情報を使用します。グループ記述子は、オプションの ActivationGroupDesc.CommandEnvironment を指定しています。これには、起動グループを開始する「コマンド」およびコマンド行に追加する任意のコマンド行「オプション」が含まれます。デフォルトでは、rmidjava.homejava コマンドを使用します。グループ記述子には、オプションとしてコマンド行に追加される「プロパティ」オーバーライドも含まれます。プロパティは次のように定義します。

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

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

    例を示します。「*」、「-Dfoo.*」、「-Da.b.c=*」は有効です。「*foo」、「-Da*b」、「ab*」は無効です。

    rmid のポリシーファイル

    rmid にさまざまなコマンドとオプションの実行権限を与える場合、アクセス権 ExecPermission および ExecOptionPermission を汎用的に (つまり、すべてのコードソースに対して) 許可する必要があります。これらのアクセス権をチェックするのは rmid だけであるため、これらのアクセス権を汎用的に許可しても安全です。

    rmid に複数の実行権限を付与しているポリシーファイルの例を、次に示します。

    grant {
        permission com.sun.rmi.rmid.ExecPermission
    	"c:\\files\\apps\\java\\jdk1.2.2\\win32\\bin\\java";
    
        permission com.sun.rmi.rmid.ExecPermission
    	"c:\\files\\apps\\java\\jdk1.2.2\\win32\\bin\\java_g";
    
        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.*";
    };
    
    最初の 2 つの付与されているアクセス権は、rmid に対し、パス名により明示的に指定される java コマンドおよび java_g コマンドの 1.2.2 バージョンの実行を許可します。デフォルトでは、java.home 内の java コマンドのバージョン (rmid が使用するのと同じバージョン) が使用されるため、ポリシーファイルで指定する必要はありません。3 番目のアクセス権は、rmid に対し、ディレクトリ c:\files\apps\rmidcmds\ 内の任意のコマンドの実行を許可します。

    4 番目に付与されているアクセス権 ExecOptionPermission は、rmid に対し、セキュリティポリシーファイルを c:\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 メソッドを呼び出して、起動グループの記述子および起動グループを開始する完全なコマンドを含む配列をメソッドに渡します。checkExecCommandSecurityException をスローする場合、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
    ユーザ定義クラスへのパスをシステムに指定します。ディレクトリは、UNIX と Macintosh ではコロンで分割し、Windows 95 ではセミコロンで分割します。例を示します。
        .;C:\usr\local\java\classes
    

    関連項目

    rmicCLASSPATHjava