ヘッダーをスキップ
Oracle® Fusion Middleware Forms Servicesデプロイメント・ガイド
11gリリース1 (11.1.1)
B61388-05
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

14 パフォーマンス・チューニングに関する考慮事項

この章には、次の項が含まれています。

Oracle Forms ServicesとOracle Database Server間の接続のチューニングについては、この章では扱いません。

14.1 Forms Servicesの組込み最適化機能

Oracle Forms ServicesおよびJavaクライアントには、いくつかの最適化機能が含まれており、大きく次の項目に分類できます。

14.1.1 Forms Servicesの監視

Fusion Middleware Controlを使用してOracle Forms Servicesを監視し、次のメトリック情報を確認します。

  • Forms Servicesインスタンス

  • イベント

  • ユーザー・セッション

  • Forms Trace

14.1.1.1 Forms Servicesインスタンスの監視

「Forms」ホームページを使用して、Forms Servicesインスタンスのメトリックを監視します。

  1. Enterprise Manager Fusion Middleware Controlを起動します。

  2. Enterprise Manager Fusion Middleware Controlのメイン・ページで、監視するForms Servicesインスタンスへのリンクを選択します。

    Forms Servicesインスタンスの「Forms」ホームページに次の情報が表示されます。

    • Formsアプリケーション・インスタンスのステータス(稼働中、停止中、不明)

    • 監視されているForms ServicesインスタンスのURL。

    • Formsセッションの数

    さらに、次の詳細ページにもナビゲートできます。

    • パフォーマンス・サマリー

    • サーブレット・ログ

    • セッションの詳細

    • Web構成

    • 環境構成

    • トレース構成

    • ユーザー・セッション

    • JVM構成

    • JVMコントローラ

      「パフォーマンス・サマリー」ページでは、「メトリック・パレットの表示」を使用して、他のFormsのメトリックのグラフを動的にページに追加できます。複数のメトリックをオーバーレイ表示して、互いに比較することもできます。たとえば、2つのJVMコントローラで使用しているプライベート・メモリーを1つのグラフにドラッグ・アンド・ドロップして、これらを比較します。詳細は、Oracle Fusion Middlewareのパフォーマンス・ガイドを参照してください。

14.1.1.2 Formsイベントの監視

Enterprise Manager Fusion Middleware Controlを使用して、すべてのイベントまたは特定のイベントに対するトレースを有効にします。表14-1に、このページで実行できるタスクのリストを示します。

表14-1 Formsイベントの監視

タスク 関連項目

ユーザー・セッションのメトリックの監視

「Formsユーザー・セッションを表示するには:」


メトリック情報のソート

「Formsユーザー・セッションのリストをソートするには:」


メトリック情報の検索

「Formsユーザー・セッションを検索するには:」



14.1.2 Forms ServicesのWebランタイム・プーリング

Formsランタイム・プーリング(Formsランタイム・プレスタート)を使用すると、構成可能な数のアプリケーション・ランタイム・エンジンを使用する前に起動できます。ランタイム・プーリングにより、サーバーのピーク時に迅速に接続できるようになり、サーバー側のアプリケーションの起動時間が短縮されます。ランタイム・プーリングは、サーバー構成の窓口が小さいにもかかわらず、そこで多くのユーザーがFormsアプリケーションに接続するような状況で役立ちます。事前に起動されたランタイム・エンジンはすべて、同じ環境で実行され、同じアプリケーションを提供します。

14.1.2.1 事前起動パラメータの構成

Enterprise Manager Fusion Middleware Controlで表14-2に示されているパラメータを使用して、Forms Servicesのランタイム・プーリングを構成します。

表14-2 Formsランタイム・プーリング・パラメータ

パラメータ名 データ型 説明 デフォルト値

prestartRuntimes

ブール

trueに設定した場合にのみ、ランタイムの事前起動またはプーリングが有効になります。

false

prestartInit

整数

最初に作成される必要のあるランタイム・プロセスの数。

1

prestartTimeout

整数

このプール(構成セクション)の事前起動プロセスがすべて停止するまでの時間(分単位)。クライアント接続が行われると、ランタイム・プロセスは事前起動プールから削除されるため、停止されません。

0 (0に設定した場合、タイマーは起動しません)

prestartMin

整数

プールに存在する必要のあるランタイム・プロセスの最小数。

0

prestartIncrement

整数

事前に起動されるランタイム・プロセスの数がminRuntimes未満の場合に作成されるランタイム・プロセスの数。

0


