ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server RMIのプログラミング
11gリリース1 (10.3.6)
B61626-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

4 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プログラミング・モデルが拡張されます。第7章「RMI over IIOPの使用」を参照してください。

WebLogic RMIコンパイラの機能

以下の節では、このリリースのWebLogic RMIコンパイラの機能について説明します。

ホット・コード生成

rmicを実行すると、WebLogic Serverのホット・コード生成機能により、メモリー内にサーバー・クラス用のバイトコードが自動生成されます。バイトコードは、リモート・オブジェクトの必要に応じて、動的に生成されます。現在のバージョンのWebLogic Serverでは、weblogic.rmicを実行しても、オブジェクトのスケルトン・クラスは生成されません。

ホット・コード生成では、クライアント上の動的プロキシからのリクエストを処理する、サーバー側のクラスのバイト・コードを作成します。動的に生成されたバイト・コードはクライアント・リクエストをデシリアライズし、実装クラスに対して実行します。次に結果をシリアライズしてクライアントのプロキシへ送り返します。クラスの実装は、Weblogic ServerのWeblogic RMIレジストリ内の名前に関連付けられます。

プロキシの生成

Weblogic RMIコンパイラでは、デフォルトの動作でリモート・インタフェース用のプロキシとそのプロキシを共有するリモート・クラス用のプロキシが作成されます。プロキシは、リモート・オブジェクトのクライアントが使用するクラスです。RMIでは、動的に生成されたバイトコードとプロキシ・クラスが使用されます。

たとえば、example.hello.HelloImplcounter.example.CiaoImplは、単一のプロキシ・クラスとバイトコード、つまりリモート・オブジェクト(このケースではexample.hello.Hello)によって実装されたリモート・インタフェースに適合するプロキシで表わされます。

リモート・オブジェクトが複数のインタフェースを実装する場合、プロキシの名前とパッケージは1組のインタフェースをエンコードすることによって決定されます。WebLogic RMIコンパイラの-nomanglednamesというオプションを使って、デフォルトの動作をオーバーライドできます。このオプションを使用すると、コンパイル時にリモート・クラスに固有のプロキシが作成されます。クラス固有のプロキシが検出された場合は、そのプロキシはインタフェース固有のプロキシに優先します。

さらに、WebLogic RMIのプロキシ・クラスでは、プロキシはfinalではありません。同じ場所に配置されたリモート・オブジェクトへの参照は、プロキシではなくオブジェクトそのものへの参照です。

動的プロキシ・クラスは、クライアントに渡されるシリアライズ可能クラスです。クライアントは、WebLogic RMIレジストリでクラスをルックアップすることによって、そのクラスのプロキシを取得します。クライアントは、あたかもローカルなクラスであるかのようにプロキシのメソッドを呼び出します。プロキシは、リクエストをシリアライズしてWebLogic Serverに送ります。

WebLogic RMIコンパイラのその他の機能

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

  • リモート・メソッドのシグネチャはRemoteExceptionをスローする必要がありません。

  • リモートの例外はRuntimeExceptionにマップできます。

  • リモート・クラスは、非リモート・インタフェースも実装できます。

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の実行スレッドを取得するために使用する、構成済の実行キューを指定します。詳細は、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の要素に関する項を参照してください。