rmic(1)

名前
rmic - Java RMI スタブコンパイラ

形式
rmic [ options ] package-qualified-class-names

機能説明
rmic コンパイラは、リモートオブジェクト用のスタブおよび スケルトンクラスファイル (JRMP プロトコル) とスタブ および Tie クラスファイル (IIOP プロトコル) を生成します。 これらのクラスファイルは、リモートオブジェクト 実装クラスである、コンパイルされた Java プログラミング言語 クラスから生成されます。リモート実装クラスは、 インタフェース java.rmi.Remote を実装するクラスです。 rmic コマンドで指定されるクラスは、 javac(1) コマンドで正常にコンパイルされ、 完全にパッケージ修飾されたクラスで なければなりません。 次に示す例では、 HelloImpl というクラスファイルに対して rmic を実行しています。

    rmic hello.HelloImpl

HelloImpl_Stub.class ファイルを (クラスのパッケージに対して指定された) hello サブディレクトリに作成します。

JRMP プロトコルサーバ側エンティティである リモートオブジェクトのスケルトンには、 リモートオブジェクト実装の呼び出しを ディスパッチするメソッドがあります。

リモートオブジェクトの Tie は、スケルトンに似た サーバ側エンティティですが、IIOP プロトコル を使用してクライアントと通信します。

スタブは、リモートオブジェクトのプロキシで、 実際のリモートオブジェクト実装が存在するサーバに、 リモートオブジェクトに対するメソッド呼び出しを転送します。 クライアントのリモートオブジェクトへの参照は、 実際にはローカルスタブへの参照です。

デフォルトでは、 rmic は -v1.2 オプションが 指定された場合と同様に 1.2 JRMP スタブプロトコルを 使用するスタブクラスを生成します (1.5 より前の リリースでは、-vcompat オプションがデフォルト)。 IIOP プロトコル用のスタブクラスおよび Tie クラスを 生成するには、-iiop オプションを使用します。

スタブは、リモートインタフェースのみを実装し、 リモートオブジェクトによっても実装されるローカル インタフェースは実装しません。スタブはリモート オブジェクトとまったく同じリモートインタフェースの セットを実装するため、クライアントはキャストおよび 型チェックに Java 言語の組み込み演算子を使用できます。 IIOP の場合は、 PortableRemoteObject.narrow メソッドを 使用する必要があります。

オプション

-bootclasspath path
    ブートストラップクラスファイルの位置をオーバーライドします。

-classpath path
    rmic がクラスを探すのに用いるパスを path で指定します。この指定値は、デフォルトおよび CLASSPATH 環境変数の設定値をオーバーライドします。 複数のディレクトリを指定する場合はコロンで区切ります。 したがって path の通常の形式は次のようになります。

    .:<your_path>

    以下に例を示します。

    .:/usr/local/java/classes

-d directory
    クラス階層のルートディレクトリを指定します。 このオプションを使用して、スタブ、スケルトン、および Tie ファイルの出力先ディレクトリを指定できます。 たとえば、次のコマンドを入力します。

    rmic -d /java/classes foo.MyClass

この例では、MyClass から派生したスタブおよび スケルトンクラスをディレクトリ /java/classes/foo に配置します。-d オプションが指定されていない場合、 デフォルトの動作は「-d .」が指定された場合と同様です。 ターゲットクラスのパッケージ階層は、 現在のディレクトリに作成され、スタブ/Tie/スケルトン ファイルはその階層内に配置されます。 (以前の一部のバージョンの rmic では、 -d が指定されなかった場合、パッケージ階層は作成されず、 すべての出力ファイル は、現在のディレクトリ内に直接配置されました。)

-extdirs path
    インストールされている拡張機能の位置を上書きします。

-g  ローカル変数を含む、すべてのデバッグ情報の 生成を有効にします。デフォルトでは、 行番号情報のみが生成されます。

-idl
    rmic によって、指定したクラスおよび参照されたクラスの OMG IDL が生成されます。 IDL では、プログラミング言語に依存せずに、宣言するだけでオブジェクトの API を指定できます。 IDL は、 CORBA バインディングを提供する任意の言語 (Java、C++ など) を使用して、メソッドおよびデータの 書き込みおよび呼び出しを行うときの仕様として使われます。 -idl オプションは、合わせて以下のオプションも指定できます。

    -always または -alwaysgenerate
        既存のスタブ、Tie、および IDL が入力クラスより新しいときでも、強制的に生成し直します。
    -factory
        生成された IDL で factory キーワードを使います。
    -idlModule fromJavaPackage[.class] toIDLModule
        IDLEntity パッケージのマッピングを指定します。次に例を示します。

        -idlModule foo.bar
        my::real::idlmod.

    -idlFile fromJavaPackage[.class] toIDLFile
        IDLEntity ファイルのマッピングを指定します。次に例を示します。

        -idlFile test.pkg.X TEST16.idl

