ナビゲーションをスキップ

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 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 と組み合わせた場合だけ使用可能。このクラスのメソッドが多重呼び出し不変であることを示す。これにより、リモート メソッドが呼び出される前に起きた障害かどうか確認できなくても、通信障害があれば、スタブはその復旧を試みることができるようになる。デフォルトでは (このオプションが使われなければ)、スタブは、リモート メソッドが呼び出された前に起きたことが確認されている障害に関してだけ再試行する。

-timeout

remote-client-timeout と一緒に使用される。

-iiop

サーバから IIOP スタブを生成する。

-iiopDirectory

IIOP プロキシ クラスが作成されるディレクトリを指定する。

-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.0 の weblogic-ejb-jar.xml の要素」を参照してください。

 


スタブとスケルトンから動的プロキシとバイトコードへの移行

WebLogic Server 6.1 より前のバージョンでは、weblogic.rmic を実行すると、クライアントにはスタブが、サーバサイドにはスケルトン コードが生成されました。今回のバージョンでは、クライアント サイドで生成されていたスタブは動的プロキシに、サーバサイドのスケルトンはバイトコードに置き換えられています。これにより、クラスの生成が不要になりました。

バージョン 6.1 より前の WebLogic RMI オブジェクトをバージョン 6.1 以降の WebLogic Server で実行できるようにするには、それらのオブジェクトに対して weblogic.rmic を再度実行します。これにより、必要なプロキシおよびバイトコードが生成され、デプロイ済みの RMI オブジェクトが有効になります。動的プロキシの詳細については、「プロキシの生成」を参照してください。

リモート オブジェクトが EJB の場合は、weblogic.ejbc を再度実行すると、バージョン 6.1 より前の WebLogic Server オブジェクトがバージョン 6.1 以降で動作するようになります。weblogic.ejbc の使用方法の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「ejbc」を参照してください。

リモート オブジェクトに対して、-oneway、-clusterable、-stickToFirstServer のうち 1 つまたは複数のパラメータを指定して weblogic.rmic を再度実行するか、または weblogic.ejbc を再度実行すると、そのオブジェクトのデプロイメント記述子ファイルが生成されます。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次