prestartMinは、特定のアプリケーションに対してランタイム・プーリングがアクティブな間は常に存在する必要のある、事前に起動されるランタイムの最小数を定義します。最小値は、prestartInitパラメータに定義した値と同等またはそれ未満に設定してください。prestartMinパラメータは、いつでも変更可能で、アプリケーション・サーバーの再起動を必要としません。クライアントが事前起動済のランタイム・プロセスへの接続をリクエストし、このランタイム・プロセスがタイムアウトしていない場合、この新しいエントリが取得されます。プロセスがタイムアウトすると、アプリケーションはデフォルトの動作になり、最小のしきい値は維持されません。

各構成セクションで、これらのパラメータの値を指定できます。prestartRuntimes = trueエントリがあっても、関連する事前起動パラメータがない場合は、デフォルト値が使用されます。

ロード・バランシングが実現されたシステムに複数のOracle WebLogic管理対象サーバーがある場合は、前述のパラメータに指定された様々な値は、アプリケーションの全体ではなく、JVMごとに対応します。

14.1.2.2 ランタイム・プーリングの起動

管理者は、Enterprise Manager Fusion Middleware Controlを使用して、特定のアプリケーションでランタイム・プーリングが有効になるように構成できます。アプリケーション・サーバー(Oracle WebLogic管理対象サーバー)を起動すると、アプリケーションごとに構成した数のFormsランタイム・プロセスが事前に起動されます。

Formsサーブレットの初期化フェーズで構成ファイル(formsweb.cfg)が読み取られ、prestartRuntimesパラメータが有効になっているアプリケーションがサーバーによって事前に起動されます。

14.1.3 クライアント・リソース要件の最小化

Javaクライアントは、主にアプリケーション画面のレンダリングを行います。これには、埋込みアプリケーションのロジックはありません。Javaクライアントをロードすると、複数のフォームを同時に表示できます。すべてのOracle Formsアプリケーションに汎用Javaクライアントを使用すると、アプリケーションごとにカスタマイズされたJavaクライアントよりも、クライアント上のリソースが少なくて済みます。

Javaクライアントは、多くのJavaクラスで構成されています。これらのクラスは、スプラッシュ画面の表示、ネットワーク通信およびルック・アンド・フィールの変更などの、機能サブコンポーネントにグループ化されます。機能サブコンポーネントを使用すると、Forms DeveloperおよびJava仮想マシン(JVM)は、すべての機能クラスを一度にダウンロードしなくても、必要に応じて機能をロードできます。

14.1.4 Forms Servicesリソース要件の最小化

フォーム定義がFMXファイルからロードされる時、実行プロセスのプロファイルは次のものに要約できます。

  • 暗号化されたプログラム・ユニット

  • ボイラープレート・オブジェクト/イメージ

  • データ・セグメント

これらの中で、データ・セグメント・セクションのみがアプリケーションの指定したインスタンスに対して一意です。暗号化されたプログラム・ユニットとボイラープレート・オブジェクト/イメージは、どのアプリケーション・ユーザーにも共通しています。Forms Servicesでは、共有コンポーネントを物理メモリーにマップし、同じFMXファイルにアクセスするすべてのプロセス間でこれを共有します。

指定したFMXファイルをロードする最初のユーザーは、そのフォームに必要な全メモリー量を使用します。ただし、後続のユーザーの場合は必要なメモリー量が大幅に減らされているので、ローカル・データのエクステントにのみ依存します。共有コンポーネントをマップするこのメソッドを使用すると、指定したアプリケーションに必要な、ユーザーごとの平均メモリー量を減らすことができます。

14.1.5 ネットワーク使用量の最小化

帯域幅は重要なリソースであり、インターネット・コンピューティングの一般的な広がりとともに、インフラストラクチャにますます大きな負担を強いるようになっています。このため、アプリケーションはネットワークの容量を節約して使用することが重要です。

Oracle Forms Servicesは、メタデータ・メッセージを使用してJavaクライアントと通信します。メタデータ・メッセージは、実行対象のオブジェクトとその実行方法をクライアントに通知する名前と値のペアのコレクションです。パラメータのみをJavaクライアント上の汎用オブジェクトに送信することで、(同じ効果になるよう新規コードを送信した場合と比較して)通信量を約90%減らすことができます。

Oracle Forms Servicesでは、データ・ストリームを次の3つの方法で効率的に圧縮します。

  • 同じようなメッセージの集合(名前と値のペアのコレクション)を送信すると、2番目以降のメッセージには、前のメッセージとの相違点のみが含まれます。この結果、ネットワーク・トラフィックを大幅に減らすことができます。このプロセスは、message diff-ingと呼ばれます。

  • 同じ文字列がクライアント画面で繰り返されると(たとえば、同じ企業名が記載されている複数行のデータが表示される場合)、Oracle Forms Servicesはその文字列を一度のみ送信し、後続のメッセージではその文字列を参照します。参照によって文字列を渡すことで、帯域幅の効率は向上します。

  • データ型はその値に必要な最小のバイト数で送信されます。

