rmic
コンパイラは、Java Remote Method Protocol (JRMP)を使用したスタブおよびスケルトン・クラス・ファイルを生成する場合や、リモート・オブジェクト用のスタブおよびtieクラス・ファイル(IIOPプロトコル)を生成する場合に使用します。rmic
コンパイラは、Object Management Group (OMG)のインタフェース定義言語(IDL)を生成します。
形式
rmic [ options ] package-qualified-class-names
options
これは、rmic
コンパイラのコマンド行オプション
です。「rmicコンパイラのオプション」を参照してください。
package-qualified-class-names
パッケージを含むクラス名(例: java.awt.Color
)です。
説明
非推奨に関する注: Java Remote Method Protocol (JRMP)のスタブおよびスケルトンの静的な生成のサポートは、非推奨になりました。その代わりに、動的に生成されたJRMPスタブを使用することをお薦めします。これにより、このツールをJRMPベースのアプリケーションで使用する必要がなくなります。
rmic
コンパイラではJRMPを使用するスタブおよびスケルトン・クラス・ファイルと、リモート・オブジェクト用のスタブおよびTieクラス・ファイル(IIOPプロトコル)が生成されます。リモート・オブジェクトの実装クラスであるこれらのクラス・ファイルは、Javaプログラミング言語のクラスをコンパイルしたときに生成されます。リモート実装クラスは、java.rmi.Remote
インタフェースを実装するクラスです。rmic
コマンドでのクラス名は、そのクラスがjavac
コマンドで正常にコンパイルされていて、かつパッケージ名が完全修飾されている必要があります。たとえば、ここで示すように、クラス・ファイル名HelloImpl
でrmic
コマンドを実行すると、クラスのパッケージ名が付いたhello
サブディレクトリにHelloImpl_Stub.class
ファイルが作成されます。
rmic hello.HelloImpl
リモート・オブジェクト用のスケルトンは、リモート・オブジェクト実装の呼出しをディスパッチするメソッドを含むJRMPプロトコル・サーバー側のエンティティです。
リモート・オブジェクト用のTieは、スケルトンと同様にサーバー側のエンティティですが、IIOPプロトコルを使用してクライアントと通信します。
スタブは、リモート・オブジェクト用のクライアント側プロキシで、リモート・オブジェクトでのメソッド呼出しを、実際のリモート・オブジェクト実装が存在するサーバーと通信する役割を持っています。したがって、クライアントによるリモート・オブジェクトへの参照は、実際はローカル・スタブへの参照となります。
デフォルトでは、rmic
コマンドは、-v1.2
オプションが指定されている場合と同様に、1.2 JRMPスタブ・プロトコル・バージョンのみを使用するスタブ・クラスを生成します。「rmicコンパイラのオプション」を参照してください。
スタブはリモート・インタフェースのみを実装し、リモート・オブジェクトが実装するローカル・インタフェースは実装しません。JRMPスタブはリモート・オブジェクトと同じリモート・インタフェースを実装するため、クライアントは、キャストや型チェックにJavaプログラミング言語に組み込まれた演算子を使用できます。IIOPの場合は、PortableRemoteObject.narrow
メソッドを使わなければなりません。
rmicコンパイラのオプション
-bootclasspath path
ブートストラップ・クラス・ファイルの場所をオーバーライドします。
-classpath path
rmic
コマンドがクラスを探すために使用するパスを指定します。このオプションを設定すると、デフォルトやCLASSPATH
環境変数がオーバーライドされます。オペレーティング・システムに応じて、ディレクトリはコロンまたはセミコロンで区切られます。path
の一般的な形式を次に示します。
Oracle Solaris、LinuxおよびOS X: .:your_path
。例: .:/usr/local/java/classes
Windows: .;your_path
。例: .;/usr/local/java/classes
-d directory
生成されたクラス階層の出力先ディレクトリのルートを指定します。このオプションを使えば、スタブ、スケルトン、およびTieファイルを格納するディレクトリを指定できます。
Oracle Solaris、LinuxおよびOS X: たとえば、次のコマンドは、MyClass
から導出されたスタブおよびスケルトン・クラスを/java/classes/exampleclass
ディレクトリに配置します。
rmic -d /java/classes exampleclass.MyClass
Windows: たとえば、次のコマンドは、MyClass
から導出されたスタブおよびスケルトン・クラスをC:\java\classes\exampleclass
ディレクトリに配置します。
rmic -d C:\java\classes exampleclass.MyClass
-d
オプションが指定されていない場合、デフォルトの動作は、-d
が指定された場合と同様です。ターゲット・クラスのパッケージ階層が現在のディレクトリに作成され、スタブ、Tieおよびスケルトン・ファイルがそのディレクトリに配置されます。
-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
my.module 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
オプションと一緒に使用する必要があります。-noValueMethods
オプションでは、発行された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によって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドも提供します。この動作は、OMG IDL to Java Language Mapping Specification, ptc, 00-01-08に準拠しています。
-Jargument
-J
オプションを任意のJavaコマンドと組み合せて使用すると、後に続くargument
(-J
と引数の間に空白を入れない)がJavaインタプリタに渡されます。
-keep
または-keepgenerated
スタブ、スケルトンおよびTieクラス用に生成された.java
ソース・ファイルを保持し、.class
ファイルと同じディレクトリに書き込みます。
-nowarn
警告をオフにします。-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スタブ・プロトコル・バージョンのみのスタブおよびスケルトン・クラスを生成します。-v1.1
オプションが役立つのは、JDK 1.1からrmic
コマンドで生成され、アップグレードできない(さらに動的なクラス・ローディングを使用していない)既存の静的にデプロイされたスタブ・クラスと直列化互換性のあるスタブ・クラスを生成する場合のみです。注: このオプションは非推奨になりました。「説明」を参照してください。
-v1.2
(非推奨)(デフォルト) 1.2 JRMPスタブ・プロトコル・バージョンのみのスタブ・クラスを生成します。スケルトン・クラスは1.2スタブ・プロトコル・バージョンで使用されないため、スケルトン・クラスは生成されません。生成されたスタブ・クラスは、JDK 1.1仮想マシンにロードされても動作しません。注: このオプションは非推奨になりました。「説明」を参照してください。