rmic(1)

名前
rmic - Java RMI コンパイラ

rmic によって、JRMP または IIOP プロトコルを使用するリモートオブジェクトのスタブ、スケルトン、および Tie クラスが生成されます。また、OMG IDL も生成されます。

形式

rmic [ options ] package-qualified-class-name(s)

説明

rmic コンパイラによって、リモートオブジェクトの、スタブ、スケルトンクラスファイル (JRMP プロトコル)、およびスタブと Tie クラスファイルの組み合わせ (IIOP プロトコル) が生成されます。リモートオブジェクトの実装クラスであるこれらのクラスファイルは、Java プログラミング言語のクラスをコンパイルしたときに生成されます。リモート実装クラスは、java.rmi.Remote インタフェースを実装するクラスです。rmic コマンドでのクラス名は、そのクラスが javac コマンドでコンパイルが成功していて、かつ完全なパッケージ名が指定されている必要があります。たとえば、クラスファイル名 HelloImpl で rmic を実行するには、次のようにします。

rmic hello.HelloImpl

HelloImpl_Stub.class ファイルが、クラスのパッケージ名が付いた hello サブディレクトリに作成されます。

リモートオブジェクトの「スケルトン」は JRMP プロトコルサーバー側のエンティティーで、実際のリモートオブジェクト実装を呼び出すメソッドを含みます。

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

「スタブ」とは、リモートオブジェクトのクライアント側での代理です。スタブは、リモートオブジェクトのメソッド呼び出しを、実物のリモートオブジェクトが常駐するサーバーと通信する役割を持ちます。したがって、クライアントのリモートオブジェクトへの参照は、実際はローカルスタブへの参照となります。

デフォルトで rmic では、1.2 JRMP スタブプロトコルバージョンだけを使用するスタブクラスを生成します。これは、-v1.2 オプションを指定した場合と同じ動作です。(5.0 以前では -vcompat オプションがデフォルトであったことに注意。IIOP プロトコル用のスタブおよび Tie クラスを生成するには -iiop オプションを使用します。

スタブはリモートインタフェースだけを実装し、リモートオブジェクトが実装する局所インタフェースは実装していません。JRMP スタブはリモートオブジェクト自体が実装するリモートインタフェースと同じものを実装しているので、クライアントは、キャストや型チェックに Java プログラミング言語に組み込まれた演算子を使用することができます。IIOP の場合は、PortableRemoteObject.narrow メソッドを使わなければなりません。

オプション

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

    -classpath path
        rmic がクラスを探すためのパスを指定します。このオプションは、デフォルトや CLASSPATH 環境変数設定を上書きします。ディレクトリはコロンで分割します。したがって、path の一般形式は次のようになります。

        例を示します。

    -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++ が含まれています。詳細は、 Java Language to IDL Mapping @
        http://www.omg.org/technology/documents/formal/java_language_mapping_to_omg_idl.htm (OMG) を参照してください。

    -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 クラスが生成されます。スタブクラスは、リモートオブジェクトのローカルプロキシで、クライアントからサーバーに呼び出しを送信するときに使われます。各リモートインタフェースにはスタブクラスが必要です。スタブクラスによってリモートインタフェースが実装されます。クライアントでリモートオブジェクトを参照するときは、実際にはスタブを参照することになります。タイクラスは、サーバー側で着呼を処理し、その呼び出しを適切な実装クラスにディスパッチするときに使われます。各実装クラスには、タイクラスが必要です。

    -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 @
        http://java.sun.com/javase/6/docs/technotes/guides/idl/POA.html (POA) の PortableServer モジュールは、ネイティブの Servant 型を定義します。Java プログラミング言語では、Servant 型は Java の org.omg.PortableServer.Servant クラスにマップされます。このクラスは、すべての POA サーバント実装の基底クラスとして機能し、アプリケーションプログラマが呼び出すことのできるいくつかのメソッドのほかに、POA そのものによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドも提供します。OMG IDL to Java Language Mapping Specification、CORBA V 2.3.1 ptc/00-01-08.pdf に準拠しています。

    -J  -J の後ろに続くオプションを java インタプリタに引き渡します。 java オプションと組み合わせて使います (-J と java オプションの間にスペースは入れない)。

    -keep または -keepgenerated
        スタブ、スケルトン、または Tie クラスのための .java ソースファイルを .class ファイルと同じディレクトリに残します。

    -nowarn
        警告をオフにします。このオプションを指定すると、コンパイラは警告を表示しません。

    -nowrite
        コンパイルしたクラスをファイルシステムに書き込みません。

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

    -verbose
        コンパイラやリンカーが、コンパイルされているクラスやロードされているクラスファイルについてのメッセージを表示するようにします。

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

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

環境変数

    CLASSPATH
        ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで分割します。次に例を示します。

関連項目

java(1)、javac(1)、 CLASSPATH @
http://java.sun.com/javase/6/docs/technotes/tools/index.html#classpath