14.1.6 ネットワークを介して送信されるパケットの効率の拡大

Forms Developerモデル内のトリガーを多数使用すると大きな効果がありますが、各トリガーにネットワークの往復が必要なため、待機時間の影響が大きくなります。待機時間は、アプリケーションのレスポンス時間に影響を与える最も重要な要因です。待機時間は、ネットワーク速度と同じではありません。ネットワーク速度には、時間単位あたりの転送可能ビットの測定が関連しますが、待機時間は、1ビットがあるエンドポイントから別のエンドポイントまで移動するのにかかる時間を表します。待機時間の影響をなるべく受けないようにする最もよい方法の1つは、JavaクライアントとForms Services間で、対話中に送信されるネットワーク・パケットの数を最小限にすることです。

Oracle Forms Servicesは、イベント・バンドルを通じてトリガー・イベントをグループ化することで、イベント・バンドルを実装します。イベント・バンドルは、2つのオブジェクト間をナビゲートしている間にトリガーされたすべてのイベントを集めて、それらを単一のパケットとしてOracle Forms Servicesに配布して処理します。

たとえば、ユーザーが項目Aから項目Bにナビゲートする場合(あるエントリ・フィールドから別のフィールドにタブする場合など)、PreトリガーとPostトリガーの範囲が起動対象となり、それぞれForms Services上での処理が必要です。ナビゲートによって複数のオブジェクトを横切る場合(離れているオブジェクトに対してマウスのクリックを行った場合など)、イベント・バンドルは通過されたすべてのオブジェクトからすべてのイベントを集めて、そのグループを単一のネットワーク・メッセージとしてOracle Forms Servicesに配信します。

14.1.7 クライアントでのアプリケーション画面の効率的なレンダリング

指定したフォーム内のすべてのボイラープレート・オブジェクトは、仮想グラフィック・システム(VGS)ツリーの一部です。VGSは、すべてのForms Developer製品に共通の図形サブコンポーネントです。VGSツリー・オブジェクトは、座標、カラー、線幅およびフォントなどの属性を使用して記述します。オブジェクトのVGSツリーをJavaクライアントに送信する場合、送信する属性のみが指定したオブジェクト・タイプのデフォルトと異なる属性になります。

イメージは圧縮されたJPEGイメージとして送信および格納されます。これにより、ネットワーク・オーバーヘッドとクライアントで必要なメモリー量の両方を減らすことができます。

リソースの最小化には、クライアントおよびサーバー・プロセスのメモリー・オーバーヘッドの最小化も含まれます。ネットワークを最適な状態で使用するには、帯域幅を最小に維持し、ネットワークの待機時間の影響も含まれるため、クライアントおよびOracle Forms Services間の通信で使用するパケット数を最小化することが必要です。

14.2 Oracle Forms Servicesアプリケーションのチューニング

アプリケーションの開発者は、Forms Servicesの組込みアーキテクチャの最適化機能により最大の利益を得ることができます。この章の後半では、多くのアプリケーションに影響を与える主要なパフォーマンスの問題、および開発者がアプリケーションをチューニングしてパフォーマンスを改善し、Forms Services機能を活用するための方法について説明します。

14.2.1 データ・サーバーに対するOracle Forms Servicesの位置

Forms Javaクライアントは、GUIオブジェクトを表示する役割のみを担います。Oracle Formsのすべてのロジックは、中間層のOracle Forms Servicesで実行されます。これには、データベースへのデータの挿入や更新、データベースからのデータの問合せ、データベースでのストアド・プロシージャの実行などが含まれます。そのため、アプリケーション・サーバーとデータベース・サーバー間の高速接続(高帯域幅、短い待機時間)が重要になります。

このサーバー間の対話はすべて、Forms Javaクライアントと通信することなく行われます。画面に変更があった場合のみ、クライアントとForms Services間で通信が行われます。これにより、Oracle Formsアプリケーションは、モデムや衛星を介した低速ネットワーク(待機時間が長いネットワーク)で実行することが可能です。

図14-1の構成では、Forms Servicesとデータベース・サーバーがデータ・センター内で並存する仕組みを示しています。

図14-1 OracleAS Forms Servicesとデータベース・サーバーの並存

データ・センター内に並存するForms Servicesとデータベース

14.2.2 アプリケーションの起動時間の最小化