-iiop
    rmic は、 JRMP のスタブとスケルトンクラスの代わりに、 IIOP のスタブと Tie クラスを生成します。スタブクラスは、リモートオブジェクトの ローカルプロキシで、クライアントがサーバに呼び出しを送信するときに 使われます。各リモートインタフェースにはスタブクラスが必要です。スタブクラス によってリモートインタフェースが実装されます。クライアントでリモートオブジェクト を参照すると、実際にはスタブを参照することになります。Tie クラスは、 サーバ側で受信した呼び出しを処理し、その呼び出しを適切な実装クラスにディスパッチ するときに使われます。各実装クラスには、Tie クラスが必要です。

    -iiop を指定して rmic を起動すると、次の命名規約に準拠したスタブと Tie が生成されます。

    _<implementationName>_stub.class

    _<interfaceName>_tie.class

    -iiop オプションは、合わせて以下のオプションも指定できます。

    -always または -alwaysgenerate
        既存のスタブ、Tie、および IDL が入力クラスより新しいときでも、強制的 に生成し直します。
    -nolocalstubs
        同じプロセスのクライアントとサーバに対して最適化されたスタブを作成しません。
    -noValueMethods
        -idl オプションとともに使用する必要があります。発行された IDL に、valuetype メソッドおよび初期化子を追加しません。このメソッドおよび初期化子 は、valuetype のオプションです。 -idl オプションを使うときは、 -noValueMethods オプションを指定しない限り生成されます。
    -poa
        継承を org.omg.CORBA_2_3.portable.ObjectImplから org.omg.PortableServer.Servant.へ変更します。
        Portable Object Adapter (POA) の PortableServer モジュールは、ネイティブ の servant 型を定義します。 Java プログラミング言語では、servant 型は、Java の org.omg.PortableServer.Servant クラスにマップされます。これはすべての POA サーバント実装の基底クラスとして 機能し、アプリケーション開発者が呼び出せる多数のメソッドを提供します。また、 POA 自体が読み出したり、サーバント動作を制御するためにユーザが上書きした りできるメソッドも提供します。CORBA V 2.3.1 の「OMG IDL to Java Language Mapping Specfication (ptc/00-01-08.pdf)」に基づいています。

-J  任意の java オプションと 併用した場合、 -J の後のオプション ( -J とオプションの間は空白文字をいれない) を java インタプリタに 渡します。

-keepgenerated
    スタブ、スケルトンおよび tie クラス用に生成された .java ソースファイルを保持し、.class ファイルと同じディレクトリに書き込みます。

-nowarn
    警告をオフにします。このオプションを使用した場合、コンパイラは警告を出力しません。

-vcompat
    1.1 と 1.2 の両方の JRMP スタブプロトコル バージョンと互換性があるスタブおよび スケルトンクラスを生成します (1.5 より前の リリースでは、このオプションはデフォルト)。 生成されたスタブクラスは、JDK 1.1 の仮想マシンに 読み込まれる場合、1.1 のスタブプロトコルバージョンを 使用し、1.2 以降の仮想マシンに読み込まれる場合は、 1.2 のスタブプロトコルバージョンを使用します。 生成されたスケルトンクラスは、1.1 と 1.2 の両方の スタブプロトコルバージョンをサポートします。 生成されたクラスは、両方の操作モードをサポート するため、比較的サイズが大きくなります。

-verbose
    コンパイラとリンカに詳細情報を出力させます。具体的には、 コンパイルされるクラスファイル、およびロードされる クラスファイルに関する情報が出力されます。

-v1.1
    JDK 1.1 のスタブプロトコルバージョン 専用のスタブおよびスケルトンを作成します。 このオプションは、JDK 1.1 から rmic によって生成され、アップグレードできない (および動的クラスローディングが使用 されていない) 既存の静的に配備された スタブクラスと直列化互換性のあるスタブ クラスを生成する場合にのみ使用します。

-v1.2
    (デフォルト) 1.2 JRMP のスタブプロトコル バージョン専用のスタブクラスを生成します。 スケルトンクラスは 1.2 のスタブプロトコル バージョンで使用されないため、このオプション ではスケルトンクラスが生成されません。 生成されたスタブクラスが JDK 1.1 の仮想マシンに 読み込まれた場合は、機能しません。

環境変数

CLASSPATH
    ユーザ定義クラスへのパスをシステムに通知するために使用します。 ディレクトリはコロンで 区切ります。以下に例を示します。

    .:/usr/local/java/classes

関連項目
java(1), javac(1), CLASSPATH