| Oracle® Fusion Middleware Oracle WebLogic Server RMI プログラマーズ ガイド 11g リリース 1 (10.3.1) B55530-01 |
|
![]() 戻る |
![]() 次へ |
以下の節では、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 にマップできる。
リモート クラスは、非リモート インタフェースも実装できる。
以下の節では、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 コンパイラのオプション
| オプション | 説明 |
|---|---|
|
-help |
オプションの説明を表示する。 |
|
-version |
バージョン情報を出力する。 |
|
-d <dir> |
コンパイルの対象 (最上位) ディレクトリを指定する。 |
|
-dispatchPolicy <queueName> |
サービスが 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 Fusion Middleware Oracle WebLogic Server Enterprise JavaBeans プログラマーズ ガイド』の「weblogic-ejb-jar.xml の要素」を参照してください。