アプリケーションをロードするためにかかる時間は、第一印象として重要であり、またどのユーザーにとっても主要な基準となります。起動時間は、オーバーヘッドと見なされます。また、今後のパフォーマンスを期待させるものでもあります。業務でクライアント・テクノロジを使用する場合、クライアント・コードのロードに必要な追加のオーバーヘッドは、ユーザーにあまりよい影響を与えません。したがって、可能なかぎりロード時間を最小化することが重要です。

Oracle Formsアプリケーションを要求した後、アプリケーションを使用できる状態にするまでにはいくつかの手順を実行する必要があります。

  1. Java仮想マシン(JVM)を起動します。

  2. すべての初期Javaクライアント・クラスをロードし、クラスのセキュリティを認証します。

  3. スプラッシュ画面を表示します。

  4. フォームを次に示す方法で初期化します。

    1. 必要に応じて、追加のJavaクラスをロードします。

    2. クラスのセキュリティを認証します。

    3. ボイラープレート・オブジェクトとイメージをレンダリングします。

    4. 初期画面ですべての要素をレンダリングします。

  5. スプラッシュ画面を削除します。

  6. フォームを使用できます。

アプリケーション開発者は、JVMの起動にかかる時間についてほとんど何も行うことができません。ただし、Java配置モデルおよびOracle Forms Developer Javaクライアントの構造では、開発者はどのJavaクラスをどのようにロードするかを決定できます。これにより、Javaクラスに必要なロード時間を最小化します。

Javaクライアントには、基本機能のクラス(ウィンドウを開くなど)と特定の表示オブジェクトの追加クラス(LOV項目など)のコア集合が必要です。これらのクラスはサーバーに始めから常駐している必要がありますが、次の方法を使用すると、これらのクラスをクライアントのJVMにロードするために必要な時間を短縮できます。

14.2.2.1 Javaファイルの使用

JavaはJavaアーカイブ(JAR)メカニズムを提供して、クライアントにネットワークを介して効率的な配布を行うために、クラスをまとめてグループ化し、圧縮(Zip形式)することができるファイルを作成します。このファイルがクライアントで使用されると、今後の使用のためにキャッシュされます。

JARファイルのサイズを2倍にすることもできます。frmall.jarを使用してこれを行うと、約700Kを節約できます。オラクル社のPlug-inでは、そのファイルには接尾辞jarjarが付きます。

次の項では、一般的なデプロイメントのシナリオをサポートするためにOracle Forms Servicesが提供する事前構成済Jarファイルについて説明します。

14.2.2.2 オラクル社のJava Plug-inの使用方法

frmall.jarには、Java Plug-inでの実行に必要なクラスがすべて含まれています。

1つ以上のJARファイルを指定するには、Forms構成ファイル(formsweb.cfg)で指定する構成セクションのarchive設定を使用します。次に例を示します。

[MyApp]
archive=frmall.jar

14.2.2.3 キャッシュの使用

オラクル社のJava Plug-inは、Oracle Forms ServicesでのJarファイルのキャッシュをサポートします。JVMがクラスを参照する場合、最初にローカルのクライアント・キャッシュにあるキャッシュ済JARファイル内にクラスが存在するかどうかを確認します。クラスがキャッシュ内に存在する場合、JVMはサーバーのJARファイルをチェックして、キャッシュ内のJARファイルより新しいバージョンが存在するかどうかを確認します。新しいバージョンが存在しない場合は、サーバーからではなくローカルのクライアント・キャッシュからクラスはロードされます。

キャッシュは、効率性を最大化するために適切なサイズにします。キャッシュ・サイズが小さすぎると、有効なJARファイルが上書きされてしまう場合があります。その結果、アプリケーションを再度起動すると、別のJARファイルのダウンロードが必要になります。デフォルトのキャッシュ・サイズは20MBです。このサイズは、アプリケーションを正常に実行した後のキャッシュ容量のサイズと比較する必要があります。

JARファイルはロード元のホストに関連してキャッシュされます。このため、ロード・バランシング・アーキテクチャを使用している場合、異なるサーバーからの同一のJARファイルがキャッシュされる可能性があります。JARファイルを中央に置き、ロード・バランシング構成の各サーバーでそれらを参照することで、開発者は各JARファイルの1つのコピーのみがクライアントのキャッシュでメンテナンスされていることを確認できます。この方法を使用すると、JARファイル内の特定のクラスに署名して、ロード元のサーバー以外のサーバーに接続を戻せるようにする必要があります。Oracleが提供するJARファイルでは、事前にクラスに署名してあります。

14.2.3 必須ネットワーク帯域幅の削減

