WebLogic RMI プログラマーズ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

WebLogic RMI コンパイラの使い方

以下の節では、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 の 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 コンパイラのその他の機能

WebLogic RMI コンパイラには、他にも以下のような機能があります。

 


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 コンパイラのオプション
オプション
説明 :
-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 要素を永続化できます。詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「2.1 の weblogic-ejb-jar.xml の要素」を参照してください。


  ページの先頭       前  次