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 コマンドでコンパイルが成功していて、かつ完全なパッケージ名が指定されている必要があります。たとえば、クラスファイル名 HelloImplrmic を実行するには、次のようにします。
rmic hello.HelloImpl
は、HelloImpl_Skel.class および HelloImpl_Stub.class ファイルを、クラスのパッケージ名が付いた hello サブディレクトリに作成します。

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

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

「スタブ」とは、リモートオブジェクトの代理です。 スタブは、リモートオブジェクトのメソッド呼び出しを、実物のリモートオブジェクトが常駐するサーバに転送する責任を持ちます。したがって、クライアントのリモートオブジェクトへの参照は、実際はローカルスタブへの参照となります。デフォルトでは、JRMP プロトコルスタブが生成されます。IIOP プロトコル用のスタブを生成するには -iiop オプションを使用します。

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

オプション

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

-classpath path
rmic がクラスを探すためのパスを指定します。このオプションは、デフォルトや CLASSPATH 環境変数設定を上書きします。ディレクトリはコロンで分割します。したがって、path の一般形式は次のようになります。
.:<your_path>
例を示します。
.:/usr/local/java/classes
-d directory
生成されたクラス階層の出力先ルートディレクトリを指定します。このオプションを使えば、スタブ、Tie、およびスケルトンファイルを格納するディレクトリを指定できます。たとえば、次のようにして使います。

Windows:

% rmic -d C:\java\classes foo.MyClass

Solaris:

% rmic -d /java/classes foo.MyClass
MyClass から取得したスタブとスケルトンクラスを C:\java\classes\foo ディレクトリに置きます。-d オプションが指定されていない場合は、「-d .」が指定されていると見なされます。ターゲットクラスのパッケージ階層が現在のディレクトリに作成され、スタブ、Tie、およびスケルトンファイルがそのディレクトリに格納されます。以前のバージョンの rmic では、-d が指定されていない場合は、パッケージ階層は作成されず、出力ファイルは現在のディレクトリに直接格納されていました。
 
-depend
コンパイラに、他のクラスが参照するクラスを再コンパイルするかどうかを判断させます。通常、ソースコードが参照するクラスが欠落したり、古くなったものを再コンパイルするだけです。

-extdirs path
インストール型拡張機能の位置をオーバーライドします。

-g
デバッガ用のテーブルを生成します。デバッガ用のテーブルは行番号や局所変数に関する情報を含みます。 この情報は Java デバッガツールが使用します。デフォルトでは、行番号だけが生成されます。

-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 オプションを指定しない限り生成されます。

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

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

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

-sourcepath path
ユーザソースファイルの検索先を指定します。

-vcompat
(デフォルト) 1.1 と 1.2 の両方の JRMP スタブプロトコルバージョンと互換性のあるスタブとスケルトンを作成します。

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

-v1.1
1.1 の JRMP スタブプロトコルバージョンのスタブとスケルトンを作成します。

-v1.2
1.2 の JRMP スタブプロトコルバージョンだけのスタブを作成します。

環境変数

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

関連項目

javajavacCLASSPATH