開発者は、Formsが自動的に実行する差分メッセージングと呼ばれるデータ・ストリーム圧縮を最大限利用できるようにアプリケーションを設計できます。つまりFormsは、メッセージ間で異なる情報のみを送信する差分メッセージングを使用して、データ・ストリーム圧縮を送信します。次のステップを実行すると、メッセージ間の相違部分を削減できます。

  • オブジェクト間の類似点を活用。似たようなオブジェクトを使用すると、(ユーザーに視覚的によりアピールする上に)message diff-ingの効率性が向上します。次の手順で、オブジェクト間の一貫性が図られます。

    • プロパティのデフォルト値を受け入れ、オブジェクトに必要な属性のみを変更します。

    • スマート・クラスを使用して、オブジェクトのグループを記述します。

    • 視覚属性の違いが少なくなるようにルック・アンド・フィールを整えます。

  • ボイラープレート・テキストの使用を削減。開発者として、可能なかぎり、ボイラープレート・テキストではなくプロンプト項目プロパティを使用してください。Forms Developer 6.0以降には、プロンプトの関連付け機能が含まれており、この機能を使用して、ボイラープレート・テキストを指定した項目のプロンプトとして再設計できます。

  • ボイラープレート項目(円弧、円、多角形など)の使用を削減。指定したフォームのすべてのボイラープレート項目をフォームの初期化時にロードします。ボイラープレート項目をロードしてクライアント上でリソースを使用するには、表示の有無にかかわらず時間がかかります。共通のボイラープレート項目(矩形と線)は最適化されます。このため、アプリケーションをこれらの基本的なボイラープレート項目に制限すると、起動時間を短縮しながらネットワーク帯域幅とクライアント・リソースを削減できます。

  • ナビゲーションを最小に維持。イベント・バンドルは、2つまたはそれ以上のオブジェクト間にナビゲーションが及ぶ場合でも、ナビゲーション・イベントが完了するたびに送信されます。デフォルト値が受け入れられる場合は、フィールド間をナビゲートする必要がないようにフォームを設計します。フォームは、ユーザーが入力を終了したらスムーズに終了できるようにし、すべての追加のナビゲーション・イベントが1つのイベント・バンドルとして実行されるようにします。

  • 初期画面を表示する時間を短縮。Javaクライアントは必須クラスをロードすると、初期画面を表示する前に、表示するすべてのオブジェクトをロードして初期化する必要があります。項目数を最小限に抑えることで、初期画面はより迅速に表示されます。初期画面を表示する時間を短縮する方法は次のとおりです。

    • アプリケーションのログイン画面を提供して、最初に表示されるオブジェクトを(タイトル、小さなロゴ、ユーザー名およびパスワードなどに)制限します。

    • Formの初回の表示時は、隠された要素はすぐには必要とされません。次のキャンバス・プロパティを使用します。

      エントリでレイズ=はい(キャンバスのみ)

      VISIBLE = NO

      タブ・キャンバスでは、1つのシートのみ表示されますが、いくつかのシートで構成されていることに注意してください。タブ間で応答を切り替える場合、キャンバス上のすべてのシートに対するすべての項目がロードされます。この中には初期タブの後ろに隠れている項目も含まれます。この結果、タブ・キャンバスをロードして初期化するためにかかる時間は、初めに可視できるオブジェクトのみではなく、キャンバス上のすべてのオブジェクトに関連します。


      ヒント:

      タブ・キャンバスを使用している場合、when-tab-page-changedトリガーでは積み重ねられたキャンバスを使用し、右のキャンバスを表示します。最初の画面に表示されないすべてのキャンバスでは、プロパティRAISE ON ENTRY = YESおよびVISIBLE = NOを設定してください。


  • MENU_BUFFERINGを使用不可に設定。デフォルトでは、MENU_BUFFERINGはtrueに設定されます。これは、メニューに対する変更内容が、変更されたメニューの完全な再送信が必要となるような今後の同期化イベントのためにバッファされることを意味します(ほとんどのアプリケーションでは、メニューに対し複数の変更を同時に行うか、まったく行わないかのどちらかです。したがって、クライアント側のメニューを更新する最も効率のよい方法は、すべてのメニューを一度に送信することです)。ただし、メニューに最小限の変更しか加えないアプリケーションもあります。この場合、変更するたびに変更内容を送信した方が効率的です。これは、次の文を使用して実行できます。

    Set_Application_Property (MENU_BUFFERING, 'false');
    
    
メニューのバッファリングは、LABEL、ICON、VISIBLEおよびCHECKEDのメニュー・プロパティにのみ適用されます。ENABLE/DISABLEイベントは常に送信されますが、メニュー全体の再送信は行われません。

14.2.4 パフォーマンスを改善するためのその他の方法

