Oracle® Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発 12c (12.2.1.2.0) E82918-03 |
|
前 |
次 |
この章の内容は次のとおりです。
Oracle ADFは、大規模なエンタープライズ・アプリケーションの作成に使用されます。アプリケーションを高可用性で実行する場合は、高可用性とは何かを理解する必要があります。Fusion Webアプリケーションの高可用性とは、サービスを中断することなくユーザーがシステムにアクセスできることを指します。
Fusion Webアプリケーションの高可用性は、必要な場合にアプリケーションを使用可能にする機能です。
高可用性環境では、ユーザーがサービスを失わずにアプリケーションにアクセスできます。Fusion Webアプリケーションを高可用性環境にデプロイすることで、アプリケーションの停止時間つまり使用不可の時間が最小化され、アプリケーションの稼働時間つまり使用可能な時間が最大化されます。
高可用性は、システムとコンポーネントに冗長性を持たせることによって実現されます。高可用性ソリューションは、冗長性のレベルによってアクティブ/アクティブ・ソリューションとアクティブ/パッシブ・ソリューションに分類されます。
アクティブ/アクティブ・ソリューションは、複数のアクティブなサーバーをデプロイし、スケーラビリティの向上の他、高可用性の提供に使用できます。アクティブ/アクティブ・デプロイでは、すべてのインスタンスは、同時にリクエストを処理します。単一サイトにミドルウェアをデプロイする場合は、常にアクティブ/アクティブ・ソリューションを使用することをお薦めします。アクティブ/パッシブ・ソリューションでは、リクエストを処理するアクティブ・インスタンスと、スタンバイ状態のパッシブ・インスタンスをデプロイします。
高可用性環境の詳細は、『高可用性ガイド』の「高可用性の概要」を参照してください。
実行時には、バインディング・コンテナおよびマネージドBeanなどのADFオブジェクトはインスタンス化されています。これらの各オブジェクトには、そのスコープ属性によって設定される存続期間が定義されています。
ADFオブジェクトの存続期間の詳細は、「オブジェクト・スコープ・ライフサイクルについて」を参照してください。
Oracle WebLogicクラスタによって、アプリケーションの高可用性が実現します。クラスタのメンバーのいずれかが利用できなくなった場合、そのクラスタ内で他に利用可能なメンバーがリクエストを処理できます。アプリケーションのフェイルオーバー要件およびフェイルオーバーの発生時に予想される動作について精通している必要があります。
Fusion Webアプリケーションでシームレスなフェイルオーバーを実現するために、アプリケーションは次の条件を満たす必要があります。
アプリケーションがクラスタ内にあり、アプリケーション・クラスタの少なくとも1つのメンバーが、リクエストへの対応に利用できます。
ステートフル・アプリケーションに対し、「高可用性のためのOracle ADFの構成」の説明に従って、状態のレプリケーションが正しく構成されています。
Oracle HTTP Serverを使用している場合は、WebLogicClusterディレクティブを使用して、すべての使用可能なアプリケーション・インスタンス間でバランスが取られるようにサーバーが構成されています。
ハードウェア・ロード・バランサを使用する場合は、ロード・バランサが:
利用可能なインスタンスすべてに対してトラフィックをルーティングしています
利用できないインスタンスをマークするように、ヘルス・モニターで正しく構成されています
セッションの状態の永続性をサポートするように構成されています
環境が正しく構成されている場合には、クラスタ内のアプリケーション・インスタンスがいつ使用できなくなったか、アプリケーション・ユーザーは気が付きません。たとえば、アプリケーション・フェイルオーバーにおけるイベントの順序は次のようになります。
ユーザーがリクエストを行い、ハードウェア・ロード・バランサによって、アプリケーションのインスタンスAにルーティングされます。
ノード、プロセスまたはネットワークに障害が発生したため、アプリケーションのインスタンスAが使用できなくなります。
ハードウェア・ロード・バランサによって、インスタンスAが使用不可とマークされます。
ユーザーが後続のリクエストを行います。このリクエストがインスタンスBにルーティングされます。
インスタンスBがインスタンスAのレプリケーション・パートナとして構成され、ユーザーのセッションの状態が格納されます。
インスタンスBのセッションの状態を使用してアプリケーションが再開し、ユーザーは中断されることなく、引き続き操作します。
冗長なデータベースやバックエンドとしてのOracle Real Application Clusters (Oracle RAC)など、可用性の高いデータベース・システムにアクセスするようにADFアプリケーション・モジュールを構成するときは、データ・ソースのコンテナが定義されている必要があります。このシナリオでは、GridLinkデータ・ソースまたはマルチ・データ・ソースを使用する必要があります。ただし、アプリケーション・モジュールの構成の観点からは、マルチ・データ・ソースまたはGridLinkデータ・ソースの命名規則は、非マルチ・データ・ソースまたはGridLinkデータ・ソースの命名規則と同じになります。この命名規則によって、正しいデータ・ソースが実行時に使用されるようになります。
高可用性アプリケーションのGridLinkデータソースまたはマルチ・データソースの構成の詳細は、『高可用性ガイド』の「データベースの考慮事項」を参照してください。
Fusion WebアプリケーションのmdsDSデータソースURLのデプロイメント後の変更に関連する高可用性の考慮事項の詳細は、『高可用性ガイド』の「その他のコンポーネントの高可用性の構成」を参照してください。
クラスタ環境でフェイルオーバーが発生した場合、ファイル・システムまたはデータベース内の共有場所またはメモリー内にアプリケーション状態を保存する必要があります。これは、セッションの状態をレプリケートするためにクラスタ内のすべてのノードから使用可能である必要があります。高可用性用の構成のほとんどはアプリケーション・メタデータ・ファイルで行われます。また、コードでは任意の種類のJ2EEアプリケーションの高可用性をサポートする必要があることを念頭に置いて開発を行う必要があります。
クラスタ環境内のWebアプリケーションに対して自動的なレプリケーションとフェイルオーバーをサポートするために、Oracle WebLogic Serverは、クラスタ間でHTTPセッションの状態をレプリケートするメカニズムをサポートしています。Fusion Webアプリケーションの状態をクラスタ内のどのサーバーからでもリストアできるようにOracle ADFを構成できます。
アプリケーション・モジュールは、Fusion Webアプリケーションがアプリケーション・データの操作に使用するトランザクション・コンポーネントです。これによって、エンド・ユーザー・タスクに関連した作業論理ユニットに関連する、更新可能なデータ・モデルやトップレベルのプロシージャおよびファンクション(サービス・メソッド)を定義します。アプリケーション・モジュールは、そのトランザクション状態を非アクティブ化する、またはスナップショットとしてデータベースに格納することをサポートしています。また、これらの保存済スナップショットのいずれかからトランザクション状態をアクティブ化する逆の操作もサポートしています。
アプリケーション・モジュール状態管理の詳細は、「Fusion Webアプリケーションの状態管理について」を参照してください。
ADFビジネス・コンポーネントのフェイルオーバーのサポートを有効にするには、jbo.dofailover
パラメータをtrue
に設定し、アプリケーション・モジュールの状態が解放時に保存されるようにします。これによって、Oracle ADFは、前のチェックインで保存されたスナップショットからアプリケーション・モジュールの状態をリストアできるようになります。一方、フェイルオーバー機能がデフォルトにより無効のままになっている場合は、アプリケーションが後続のユーザー・セッションで再利用されたときと、アプリケーション・モジュール・プールが未使用のアプリケーション・モジュールを見つけられないときにのみ、アプリケーション・モジュールの状態が保存されます。
アプリケーション・モジュール構成でこのパラメータを設定するには、アプリケーション・モジュール構成(bc4j.xcfg
ファイル)の概要エディタの「プーリングおよびスケーラビリティ」タブを使用します。
高可用性のためのアプリケーション・モジュールを構成する手順は次のとおりです。
bc4j.xcfg
ファイル)の概要エディタで、「データベースとスケーラビリティ」タブをクリックします。HTTPセッションの状態のレプリケートをサポートできるようにするには、Oracle WebLogic Server weblogic.xml
ファイルのpersistent-store-type
要素に値を割り当てる必要があります。replicated_if_clustered
の値により、有効な永続ストアのタイプがレプリケートされ、このサーバーの属するサーバーのクラスタに対して設定された値に従って、クラスタ環境のセッションが格納されるようになります。
注意:
Oracle WebCenterポータルSuiteなどのOracle ADFアプリケーションは事前に構成されており、追加構成は不要です。
高可用性を実現するためにweblogic.xmlファイルを構成する手順は次のとおりです。
クラスタ環境で実行するアプリケーションを設計している場合は、ADFスコープ(ビュー・スコープおよびページ・フロー・スコープ)に格納されているマネージドBeanの変更をOracle ADFが認識していることを確認する必要があります。
ビュー・スコープまたはページ・フロー・スコープのいずれかで、マネージドBean内の値が変更された場合には、アプリケーションがOracle ADFに通知して、Beanの新しい値がレプリケートできるようにする必要があります。
ADF ControllerがADFメモリー・スコープに対する変更を追跡し、サーバー・クラスタ内のページ・フロー・スコープおよびビュー・スコープをレプリケートできるようにするには、アプリケーションのadf-config.xml
ファイル内のADF Controllerパラメータ<adf-scope-ha-support>
をtrue
に設定する必要があります。たとえば、アプリケーションにtrue
を設定した場合、そのアプリケーションがリクエスト中にページ・フロー・スコープでBeanの追加または削除を行うと、変更がクラスタ内で自動的にレプリケートされます。
adf-config.xml
は、すべてのADFコンポーネントの中核となる構成ファイルです。このファイルには、ADF ControllerなどのADFコンポーネントの実行時の動作を構成するためのセクションが含まれています。
注意:
アプリケーションでMDSを使用しており、フェイルオーバーをサポートするOracle Databaseを使用する場合は、フェイルオーバー時におけるMDSの再試行を有効化しておくことをお薦めします。これを行うには、次のretry-connection
エントリをadf-config.xmlのMDS構成セクションに追加します。
<persistence-config>
<metadata-namespaces>...
<metadata-store-usages>...
<external-change-detection enabled="false" />
<read-only-mode enabled="true"/>
<retry-connection enabled="true"/>
</persistence-config>
高可用性を実現するためにadf-config.xmlファイルを構成する手順は次のとおりです。
adf-config.xml
ファイルを使用したADFの構成の詳細は、「adfc-config.xml」を参照してください。
JSFアプリケーション・スコープBeanは、クラスタ・ノードごとにインスタンスを1つだけ持てるサーブレット・コンテキストによって戻されます。したがって、設計時に構成されたBeanそれぞれに対して、クラスタ内のノードごとにBeanの実行時インスタンスが存在することになります。ノード間は同期化されていないので、別々のノードで実行されるアプリケーションの各インスタンスが、そのBeanの別々の値を含む別々のインスタンスを持つことになります。つまり、1つのクラスタ内のすべてのノードで共有されるように更新できるアプリケーション全体の値を渡す際に、アプリケーション・スコープのマネージドBeanを使用することはできません。ただし、定数、読取り専用の値またはクラスタ内の1つのノードの状態(ノード上のユーザー数など)を反映する値を渡すために使用することはできます。
org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION
コンテキスト・パラメータは、JDeveloperでFusion Webアプリケーションの開発とテストを最適化します。高可用性環境でアプリケーションを実行するときに、このパラメータをtrue
のままにすると、フェイルオーバーの発生後にエラーが発生することがあります。通常、このパラメータは開発環境のみに使用し、高可用性環境では使用しないため、この制限が操作に影響することはありません。
高可用性用にCHECK_FILE_MODIFICATIONパラメータを構成する手順:
設計時およびデプロイメント後にも、Fusion Webアプリケーションの一般的な問題をトラブルシューティングする手順があります。
この項では、設計時およびデプロイメント後にFusion Webアプリケーションの問題をトラブルシューティングする手順について説明します。
JDeveloper環境内でフェイルオーバー・サポートを使用する(jbo.dofailover
が有効な)アプリケーションを実行またはデバッグするときは、アプリケーション・サーバーを頻繁に起動および停止します。ADFのフェイルオーバー・メカニズムでは、ユーザーがサーバーを停止してアプリケーション・サーバーの障害をシミュレートしているのか、それとも初期状態のサーバー・インスタンスで何かを最初から再テストするために停止しているのかを認識する手段がありません。後者の場合は、サーバーでアプリケーションを再起動する前に、ブラウザを終了することをお薦めします。これにより、アプリケーションでフェイルオーバー・メカニズムの正しい機能に関する部分をテストするつもりがない場合に、このメカニズムが動作することによって発生する混乱を避けることができます。
Fusion WebアプリケーションをOracle JDeveloperで開発する場合は、この統合開発環境によって、高可用性に関する問題を検出するためのサポートが提供されます。JDeveloperが発する警告は監査フレームワークによって生成され、JDeveloperのソース・エディタに表示するようにトリガーされます。エディタに表示される警告は、高可用性アプリケーションの監査ルールに基づきます。
JDeveloperがデフォルトにより有効にする高可用性監査ルールは次のとおりです。
「ADF Controller構成 - ADFスコープの高可用性が有効になっていません」は、adf-config.xml
ファイル内のadf-scope-ha-support
フラグがtrue
に設定されていないことを警告します。この監査ルールは、<adf-controller-config>
要素がADFアプリケーションレベルの構成ファイル(adf-config.xml
)に存在する場合にのみ適用されます。
「ADFページ・フロー - スコープ・マップのBeanが変更されました」は、コードがBeanでsetterメソッドを呼び出す際、続いてControllerContext.markScopeDirty()
メソッドを呼び出さなかったことを開発者に警告します。この監査ルールは、adf-config.xml
ファイル内のadf-scope-ha-support
フラグがtrueに設定されている場合にのみ適用されます。
「ADFページ・フロー - EL Beanが変更されました」は、BeanをミューテーションするEL式をコードが評価する際、続いてControllerContext.markScopeDirty()
メソッドを呼び出さなかったことを開発者に警告します。この監査ルールは、adf-config.xml
ファイル内のadf-scope-ha-support
フラグがtrueに設定されている場合にのみ適用されます。
「ADFページ・フロー - マネージドBeanクラスはシリアライズ不可」は、マネージドBeanのviewScope
、pageFlowScope
またはsessionScope
に、シリアライズ不可のクラスが定義されていることを開発者に警告します。この監査ルールは、adf-config.xml
ファイル内のadf-scope-ha-support
フラグがtrue
に設定されている場合にのみ適用されます。
高可用性監査ルール設定は、JDeveloperの「設定」ダイアログを使用して変更できます。JDeveloperのツールバーで「ツール - 設定」を選択し、「監査 - プロファイル」の下にある「ADF Controller構成」または「ADFページ・フロー」を展開して、目的の監査ルールを選択します。
JDeveloperのツールバーで「ビルド - 監査」project.jprを選択して監査をトリガーすることもできます。
Fusion Webアプリケーションのデプロイメントに関する問題に直面した場合は、実施する2つの対応として、JRFランタイムの確認とアプリケーションのデプロイメント・ステータスの確認を行います。
Fusion Webアプリケーションのデプロイメントをトラブルシューティングする最初の手順では、WebLogic Serverドメイン上にJRFランタイムがインストールされているかどうかを確認します。ADFのアプリケーションには、JRFとADFのランタイムが必要です。スタンドアロンのWebLogic Serverドメインまたはアプリケーション開発の製品に含まれているWebLogic ServerだけではADFのアプリケーションを実行できないため、JRF拡張テンプレートを使用して拡張する必要があります。
JRFテンプレートの詳細は、『ドメイン・テンプレート・リファレンス』のOracle JRFおよびADFのテンプレートに関する項を参照してください。
Fusion Webアプリケーションは、管理対象サーバーを最初に起動したときにデプロイされます。すべてのアプリケーションが正常にデプロイされたかどうかは、管理コンソールを使用して確認します。
DOMAIN_HOME
/servers/
server_name
/logs
ディレクトリに格納されています。一般的な問題には、次のようなものがあります。データベース・リソースなどの外部リソースを使用できません。エラーを調べて修正し、アプリケーションを再デプロイしてみてください。
適切なアプリケーションまたはライブラリのターゲットが、目的の管理対象サーバーまたはクラスタに正しく設定されていません。