JSPページおよびアプリケーション・モジュール・プールについて

このトピックでは、JSPページのビジネス・コンポーネント・データ・タグ・ライブラリについてのみ説明します。

注意: データ・タグ・ライブラリは、現在もサポートしていますが、新規プロジェクトに使用することはお薦めしません。 データ・バインドされた新しいJSPページを開発するには、式言語(EL: Expression Language)およびOracle ADFフレームワークの使用をお薦めします。 Oracle ADFフレームワークを介してビジネス・コンポーネントにアクセスするWebアプリケーションは、ステートフル・モードでのアプリケーション・モジュール・プールの自動処理を利用できます。 WebアプリケーションおよびOracle ADFフレームワークの詳細は、「Oracle ADFデータ・コントロールについて」を参照してください。

データ・バインドされたビジネス・コンポーネントJSPページは、Oracle ADF Business Componentsアプリケーション・モジュールのインスタンスを介してビジネス・コンポーネントにアクセスします。アプリケーション・モジュール・インスタンスについて、JSPセッション中にどのように割り当てられるか、状態が保存されるかどうか、データベースからのフェイルオーバー・サポートがあるかどうかを決定できます。 Oracle ADF Business Componentsでのアプリケーション・モジュール・プールの実装は、次の3つのモードをサポートします。

JSPページ用に選択するモードは、生成するWebアプリケーションのタイプに依存します。次のセクションではそのオプションと、ビジネス・コンポーネントでキャッシュされるデータにアクセスするWebアプリケーションで、それらのオプションがどのような役割を果たしているかについて説明します。

ビジネス・コンポーネント・データ・タグ・アプリケーションでのアプリケーション・モジュール状態管理について

ページの処理中に、ページに対するHTTPリクエストは、各アプリケーション・モジュールの限定されたインスタンス・プールを共有します。ステートレスJSPアプリケーションでは、アプリケーション・モジュールの特定のインスタンスへのアクセスは、ページ・リクエストの継続中のみ維持されます。 ステートレス・オプションが指定されている<jbo:ApplicationModule>データ・タグが処理された後は、アプリケーション・モジュール・インスタンスが解放されて、そのアプリケーション・モジュールのインスタンス・プールに戻される必要があります。

個々のJSPページまたはJSPアプリケーション全体にデフォルトのステートレス・オプションを選択した場合、データ・タグは、特定のHTTPセッションで新しいページが起動されるたびに、必ず同じアプリケーション・モジュール・インスタンスにアクセスするわけではありません。このため、ビュー・オブジェクトの(1回起動されたものが次に起動されるまで同じものが保持されている)行セットは使用できません。この動作は、JSPページがそれぞれ独立して動作しており、状態を維持する必要のある単一のタスクを表していない場合に望ましい動作です。JSPページの大多数がアプリケーション・モジュール・インスタンスをステートレスに解放できるようにすると、アプリケーション・モジュールの状態管理に伴うオーバーヘッドが削減され、JSPアプリケーションが可能なかぎり高レベルのパフォーマンスで稼働することが保証されます。

<jbo:ApplicationModule>データ・タグに対してステートフル・オプションを指定した場合も、JSPアプリケーションのデータ・タグは、そのアプリケーションが起動するたびに同じアプリケーション・モジュール・インスタンスにアクセスするとはかぎりません。 ただし、ステートレスJSPページとは異なり、ビジネス・コンポーネントは、アプリケーション・モジュールの解放時にアプリケーション・モジュールの状態を(passivationstoreパラメータの値に応じて)データベース、ファイルまたはメモリーに保存するため、ビュー・オブジェクトの行セットでは1回起動されたものが次に起動されるまで同じものが保持されます。ステートフル・モードは、次の場合に適しています。

ステートフル・モードでは、ビジネス・コンポーネントはデータベースのフェイルオーバーをサポートし、アプリケーション・モジュール・プールが効率的に使用されるようにします。 アプリケーション・モジュール・プール・マネージャは、現在位置や、あるJSPページから次のJSPページに渡される必要のあるすべての動的アプリケーション情報などのアプリケーション状態を管理します。 ステートフル・モードは、ユーザーがデータの変更を発行するかしないかに関係なく役立ちます。ビジネス・コンポーネントを利用して前のHTTPリクエストへの問合せの復元を管理するほうが、Business Components for Java APIを使用してこれらのタスクをプログラムで実行するよりも簡単で効率的です。