次に示す方法を使用すると、アプリケーションの実行に必要なリソースをさらに削減できます。

  • タイマーの検証とJavaBeansでの置換。タイマーを起動すると、非同期イベントが生成されます。キュー内に他のイベントがない場合もあります。また、タイマーのサイズはほんの数バイトですが、毎秒実行されるので1分間で60パケットが生成され、通常の営業時間内ではおよそ30,000パケットがネットワークへ送出されます。タイマーの多くは時計やアニメーションを提供するために使用されます。これらのコンポーネントを、Forms Servicesやネットワークの介入がなくても同じ効果をもたらす、自己完結型のJavaBeansと置換します。

  • クライアント上での入力項目の妥当性チェックについて考慮。When-Validate-Itemトリガーを使用して項目に対する入力を処理することはよく行われます。トリガー自体は、Forms Servicesで処理されます。プラガブルなJavaコンポーネントを使用して、標準のクライアント項目(テキスト・ボックスなど)のデフォルト機能を置換することを考慮する必要があります。次に、日付や最大/最小値などの項目の妥当性チェックを項目内に含めます。この方法を使用すると、より複雑な、入力の自動フォーマットなど((XXX) XXX-XXXXの書式を持つ電話番号など)のアプリケーション固有の妥当性チェックを行うことができます。

  • アプリケーションを、大きな1つのフォームではなく多数の小さいフォームに縮小。アプリケーションを細かく分けることによって、Forms Servicesからロードおよび初期化されるオブジェクトをユーザーのナビゲーションで制御できます。大きなフォームの場合、オブジェクトの初期化中にアプリケーションが遅延して、アプリケーションの多くが参照できなくなるという危険性があります。フォームをまとめて連鎖する場合は、ビルトインのOPEN_FORMおよびNEW_FORMを使用することを検討します。

    • OPEN_FORMを使用すると、コールしているフォームはクライアントとサーバーにオープンされたままの状態になるので、OPEN-FORMによる追加のフォームはクライアントとサーバー両方の多くのメモリーを消費します。ただし、フォームが別のユーザーによって使用中である場合、サーバーのメモリー使用量は、データ・セグメントにのみ制限されます。ユーザーが初期フォームに戻ると、フォームはすでにローカル・メモリー内に常駐し再表示の場合でもネットワーク・トラフィックは発生しません。

    • NEW_FORMを使用すると、コールしているフォームはクライアントとサーバー上でクローズされて、すべてのオブジェクト・プロパティが破棄されます。このため、サーバーおよびクライアント上で使用するメモリー量は少なくなります。初期フォームに戻るには、クライアントに再度ダウンロードすることが必要ですが、この場合ネットワーク・リソースが必要で、起動時間が遅延します。初期フォーム(ログイン・フォームなど)を再度コールしないかぎり、OPEN_FORMを使用して、次のフォームをアプリケーションで表示します。

  • 不要なグラフィックとイメージの削除。アプリケーションに表示されるイメージ項目と背景イメージの数を可能なかぎり減らします。アプリケーション・ユーザーに対してイメージが表示されるたびに、イメージはアプリケーション・サーバーからユーザーのWebブラウザにダウンロードする必要があります。Webアプリケーションで会社のロゴを表示する場合には、アプリケーションの起動時にダウンロードされるHTMLファイルに会社のロゴ・イメージを含めてください。会社のロゴを背景イメージとしてアプリケーションに挿入するかわりにこれを行ってください。会社ロゴを背景イメージとして指定すると、データベースまたはファイルシステムから検索して、ユーザーのコンピュータにダウンロードするトラフィックが繰返し発生します。

14.3 Web CacheとFormsの統合

Oracle Web Cacheは、Oracle Formsアプリケーションでのロード・バランサとして使用できます。セッションの間、Formsクライアントはサーバー・プロセスの同一インスタンスと通信できる必要があります。Formsアプリケーションはステートフルであるため、セッション・バインド機能を使用してWeb Cacheを構成し、ステートフルなロード・バランシングを実現する必要があります。

図14-2 Web Cacheのロード・バランシング

Web Cacheのロード・バランシング

図14-2は、単一のWeb Cacheインスタンスによって2つのアプリケーション・サーバー層のロード・バランシングが実現されている設定を前提としています。この状態は次のように説明できます。

  1. Oracle Web CacheインスタンスはホストAで実行されている。

  2. ホストB上にあるOracle HTTP ServerインスタンスとOracle WebLogic管理対象サーバーは、Oracle FormsアプリケーションDを実行している。

  3. ホストC上にあるOracle HTTP ServerインスタンスとOracle WebLogic管理対象サーバーは、Oracle FormsアプリケーションDを実行している。


注意:

