この章では、独自のRemote Method Invocation(RMI)/Oracle RMI(ORMI)プロトコルを 使用した、OC4Jコンテナ間でのEJBの相互起動を可能にする、Oracle Application Server
Containers for J2EE(OC4J)サポートについて説明します。
この章には、次の項目が含まれます。
■ RMI/ORMIの概要
■ RMI用のOC4Jの構成
■ HTTPを介したORMIトンネリングの構成
RMI/ORMI の概要 の概要 の概要 の概要
Java Remote Method Invocation(RMI)を使用すると、分散Javaベース間アプリケーションを
作成できます。この種のアプリケーションでは、リモートJavaオブジェクトのメソッドを、異 なるホスト上にあるものも含め、他のJava仮想マシン(JVM)から起動できます。
デフォルトでは、OC4JのEJBはOracle Remote Method Invocation(ORMI)プロトコルを介 してRMIコールをやり取りします。ORMIは、OC4J向けに最適化されたOracle独自のプロト コルです。
RMI/IIOPを使用するようにEJBを変換し、様々なEJBコンテナ間でEJBが相互に起動できる
ようにすることもできます。第6章「J2EEの相互運用性」を参照してください。
ORMI 拡張機能 拡張機能 拡張機能 拡張機能
ORMIはOC4J向けに拡張されており、次の機能が用意されています。
■ RMIメッセージ・スループットの増大
■ スレッド化のサポートの拡張
■ 同じ場所に配置されているオブジェクトのサポート
RMI メッセージ・スループットの増大 メッセージ・スループットの増大 メッセージ・スループットの増大 メッセージ・スループットの増大
ORMIを使用すると、OC4Jは高トランザクション・レートで処理できます。これは、Oracle
のSpecJ Application Serverベンチマークに反映されています。次のURLを参照してください。
http://www.spec.org/
一方向ORMIは、IIOPメッセージよりも小さいメッセージを使用して、このパフォーマンスを 達成します。メッセージが小さいため、送受信用の帯域幅が小さく、エンコードとデコードの 処理時間が短縮されます。ORMIのメッセージ・サイズは、クライアントとサーバーの間でや り取りされる状態情報の量を最適化することで、さらに小さくなります。ORMIを使用すると、
一部の状態はサーバー上でキャッシュされるため、RMIコールのたびに送信する必要がありま せん。フェイルオーバー時には、クライアント・コードにより新規サーバーに必要な状態情報 がすべて再送されるため、これはステートレスであるというRMI要件に違反しません。
スレッド化のサポートの拡張 スレッド化のサポートの拡張 スレッド化のサポートの拡張 スレッド化のサポートの拡張
ORMIはOC4Jのスレッド化モデルと密結合され、そのキューイング、プーリングおよびス テージング機能を最大限に利用します。
ORMIはクライアントごとに1つずつスレッドを使用します。マルチスレッド化されたクライ アントの場合、OC4Jは1つの接続を介して各コールを多重化します。ただし、OC4Jは各コー ルをシリアライズしないため、複数のスレッドが相互をブロックすることはありません。
この機能により、各クライアント(単一スレッドまたはマルチスレッド)からリモート・サー バーに対する接続は必ず1つになります。
同じ場所に配置されているオブジェクトのサポート 同じ場所に配置されているオブジェクトのサポート 同じ場所に配置されているオブジェクトのサポート 同じ場所に配置されているオブジェクトのサポート
同じ場所に配置されているオブジェクトの場合、RMI/ORMIは同じ場所に配置された使用例を 検出し、余分で不要なソケット・コールを回避します。
これは、JNDIレジストリが同じ場所に配置されている場合にも当てはまります。
注意 注意 注意
注意: OC4J 10gリリース2(10.1.2)の実装では、ロード・バランシングと
フェイルオーバーがサポートされるのはORMIの場合のみで、IIOPの場合は サポートされません。
RMI用のOC4Jの構成
クライアント・サイドの要件 クライアント・サイドの要件 クライアント・サイドの要件 クライアント・サイドの要件
EJBにアクセスするには、クライアント・サイドで次の手順を実行します。
1. oc4j_client.zipファイルを次のURLからダウンロードします。
http://www.oracle.com/technology/software/products/ias/devuse.html 2. クライアント・サイド・ディレクトリ(d:¥oc4jclientなど)に解凍します。
3. CLASSPATHにd:¥oc4jclient¥oc4jclient.jarを追加します。
oc4j_client.zipファイルには、クライアントに必要なJARファイル(oc4jclient.jar およびoptic.jarなど)がすべて含まれています。これらのJARファイルには、クライアン トの対話に必要なクラスが格納されています。クライアントに必要な他のJARファイルはすべ てoc4jclient.jarのマニフェスト・クラスパスで参照されるため、oc4jclient.jarのみ
をCLASSPATHに追加する必要があります。
このファイルをブラウザにダウンロードする場合は、特定のパーミッションを付与する必要が あります。『Oracle Application Server Containers for J2EE Enterprise JavaBeans開発者ガイド』
の「EJBアプリケーションのセキュリティの構成」の「ブラウザにおける権限の付与」を参照 してください。
RMI 用の 用の 用の 用の OC4J の構成 の構成 の構成 の構成
OC4JをRMI用に構成するには、次の2つの方法があります。
■ Oracle Enterprise Manager 10gを使用したRMIの構成
■ 手動によるRMIの構成
OC4Jの構成にはOracle Enterprise Manager 10gを使用することをお薦めします。
OC4JをRMI用に構成した後、5-7ページの「RMI構成ファイル」の説明に従ってRMIのプロ パティを指定する必要があります。
Oracle Enterprise Manager 10g を使用した を使用した を使用した を使用した RMI の構成 の構成 の構成 の構成
次のようにOracle Enterprise Manager 10gを使用して、RMIを使用するようにOC4Jを構成す ることをお薦めします。
1. RMIを介してアプリケーションにアクセスできるようにするOC4Jインスタンスにナビ ゲートします。
図5-1に、homeというOC4Jインスタンスを示します。
図 図 図
図5-1 Oracle Enterprise Manager 10gのシステム・コンポーネントのシステム・コンポーネントのシステム・コンポーネントのシステム・コンポーネント
2. OC4Jインスタンス名をクリックします。
3. 「管理管理管理管理」タブをクリックします。
4. 「サーバー・プロパティサーバー・プロパティサーバー・プロパティサーバー・プロパティ」をクリックします。
5. Oracle Application Server環境では、デフォルトでRMIは無効化されています。RMIを有
効化するには、図5-2のように「RMIポート」フィールドに値を入力して、OC4Jインスタ ンスごとに一意のRMIポート(またはポート範囲)を設定します。
図図
図図5-2 Oracle Enterprise Manager 10gのサーバー・プロパティのポート構成のサーバー・プロパティのポート構成のサーバー・プロパティのポート構成のサーバー・プロパティのポート構成
6. 「適用適用適用適用」をクリックします。
7. ブラウザの「戻る戻る戻る戻る」ボタンをクリックします。
8. 「レプリケーション・プロパティレプリケーション・プロパティレプリケーション・プロパティレプリケーション・プロパティ」をクリックします。
9. 図5-3に示すように「レプリケート状態レプリケート状態レプリケート状態レプリケート状態」チェック・ボックスを選択します。
「レプリケート状態レプリケート状態レプリケート状態レプリケート状態」チェック・ボックスの選択を解除すると、「EJBアプリケーションアプリケーション」アプリケーションアプリケーション 画面の他の属性は無視されます。
図 図 図
図5-3 Oracle Enterprise Manager 10gのレプリケーション・プロパティのレプリケーション・プロパティのレプリケーション・プロパティのレプリケーション・プロパティ
10. 図5-3に示すように「RMIサーバー・ホストサーバー・ホストサーバー・ホストサーバー・ホスト」フィールドを構成します。
サーバーがRMIリクエストを受け入れる特定のホスト名またはIPアドレスを入力します。
OC4Jサーバーは、この特定のホストからのRMIリクエストのみを受け入れます。
11.「適用適用適用適用」をクリックします。
注意 注意 注意
注意:「レプリケーション・プロパティ」ウィンドウの他の属性は、EJBクラ
スタリングにのみ適用されます。詳細は、『Oracle Application Server
Containers for J2EE Enterprise JavaBeans開発者ガイド』の「EJBクラスタリ
ング用のマルチキャスト・アドレスの構成」を参照してください。
RMI用のOC4Jの構成
手動による 手動による 手動による
手動による RMI の構成 の構成 の構成 の構成
OC4Jの構成にはOracle Enterprise Manager 10gを使用することをお薦めします。5-3ページの
「Oracle Enterprise Manager 10gを使用したRMIの構成」を参照してください。RMIを手動で 構成する方法を選択した場合は、次の手順を実行する必要があります。
1. プロパティ・ファイルserver.xmlを編集します。5-5ページの「server.xmlの編集」を 参照してください。
2. 環境に該当する構成ファイルを選択します。
■ OC4Jスタンドアロン環境の場合は、rmi.xmlファイルのみを編集します(5-5ページ の「rmi.xmlの編集」を参照)。
■ Oracle Application Server環境の場合は、rmi.xmlファイル(5-5ページの「rmi.xml
の編集」を参照)およびopmn.xmlファイル(5-7ページの「opmn.xmlの編集」を 参照)の両方を編集します。
server.xml の編集 の編集 の編集 の編集
server.xmlファイルの<rmi-config>要素で、RMI構成ファイルのパス名を指定する必要 があります。構文は次のとおりです。
<rmi-config path="RMI_PATH" />
通常、RMI_PATHは./rmi.xmlです。ファイル名は自由に設定できます。
Oracle Application Server環境の場合にのみ、Oracle Application Serverのコマンドラインで次
のコマンドを実行して変更を適用します。
dcmctl updateConfig
rmi.xml の編集 の編集 の編集 の編集
rmi.xmlファイルを編集してrmi-server要素を構成し、リモートRMIサーバーへの接続
(およびRMIサーバーからの接続の受入れ)に使用するホスト、ポート、ユーザー名およびパ スワードを指定します。
rmi.xmlファイルを構成する手順は、次のとおりです。
1. このローカルRMIサーバー用のrmi-server要素を追加します。
次に例を示します。
<rmi-server host="hostname" port="port">
</rmi-server>
<rmi-server>要素のユーザーが置き換えることができる属性は次のとおりです。
■ hostname: RMIサーバーがRMIリクエストを受け入れるホスト名またはIPアドレス。
この属性を省略すると、RMIサーバーはすべてのホストからのRMIリクエストを受け 入れます。
■ port: RMIサーバーがRMIリクエストをリスニングするポート番号。
注意 注意 注意
注意: Oracle Application Server環境では、opmnはopmn.xmlファイル
(5-7ページの「opmn.xmlの編集」を参照)に定義されているRMIポートの 範囲から、OC4JインスタンスごとにRMIポートを選択します。rmi.xml ファイルのrmi-server要素のport属性は無視されます。
Oracle Application Server環境で構成ファイルを手動で変更した結果は、
Oracle Application Serverのコマンドラインでdcmctl updateConfigコマ
ンドを実行して構成リポジトリを同期化するまで適用されません。