rmid(1) Remote Method Invocation (RMI) rmid(1)

# 名前

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

# 概要

```
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を開始

**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はエラー・メッセージが表示されて終了します。

必要に応じてサービスを開始するように構成する方法の詳細は、**inetd** (Oracle Solarisの場合)、または**xinetd** (Linux)のマニュアル・ページを参照してください。

# オプション

-C*オプション*

**rmid**コマンドの子プロセス(起動グループ)が作成されたときに、それぞれの子プロセスにコマンド行引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システム・デーモンによって生成される各仮想マシンにプロパティを渡すことができます。

```
rmid -C-Dsome.property=value


 
```

コマンド行引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のコマンドでは、すべての子JVMでserver-callロギングが可能です。

```
rmid -C-Djava.rmi.server.logCalls=true


 
```

-J*option*

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**です。

•デフォルト

**default**または未指定値の**execPolicy**の場合、**rmid**コマンドが実行できるのは、**rmid**コマンドが使用するセキュリティ・ポリシー・ファイルの中で、実行する権限が**rmid**に与えられているコマンドおよびコマンド行オプションのみです。デフォルトの実行ポリシーで使用できるのは、デフォルトの起動グループ実装のみです。

**rmid**コマンドは、起動グループ用のJVMを起動するときに、そのグループについて登録された起動グループ記述子である**ActivationGroupDesc**内の情報を使用します。グループ記述子は、**ActivationGroupDesc.CommandEnvironment**を指定します(省略可能)。これには、起動グループを開始するコマンドと、そのコマンド行に追加できるコマンド行オプションが含まれています。デフォルトでは、**rmid**コマンドは**java.home**にある**java**コマンドを使用します。グループ記述子には、コマンド行にオプションとして追加されるプロパティ・オーバーライドも含まれます(**-D&lt;property&gt;=&lt;value&gt;**として定義されます)。**com.sun.rmi.rmid.ExecPermission**権限は**rmid**コマンドに、起動グループを開始するためにグループ記述子の**CommandEnvironment**で指定されたコマンドを実行する権限を付与します。**com.sun.rmi.rmid.ExecOptionPermission**権限は起動グループの開始時に、グループ記述子でプロパティ・オーバーライドとして、または**CommandEnvironment**でオプションとして指定されたコマンド行オプションを、**rmid**コマンドが使用することを許可します。**rmid**コマンドに様々なコマンドおよびオプションを実行する権限を付与する場合、権限**ExecPermission**および**ExecOptionPermission**をすべてのコード・ソースに付与する必要があります。

**ExecPermission**

**ExecPermission**クラスは、起動グループを開始するために**rmid**コマンドが特定のコマンドを実行する権限を表します。

**構文**: **ExecPermission**の名前は、**rmid**コマンドに実行を許可するコマンドのパス名です。スラッシュ(/)およびアスタリスク(\*)で終わるパス名は、そのディレクトリに含まれるすべてのファイルを示します。スラッシュはファイル区切り文字**File.separatorChar**です。スラッシュ(/)およびマイナス符号(-)で終わるパス名は、そのディレクトリに含まれるすべてのファイルとサブディレクトリ(再帰的に)を示します。特殊なトークン**&lt;&lt;ALL FILES&gt;&gt;**で構成されるパス名は、どのファイルとも一致します。

パス名にアスタリスク(\*)を指定した場合は、現在のディレクトリ内のすべてのファイルを示します。パス名にマイナス符号(-)を指定した場合は、現在のディレクトリ内のすべてのファイルおよび(再帰的に)現在のディレクトリに含まれるすべてのファイルとサブディレクトリを示します。

**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.*";
};


 
```

最初に付与されている権限は、**rmid**コマンドに対し、パス名により明示的に指定される**java**コマンドの1.7.0リリースの実行を許可します。デフォルトでは、**java.home**にあるバージョンの**java**コマンドを使用します。**rmid**コマンドが使用するのと同じバージョンが使用されるため、そのコマンドは、ポリシー・ファイルで指定する必要はありません。2番目の権限は、**rmid**コマンドに対して、ディレクトリ**/files/apps/rmidcmds**内の任意のコマンドの実行権限を許可します。

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**.

•&lt;policyClassName&gt;

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

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

```
 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*

レジストリが使用するポートを指定します。起動システム・デーモンは、このレジストリの中で、**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**

# 関連項目

•[java(1)](/man/os/openjdk-8/java.1)

•クラス・パスの設定

2013年11月21日 JDK 8

---

Document: rmid(1) from openjdk-8 8.504-r3 (Chainguard OS)
Source: https://github.com/openjdk/jdk8u.git