Oracle HTTP ServerとOracle WebLogic管理対象サーバーは他にも存在する場合がありますが、ここでは説明を簡略化するために2つのインスタンス・ペアのみを取り上げます。Oracle FormsアプリケーションではOracle WebLogic Serverのアクティブなフェイルオーバーを利用できないため、Oracle HTTP ServerとOracle WebLogic管理対象サーバーはクラスタ化およびアクティブなフェイルオーバー用には構成されません。


前提条件 

  1. Forms J2EEアプリケーションのデプロイメント・ディスクリプタ(weblogic.xml)を変更して、デフォルトのセッション追跡エントリをオーバーライドし、セッション追跡のCookieを有効にします。詳細は、第5.2.4項「Forms J2EEアプリケーションのデプロイメント・ディスクリプタの変更」を参照してください。

    デプロイメント・プランを変更します。次はデプロイメント・プランの例で、追加したエントリを太字で強調表示しています。

    <?xml version='1.0' encoding='UTF-8'?>
    <deployment-plan xmlns="http://xmlns.oracle.com/weblogic/deployment-plan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/deployment-plan http://xmlns.oracle.com/weblogic/deployment-plan/1.0/deployment-plan.xsd" global-variables="false">
      <application-name>formsapp</application-name>
      <variable-definition>
        <variable>
          <name>vd-/scratch/t_work/Oracle/Middleware/as_1/forms</name>
          <value>/scratch/t_work/Oracle/Middleware/as_1/forms</value>
        </variable>
        <variable>
          <name>vd-/scratch/t_work/Oracle/Middleware/user_projects/domains/ClassicDomain/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_11.1.1/config/forms</name>
          <value>/scratch/t_work/Oracle/Middleware/user_projects/domains/ClassicDomain/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_11.1.1/config/forms</value>
        </variable>
        <variable>       
           <name>Frmapp_url-rewriting-enabled_variable</name>      
           <value>false</value>    
        </variable>
        <variable>       
           <name>Frmapp_cookies-enabled_variable</name>      
           <value>true</value>    
        </variable>
        <variable>       
           <name>Frmapp_cookie-http-only_variable</name>      
           <value>false</value>    
        </variable>
      </variable-definition>
      <module-override>
        <module-name>formsapp.ear</module-name>
        <module-type>ear</module-type>
        <module-descriptor external="false">
          <root-element>weblogic-application</root-element>
          <uri>META-INF/weblogic-application.xml</uri>
        </module-descriptor>
        <module-descriptor external="false">
          <root-element>application</root-element>
          <uri>META-INF/application.xml</uri>
        </module-descriptor>
        <module-descriptor external="true">
          <root-element>wldf-resource</root-element>
          <uri>META-INF/weblogic-diagnostics.xml</uri>
        </module-descriptor>
      </module-override>
      <module-override>
        <module-name>formsweb.war</module-name>
        <module-type>war</module-type>
        <module-descriptor external="false">
          <root-element>weblogic-web-app</root-element>
          <uri>WEB-INF/weblogic.xml</uri>
          <variable-assignment>
            <name>vd-/scratch/t_work/Oracle/Middleware/as_1/forms</name>
    <xpath>/weblogic-web-app/virtual-directory-mapping/[url-pattern="java/*"]/local-path</xpath>
          </variable-assignment>
          <variable-assignment>
            <name>vd-/scratch/t_work/Oracle/Middleware/as_1/forms</name>
    <xpath>/weblogic-web-app/virtual-directory-mapping/[url-pattern="webutil/*"]/local-path</xpath>
          </variable-assignment>
          <variable-assignment>
            <name>vd-/scratch/t_work/Oracle/Middleware/user_projects/domains/ClassicDomain/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_11.1.1/config/forms</name>
    <xpath>/weblogic-web-app/virtual-directory-mapping/[url-pattern="registry/*"]/local-path</xpath>
          </variable-assignment>
          <variable-assignment> 
            <name>Frmapp_url-rewriting-enabled_variable</name>
            <xpath>/weblogic-web-app/session-descriptor/url-rewriting-enabled </xpath>
          </variable-assignment>
                  <variable-assignment>
            <name>Frmapp_cookies-enabled_variable</name>
            <xpath>/weblogic-web-app/session-descriptor/cookies-enabled</xpath>
          </variable-assignment>
                  <variable-assignment>
            <name>Frmapp_cookie-http-only_variable</name>
           <xpath>/weblogic-web-app/session-descriptor/cookie-http-only</xpath>
          </variable-assignment>
        </module-descriptor>
        <module-descriptor external="false">
           <root-element>web-app</root-element>
           <uri>WEB-INF/web.xml</uri>
        </module-descriptor>
      </module-override>
    </deployment-plan>
    
  2. 次のように、仮想ホストのディレクティブをforms.confに追加します。

    <VirtualHost *:8888>
                         ServerName hostA:8090
         UseCanonicalName On
         CookieTracking On
         WLCookieName cookieName
    #
    # virtual mapping for the /forms/html mapping.
    #
    RewriteEngine on
    RewriteRule ^/forms/html/(..*) /workaroundhtml/$1 [PT]
    AliasMatch ^/workaroundhtml/(..*) ". . . . . . /config/FormsComponent/forms/html/$1"
    
    <Location /forms>
            SetHandler weblogic-handler
            WebLogicCluster    HostB:9001
            DynamicServerList OFF
    </Location>
    </VirtualHost>
    

    注意:

    ServerNameエントリには、Web Cacheのホスト名とポート番号が含まれている必要があります。WLCookieNameエントリの値は、ホスト間で一意である必要があります。たとえばcookieHostAcookieHostBなどです。VirtualHostディレクティブのポート番号8888は、OHS HTTPポートに対応しています。実際のOHS HTTPポートの値を取得するには、$ORACLE_INSTANCE/bin/opmnctl status -lを使用します。


  3. アプリケーション・サーバー・ホスト(ホストBとホストC)のFMWパッチ・セットのバージョンが同一である必要があります。

  4. Formsの構成ファイルがアプリケーション・サーバー・ホスト間で同期されることを確認します。これは、すべてのアプリケーション・サーバー・ホスト間で一致するエントリをFormsの構成ファイル(formsweb.cfgdefault.envRegistry.datなど)内に作成する必要があることを意味します。