重要: ユーザーがデータをステートフル・モードまたはリザーブ・モードで変更することを許可する場合は、次の「ビジネス・コンポーネント・データ・タグ・アプリケーションのデータベース・トランザクションについて」に示すように、Commitデータ・タグを使用してデータベースに変更を送る必要があります。

<jbo:ApplicationModule>データ・タグに対してリザーブ・オプションを指定した場合は、データ・タグがアプリケーション・モジュールに接続されると、その後同じHTTPセッション中に任意のデータ・タグからそのアプリケーション・モジュールに接続した場合も、アプリケーション・モジュールの同じインスタンスが使用されます。これは、後続の接続が別のJSPページからの場合も、同じJSPページの新規の起動の場合も同じです。このモードは、ステートフル・アプリケーションと似ていますが、フェイルオーバーはサポートせず、アプリケーション・モジュールの再利用もできません。リザーブ・モードは、イントラネット・タイプの環境で使用すると便利です。

ビジネス・コンポーネント・データ・タグ・アプリケーションのデータベース・トランザクションについて

Webアプリケーションのユーザーがデータ・バインドされたビジネス・コンポーネントJSPページを介してデータを変更し、データを処理するためにJSPページで「送る」をクリックすると、Webアプリケーション・フレームワーク(基本的にOracle ADF Business Components)は、解放時のアプリケーション・モジュールの状態に応じて異なる方法でデータベース・トランザクションを処理します。

解放モード アプリケーション・モジュールの動作 データベース・トランザクションおよびユーザーの操作 アプリケーション・モジュール・ロックの動作

ステートレス

ページ処理リクエスト間でアプリケーション・モジュール・インスタンスの状態を保持しません。インスタンスは、JSPページの終了後すぐに解放されます。

注意: JSPアプリケーションに多数のユーザーが同時にアクセスすることが想定される場合に、このオプションを選択します。ステートレス・オプションでは、多くのユーザーがJSPアプリケーションに同時にアクセスできますが、ユーザーは、JSPページを起動(または再起動)するたびに新しいアプリケーション・モジュール・インスタンスに再接続されます。

ステートレス・モードでは、リクエスト間でアプリケーション・モジュールの状態が維持されないため、Webアプリケーション・フレームワークは変更を自動的にポストおよびコミットします。ユーザーは、ステートレス・モードでコミットを開始する必要はありません。JSPページの「コミット」および「ロールバック」は使用不可になります。

ステートレス・モードでは、ビジネス・コンポーネント・プロパティjbo.locking.modeoptimisticに設定することをお薦めします。別のユーザーが接続を再利用できるようにデータベース・トランザクションが常にロールバックされるため、即時ロックはステートレス・モードと互換性がありません。 このため、ロックが解放され、即時ロックを使用できなくなります。

ステートフル

ページ処理リクエスト間でアプリケーション・モジュール・インスタンスの状態をデータベースに保持します。これにより、アプリケーションは、単一のアプリケーション・モジュール・インスタンスを長期間使用せずにユーザーのデータを維持できます。

注意: ステートフル・モードは、HTTPセッションに対してフェイルオーバー・サポートを提供します。アプリケーション・モジュールで標準JDBC接続を使用する場合に適しています。

Webアプリケーション・フレームワークは、ページ・リクエストの終了時に、データ変更を含むアプリケーション・モジュールの状態をデータベースに単純に保存します。このモードでは、ユーザーは、プロセスのJSPページで「コミット」をクリックしてコミットを開始します。ユーザーが「コミット」をクリックすると、フレームワークはデータベースに対するポストおよびコミットを(まとめて1つのステップとして)すぐに開始します。オプションとして、ユーザーは「ロールバック」をクリックし、ポストを開始せずに変更がデータベースに入力されることを防ぐことができます。アプリケーション・モジュールの状態は保存されるため、ユーザーは、HTTPセッション中に任意の時点でコミットまたはロールバックを開始できます。

ステートフル・モードでは、ビジネス・コンポーネント・プロパティjbo.locking.modeoptimisticに設定することをお薦めします。別のユーザーが接続を再利用できるようにデータベース・トランザクションがロールバックされるため、即時ロックはステートフル・モードと互換性がありません。 このため、ロックが解放され、即時ロックを使用できなくなります。

リザーブ

ブラウザ・セッションの間アプリケーション・モジュール・インスタンスを割り当てます。インスタンスは、セッションの終了時にのみ解放されます。このモードは、主に特定のアプリケーション・モジュール定義との互換性を保つためのものです。このモードではフェイルオーバーはサポートされません。

