4 WebLogic RMIコンパイラの使い方
この章には次の項が含まれます:
WebLogic RMIコンパイラの概要
WebLogic RMIコンパイラ(weblogic.rmic
)は、リモート・オブジェクトを生成してコンパイルするためのコマンド行ユーティリティです。weblogic.rmic
は、クライアント側でアプリケーションのカスタム・リモート・オブジェクト・インタフェースに対して動的プロキシを生成し、サーバー側オブジェクトにホット・コード生成を提供します。
クラスタ化可能クライアントまたはIIOPクライアントの場合は、明示的にweblogic.rmic
を実行するだけです。WebLogic RMI over IIOPを使用すると、クライアントは、Internet Inter-ORB Protocol (IIOP)を介してRMIリモート・オブジェクトにアクセスできるため、RMIプログラミング・モデルが拡張されます。RMI over IIOPの使い方を参照してください。
WebLogic RMIコンパイラの機能
以下の節では、このリリースのWebLogic RMIコンパイラの機能について説明します。
ホット・コード生成
rmic
を実行すると、WebLogic Serverのホット・コード生成機能により、メモリー内にサーバー・クラス用のバイトコードが自動生成されます。バイトコードは、リモート・オブジェクトの必要に応じて、動的に生成されます。現在のバージョンのWebLogic Serverでは、weblogic.rmic
を実行しても、オブジェクトのスケルトン・クラスは生成されません。
ホット・コード生成では、クライアント上の動的プロキシからのリクエストを処理する、サーバー側のクラスのバイト・コードを作成します。動的に生成されたバイト・コードはクライアント・リクエストをデシリアライズし、実装クラスに対して実行します。次に結果をシリアライズしてクライアントのプロキシへ送り返します。クラスの実装は、Weblogic ServerのJNDIツリーの名前にバインドされます。
プロキシの生成
Weblogic RMIコンパイラでは、デフォルトの動作でリモート・インタフェース用のプロキシとそのプロキシを共有するリモート・クラス用のプロキシが作成されます。プロキシは、リモート・オブジェクトのクライアントが使用するクラスです。RMIでは、動的に生成されたバイトコードとプロキシ・クラスが使用されます。
たとえば、example.hello.HelloImpl
とcounter.example.CiaoImpl
は、単一のプロキシ・クラスとバイトコード、つまりリモート・オブジェクト(このケースではexample.hello.Hello
)によって実装されたリモート・インタフェースに適合するプロキシで表わされます。
リモート・オブジェクトが複数のインタフェースを実装する場合、プロキシの名前とパッケージは1組のインタフェースをエンコードすることによって決定されます。WebLogic RMIコンパイラの-nomanglednames
というオプションを使って、デフォルトの動作をオーバーライドできます。このオプションを使用すると、コンパイル時にリモート・クラスに固有のプロキシが作成されます。クラス固有のプロキシが検出された場合は、そのプロキシはインタフェース固有のプロキシに優先します。
さらに、WebLogic RMIのプロキシ・クラスでは、プロキシはfinalではありません。同じ場所に配置されたリモート・オブジェクトへの参照は、プロキシではなくオブジェクトそのものへの参照です。
動的プロキシ・クラスは、クライアントに渡されるシリアライズ可能クラスです。クライアントは、WebLogic JNDIでクラスをルックアップすることによって、そのクラスのプロキシを取得します。クライアントは、あたかもローカルなクラスであるかのようにプロキシのメソッドを呼び出します。プロキシは、リクエストをシリアライズしてWebLogic Serverに送ります。
WebLogic RMIコンパイラのオプション
WebLogic RMIコンパイラは、Javaコンパイラがサポートしているオプションをすべて受け入れます。たとえば、コマンド行のコンパイラ・オプションに-d \classes examples.hello.HelloImpl
を追加できます。ほかにも、Javaコンパイラがサポートしているすべてのオプションを使用でき、これらのオプションは直接Javaコンパイラに渡されます。
次の表にjava
weblogic.rmic
オプションを示します。これらのオプションは、java weblogic.rmic
の後、リモート・クラス名の前に入力します。
$java weblogic.rmic [options] <classes>...
表4-1 WebLogic RMIコンパイラのオプション
オプション | 説明 |
---|---|
|
オプションの説明を表示します。 |
|
バージョン情報を出力します。 |
|
コンパイルの対象(最上位)ディレクトリを指定します。 |
|
サービスがWebLogic Serverの実行スレッドを取得するために使用する、構成済の実行キューを指定します。 |
|
すべての呼出しが一方向呼出しであることを指定します。 |
|
リモート・インタフェース用のIDLを生成します。 |
|
既存のIDLファイルを上書きします。 |
|
IDL情報についての冗長な情報を表示します。 |
|
IDLファイルを作成するディレクトリを指定します(デフォルトは現在のディレクトリ)。 |
|
値タイプ用にファクトリ・メソッドを生成します。 |
|
値タイプ、およびそれを含むメソッドと属性が生成されないようにします。 |
|
抽象インタフェース、およびそれを含むメソッドと属性が生成されないようにします。 |
|
OMG規格に従ってIDLを生成します。 |
|
Visibroker 4.5 C++との互換性があるIDLを生成します。 |
|
Orbix 2000 2.0 C++との互換性があるIDLを生成します。 |
|
Sunバージョンのrmicを使用してCORBAスケルトンを生成します。 |
|
Sunバージョンのrmicを使用してCORBAスタブを生成します。 |
- |
RMI呼出しを行う前にトランザクションをサスペンドし、呼出しが完了した後に再開します。 |
|
Javaコンパイラを指定します。指定されない場合、-compilerclassオプションが使用されます。 |
|
呼び出すコンパイラ・クラス。 |
|
そのサービスをクラスタ化可能(WebLogicクラスタ内の複数のサーバーがホストできます)として指定します。各ホスティング・オブジェクト、またはレプリカは、共通名でネーミング・サービスにバインドされます。そのサービス・スタブがネーミング・サービスから取り出される場合、それはレプリカのリストを保持するレプリカ対応参照を含み、レプリカ間のロード・バランシングやフェイルオーバーを行います。 |
|
-clusterableと組み合せた場合だけ使用可能。ロード・バランシングおよびフェイルオーバーに使用する、サービス固有のアルゴリズムを指定します(デフォルトはweblogic.cluster.loadAlgorithm)。ラウンドロビン、ランダム、重みベースの中から1つ選択できます。 |
|
このクラスタ固有のオプションは、-clusterableと組み合せて使用され、ルーティング・メソッド呼出し用に使われるクラスを指定します。このクラスはweblogic.rmi.cluster.CallRouterを実装する必要があります。指定した場合、各メソッド呼出しの前にそのクラスのインスタンスが呼び出され、そのメソッド・パラメータに基づいてルーティングするサーバーを指定できます。サーバー名またはnullが返されます。nullは現在のロード・アルゴリズムが使用されることを示します。 |
|
このクラスタ固有のオプションは、-clusterableと組み合せて使用され、セッション維持型ロード・バランシングを有効にします。最初のリクエストをサービスするために選ばれたサーバーが、後続のすべてのリクエストにも使用されます。 |
|
このクラスタ固有のオプションは、-clusterableと組み合せて使用され、このクラスのメソッドが多重呼出し不変であることを示します。これにより、リモート・メソッドが呼び出される前に起きた障害かどうか確認できなくても、通信障害があれば、スタブはそのリカバリを試みることができるようになります。デフォルトでは(このオプションが使われなければ)、スタブは、リモート・メソッドが呼び出された前に起きたことが確認されている障害に関してだけ再試行します。 |
|
サーバーからIIOPスタブを生成します。 |
|
IIOPプロキシ・クラスが作成されるディレクトリを指定します。 |
|
remote-client-timeoutと組み合せて使用されます。 |
|
アノテーションを出力します。 |
|
コンパイル時にリモート・クラスに固有のプロキシが作成されます。 |
|
デバッグ情報をクラスにコンパイルします。 |
|
最適化しながらコンパイルします。 |
|
警告なしでコンパイルします。 |
|
冗長情報を出力してコンパイルします。 |
|
Javaコンパイラによる冗長情報の出力を有効にします。 |
|
|
|
非推奨となった呼出しについて警告します。 |
|
使用するクラス・パスを指定します。 |
|
Java実行時にフラグを渡すために使用します。 |
|
WebLogic RMIコンパイラを実行するときに、生成したスタブ・クラスとスケルトン・クラスのソースを保持できます。 |
|
コンパイル時にスタブおよびスケルトン・クラスが作成されます。 |
レプリケートされないスタブの生成
weblogic.rmic
を使って、レプリケートされないスタブをクラスタ内に生成することもできます。このようなスタブは、「固定」サービスと呼ばれています。これらのスタブは登録されたホストからのみ使用可能であり、透過的なフェイルオーバーやロード・バランシングは提供しません。固定サービスはレプリケートされたクラスタ全体のJNDIツリーにバインドされるので、クラスタ全体で使用可能になります。ただし、固定サービスをホストする各サーバーが故障しても、クライアントは別のサーバーにフェイルオーバーすることはできません。
永続的なコンパイラ・オプションの使用
デプロイメントの際には、appcとejbcによりRMIコンパイラを使用して各EJBコンテナ・クラスが実行され、スタブとスケルトンを動的に生成するのに必要なRMI記述子が作成されます。weblogic-ejb-jar.xml
ファイルを使用して、iiop-security-descriptor
要素を永続化できます。『Oracle WebLogic Server Enterprise JavaBeansバージョン2.1の開発』のweblogic-ejb-jar.xmlの要素に関する項を参照してください。
Java SEの拡張
Java RMIのJava SE拡張の詳細は、http://docs.oracle.com/javase/8/docs/technotes/guides/rmi/を参照してください。