Web Cacheでセッション・バインドを構成するには:

  1. 『Oracle Fusion Middleware Oracle Web Cache管理者ガイド』ソフトウェア・ロード・バランサとしてのOracle Web Cacheの構成に関する項に従って、ホストAで実行するWeb Cacheを設定します。

  2. 『Oracle Fusion Middleware Oracle Web Cache管理者ガイド』オリジン・サーバー設定の指定に関する項に従って、アプリケーション・サーバー、ホストBおよびホストCをオリジン・サーバーとして追加します。

    Ping URLフィールドにはURL/forms/lservletを指定します。

  3. 『Oracle Fusion Middleware Oracle Web Cache管理者ガイド』オリジン・サーバーへのサイト定義のマッピングに関する項に従って、順序付けされたサイトのマッピングをオリジン・サーバー、ホストBおよびホストCに作成します。

  4. 『Oracle Fusion Middleware Oracle Web Cache管理者ガイド』セッション・バインディングの構成に関する項に従って、Web Cacheのセッション・バインディングを構成します。

    「Set-Cookieを使用したCookieに基づくセッション・バインディング」オプションを選択します。

設定をテストするには: 

  1. ブラウザを使用して、Web Cacheホストを指定し、Oracle FormsアプリケーションDにアクセスします。アプリケーションが適切に動作することを確認します。ブラウザ・ウィンドウは開いたままにします。

  2. OHSアクセス・ログを使用して、リクエストを処理したOracle HTTP ServerとOracle WebLogic管理対象サーバーを識別します。たとえば、これがホストBであるとすると、そのホスト上のOracle HTTP ServerとOracle WebLogic管理対象サーバーをシャットダウンします。これで、ホストCで実行されるOracle HTTP ServerとOracle WebLogic管理対象サーバーにのみアクセスできるようになります。

  3. Oracle Formsクライアントを実行している同じブラウザを使用して、Oracle FormsアプリケーションDに再度アクセスします。リクエストは失敗し、Formsクライアントはセッションを失います。Oracle Formsセッションの状態は、Oracle WebLogic管理対象サーバー間でレプリケートされません。

  4. 次に、ブラウザのCookieを消去し、ブラウザ・ウィンドウを開きます。Web Cacheホストを指定し、Oracle FormsアプリケーションDにアクセスします。Web CacheはホストCで実行される残りのOracle HTTP ServerとOracle WebLogic管理対象サーバーにリクエストをダイレクトします。アプリケーションが適切に動作することを確認します。

  5. ホストBでOracle HTTP Server/WebLogic管理対象サーバーを再起動します。ブラウザを使用して、Web Cache Managerにログインします。

  6. Oracle Enterprise Managerのナビゲータ・パネルで、「Webキャッシュ」を選択し、「ホーム」ページに移動します。

  7. 「Webキャッシュ」ホーム・ページで、「オリジン・サーバー」の下にあるホストBのチェック・ボックスが選択されていることを確認します。


注意:

ロード・バランシングのシナリオと、クラスタ化されたWeb Cacheの設定の詳細は、『Oracle Fusion Middleware高可用性ガイド』を参照してください。Web Cacheの詳細は、『Oracle Fusion Middleware Oracle Web Cache管理者ガイド』を参照してください。