注意: リザーブ・モードは、主にアプリケーション・モジュールで標準以外のJDBC接続定義が必要な場合に便利です。このモードではフェイルオーバーはサポートされません。

Webアプリケーション・フレームワークは、変更をデータベースに自動的にポストします(また、影響を受ける表に対してDMLで指定されたデータベース・トリガーを開始します)。 このモードでは、ユーザーがプロセスのJSPページで「コミット」または「ロールバック」をクリックする必要があります。アプリケーション・モジュール自体はHTTPセッション中は解放されないため、ユーザーは任意の時点でコミットまたはロールバックを開始できます。

リザーブ・モードでは、即時ロックを信頼して使用でき、プロパティjbo.locking.modepessimisticに設定できます。

Oracle9i JDeveloperのアプリケーション・モジュール・プールの命名

ビジネス・コンポーネントJSPページをデータ・タグで生成すると、データ・バインドされたJSPファイルにより次のようにアプリケーション・モジュールが定義されます。

<jbo:ApplicationModule releasemode="Stateful"
        definition="DataBindings.model_AppModuleDataControl"
        configname="bc4j1.model_AppModuleDataControl.Bc4j1Module9iAS"
        id="model_AppModuleDataControl" />        

Oracle9i JDeveloperからは、プールの名前にconfigname値が使用されます。 たとえば、次のJavaコードはアプリケーション・モジュール・プールの取得方法を示しています。

<%
  oracle.jbo.common.ampool.PoolMgr mgr = oracle.jbo.common.ampool.PoolMgr.getInstance();
  oracle.jbo.common.ampool.ApplicationPool pool = mgr.getPool("bc4j1.model_AppModuleDataControl.Bc4j1Module9iAS");
  pool.commitAndSyncCache(ds1.getRowSet().getApplicationModule());
%>        

個々のWebアプリケーションでのアプリケーション・モジュール使用の同期

単一サーバー上で同じビジネス・コンポーネントにアクセスする複数のWebアプリケーションをデプロイする場合、別のアプリケーションのビジネス・コンポーネントJSPページが同じアプリケーション・モジュールのインスタンスを共有できないようにします。 プロパティjbo.server.in_oc4jtrueに設定し、OC4Jインスタンス内でビジネス・コンポーネントが稼働していることを宣言すると、アプリケーション・プール・マネージャにより、アプリケーション・プール・インスタンスがアプリケーション間で共有されないようにできます。このプロパティを指定するには、OC4Jコマンドラインで次のように入力します。

java -D jbo.server.in_oc4j=true -jar oc4j.jar

マルチフレーム型Webアプリケーションでのアプリケーション・モジュール使用の同期

Webアプリケーションのユーザーが、1回のHTTPセッション中に異なるJSPページを介して同じアプリケーション・モジュール・インスタンスにアクセスする場合、ランタイム・エラーが発生する場合があります。これは、そのユーザーが異なるフレームでJSPページを実行したことが原因です。各フレームには、使用のために同じアプリケーション・モジュールが渡されるためです。したがって、あるビュー・オブジェクトがいずれかのJSPページで終了すると、もう一方のビュー・オブジェクトの結果セットも終了し、ランタイム例外が生成されます。

この問題が発生しないようにするには、次の2つの方法があります。

方法1:

  1. ビジネス・コンポーネント・プロジェクトに2つの同一ビュー・オブジェクトを生成します。
  2. 最初のビュー・オブジェクトを使用するJSPページを設定し、次のビュー・オブジェクトを使用するもう1つのJSPページを設定します。

方法2:

  1. ビュー・オブジェクトを1つのみ使用し、実行時には次のメソッドを使用してJSPページでデータをローカルに取得します。

    RowSet rs = vo.getRowSet();

    または

    Row[] rows = vo.getAllRowsInRange();

  2. これにより、データのローカル・コピーを繰返し処理できます。

JSPページおよびビジネス・コンポーネントについて
アプリケーション・モジュールおよびトランザクションについて
ビジネス・コンポーネント・データ・タグについて
JSPプロジェクトのビジネス・コンポーネント構成プロパティについて

JSPプロジェクトのビジネス・コンポーネント構成プロパティの定義
JSPページに対するビジネス・コンポーネント接続の作成
ビジネス・コンポーネント・データ・タグを使用したアプリケーション・モジュールの状態管理

リファレンス: ビジネス・コンポーネント・データ・タグ・ライブラリ

 

Copyright © 1997, 2004, Oracle. All rights reserved.