| Oracle® Fusion Middleware Oracle WebLogic Server RMIのプログラミング 11g リリース1(10.3.4) B61626-02 |
|
![]() 前 |
![]() 次 |
以下の節では、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コンパイラの機能について説明します。
rmicを実行すると、WebLogic Serverのホット・コード生成機能により、メモリー内にサーバー・クラス用のバイトコードが自動生成されます。バイトコードは、リモート・オブジェクトの必要に応じて、動的に生成されます。現在のバージョンのWebLogic Serverでは、weblogic.rmicを実行しても、オブジェクトのスケルトン・クラスは生成されません。
ホット・コード生成では、クライアント上の動的プロキシからのリクエストを処理する、サーバー側のクラスのバイト・コードを作成します。動的に生成されたバイトコードはクライアント・リクエストをデシリアライズし、実装クラスに対して実行します。次に結果をシリアライズしてクライアントのプロキシへ送り返します。クラスの実装は、Weblogic ServerのWeblogic RMIレジストリ内の名前に関連付けられます。
Weblogic RMIコンパイラでは、デフォルトの動作でリモート・インタフェース用のプロキシとそのプロキシを共有するリモート・クラス用のプロキシが作成されます。プロキシは、リモート・オブジェクトのクライアントが使用するクラスです。RMIでは、動的に生成されたバイトコードとプロキシ・クラスが使用されます。
たとえば、WebLogic RMIコンパイラでは、example.hello.HelloImplとcounter.example.CiaoImplは、一対のプロキシ・クラスとバイトコード、つまりリモート・オブジェクト(このサンプルではexample.hello.Hello)によって実装されたリモート・インタフェースに適合するプロキシで表わされます。
リモート・オブジェクトが複数のインタフェースを実装する場合、プロキシの名前とパッケージは1組のインタフェースをエンコードすることによって決定されます。WebLogic RMIコンパイラの-nomanglednamesというオプションを使って、デフォルトの動作をオーバーライドできます。このオプションを使用すると、コンパイル時にリモート・クラスに固有のプロキシが作成されます。クラス固有のプロキシが検出された場合は、そのプロキシはインタフェース固有のプロキシに優先します。
さらに、WebLogic RMIのプロキシ・クラスでは、プロキシはfinalではありません。同じ場所に配置されたリモート・オブジェクトへの参照は、プロキシではなくオブジェクトそのものへの参照です。
動的プロキシ・クラスは、クライアントに渡されるシリアライズ可能クラスです。クライアントは、WebLogic RMIレジストリでクラスをルックアップすることによって、そのクラスのプロキシを取得します。クライアントは、あたかもローカルなクラスであるかのようにプロキシのメソッドを呼び出します。プロキシは、リクエストをシリアライズしてWebLogic Serverに送ります。
WebLogic RMIコンパイラには、他にも以下のような機能があります。
リモート・メソッドのシグネチャはRemoteExceptionを送出する必要がありません。
リモートの例外はRuntimeExceptionにマップできます。
リモート・クラスは、非リモート・インタフェースも実装できます。
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コンパイラのオプション
| オプション | 説明 |
|---|---|
|
-help |
オプションの説明を表示します。 |
|
-version |
バージョン情報を出力します。 |
|
-d <dir> |
コンパイルの対象(最上位)ディレクトリを指定します。 |
|
-dispatchPolicy <queueName> |
サービスがWebLogic Serverの実行スレッドを取得するために使用する、構成済の実行キューを指定します。詳細は、Oracle WebLogic Serverパフォーマンスおよびチューニングの実行キューによるスレッド使用の制御に関する項を参照してください。 |
|
-oneway |
すべての呼出しが一方向呼出しであることを指定します。 |
|
-idl |
リモート・インタフェース用のIDLを生成します。 |
|
-idlOverwrite |
既存のIDLファイルを上書きします。 |
|
-idlVerbose |
IDL情報についての冗長な情報を表示します。 |
|
-idlDirectory <idlDirectory> |
IDLファイルを作成するディレクトリを指定します(デフォルトは現在のディレクトリ)。 |
|
-idlFactories |
値タイプ用にファクトリ・メソッドを生成します。 |
|
-idlNoValueTypes |
値タイプ、およびそれを含むメソッドと属性が生成されないようにします。 |
|
-idlNoAbstractInterfaces |
抽象インタフェース、およびそれを含むメソッドと属性が生成されないようにします。 |
|
-idlStrict |
OMG規格に従ってIDLを生成します。 |
|
-idlVisibroker |
Visibroker 4.5 C++との互換性があるIDLを生成します。 |
|
-idlOrbix |
Orbix 2000 2.0 C++との互換性があるIDLを生成します。 |
|
-iiopTie |
Sunバージョンのrmicを使用してCORBAスケルトンを生成します。 |
|
-iiopSun |
Sunバージョンのrmicを使用してCORBAスタブを生成します。 |
|
-nontransactional |
RMI呼出しを行う前にトランザクションをサスペンドし、呼出しが完了した後に再開します。 |
|
-compiler <javac> |
Javaコンパイラを指定します。指定されない場合、-compilerclassオプションが使用されます。 |
|
-compilerclass <com.sun.tools.javac.Main> |
呼び出すコンパイラ・クラス。 |
|
-clusterable |
そのサービスをクラスタ化可能(WebLogicクラスタ内の複数のサーバーがホストできます)として指定します。各ホスティング・オブジェクト、またはレプリカは、共通名でネーミング・サービスにバインドされます。そのサービス・スタブがネーミング・サービスから取り出される場合、それはレプリカのリストを保持するレプリカ対応参照を含み、レプリカ間のロード・バランシングやフェイルオーバーを行います。 |
|
-loadAlgorithm <algorithm> |
-clusterableと組み合せた場合だけ使用可能。ロード・バランシングおよびフェイルオーバーに使用する、サービス固有のアルゴリズムを指定します(デフォルトはweblogic.cluster.loadAlgorithm)。ラウンドロビン、ランダム、重みベースの中から1つ選択できます。 |
|
-callRouter <callRouterClass> |
このクラスタ固有のオプションは、-clusterableと組み合せて使用され、ルーティング・メソッド呼出し用に使われるクラスを指定します。このクラスはweblogic.rmi.cluster.CallRouterを実装する必要があります。指定した場合、各メソッド呼出しの前にそのクラスのインスタンスが呼び出され、そのメソッド・パラメータに基づいてルーティングするサーバーを指定できます。サーバー名またはnullが返されます。nullは現在のロード・アルゴリズムが使用されることを示します。 |
|
-stickToFirstServer |
このクラスタ固有のオプションは、-clusterableと組み合せて使用され、セッション維持型ロード・バランシングを有効にします。最初のリクエストをサービスするために選ばれたサーバーが、後続のすべてのリクエストにも使用されます。 |
|
-methodsAreIdempotent |
このクラスタ固有のオプションは、-clusterableと組み合せて使用され、このクラスのメソッドが多重呼出し不変であることを示します。これにより、リモート・メソッドが呼び出される前に起きた障害かどうか確認できなくても、通信障害があれば、スタブはその復旧を試みることができるようになります。デフォルトでは(このオプションが使われなければ)、スタブは、リモート・メソッドが呼び出された前に起きたことが確認されている障害に関してだけ再試行します。 |
|
-iiop |
サーバーからIIOPスタブを生成します。 |
|
-iiopDirectory |
IIOPプロキシ・クラスが作成されるディレクトリを指定します。 |
|
-timeout |
remote-client-timeoutと組み合せて使用されます。 |
|
-commentary |
注釈を出力します。 |
|
-nomanglednames |
コンパイル時にリモート・クラスに固有のプロキシが作成されます。 |
|
-g |
デバッグ情報をクラスにコンパイルします。 |
|
-O |
最適化しながらコンパイルします。 |
|
-nowarn |
警告なしでコンパイルします。 |
|
-verbose |
冗長情報を出力してコンパイルします。 |
|
-verboseJavac |
Javaコンパイラによる冗長情報の出力を有効にします。 |
|
-nowrite |
.classファイルが生成されないようにします。 |
|
-deprecation |
非推奨となった呼出しについて警告します。 |
|
-classpath <path> |
使用するクラス・パスを指定します。 |
|
-J<option> |
Java実行時にフラグを渡すために使用します。 |
|
-keepgenerated |
WebLogic RMIコンパイラを実行するときに、生成したスタブ・クラスとスケルトン・クラスのソースを保持できます。 |
|
-disableHotCodeGen |
コンパイル時にスタブおよびスケルトン・クラスが作成されます。 |
weblogic.rmicを使って、レプリケートされないスタブをクラスタ内に生成することもできます。このようなスタブは、「固定」サービスと呼ばれています。これらのスタブは登録されたホストからのみ使用可能であり、透過的なフェイルオーバーやロード・バランシングは提供しません。固定サービスはレプリケートされたクラスタ全体のJNDIツリーにバインドされるので、クラスタ全体で使用可能になります。ただし、固定サービスをホストする各サーバーが故障しても、クライアントは別のサーバーにフェイルオーバーすることはできません。
デプロイメントの際には、appcとejbcによりRMIコンパイラを使用して各EJBコンテナ・クラスが実行され、スタブとスケルトンを動的に生成するのに必要なRMI記述子が作成されます。weblogic-ejb-jar.xmlファイルを使用して、iiop-security-descriptor要素を永続化できます。詳細は、『Oracle WebLogic Server WebLogic Enterprise JavaBeansのプログラミング』のweblogic-ejb-jar.xmlの要素に関する項を参照してください。