Oracle® Fusion Middleware Oracle Application Development Frameworkの理解 12c (12.2.1.1) E77400-01 |
|
前へ |
次へ |
この章の内容は次のとおりです。
ADF Controllerは宣言的なフレームワークであり、タスク・フローの概念を介して、javax.faces.webapp.FacesServlet
クラスやfaces-config.xml
ファイルによって表されたJSFページ・ナビゲーションのサポートを構築します。図5-1は、ADF Controllerがエンタープライズ・アプリケーションにどのように適合しているかを示しています。
図5-1 ADF Controllerの全体のアプリケーション・アーキテクチャ
ADF Controllerは開発者に対して次の利点を提供します。
アプリケーションは、相互にコールする一連のモジュール型のタスク・フローに分割できます。
タスク・フローには、ビューを表すノード、メソッドのコール、ルーティング条件、他のタスク・フローへのコールを含めることができます。(基本的なJSFアプリケーションでは、ページ・フロー・ノードとして設定できるのはJSFページのみです。)
タスク・アクティビティと様々なタスク・フローの間でパラメータを渡すことができます。
アプリケーションのタスク・フローのビュー・アクティビティに基づいて、エンドユーザーに対してナビゲーション・リンクを持つページ階層を生成できます。
タスク・フローは再利用が可能です。
タスク・フローをADFライブラリJARへパッケージ化し、それを別のアプリケーションのプロジェクトで使用するためにインポートできます。
タスク・フローは、様々なADFアプリケーションからリモートで呼び出せます。
タスク・フローを使用して、エンド・ユーザーに公開するアクセス・ポイントの数を減らし、特定のアクセス権限を強化することで、Fusion Webアプリケーションを保護することも可能です。
ADF Controllerの中心的な機能はタスク・フローです。タスク・フローでは、Fusion Webアプリケーションの制御フローを定義するためのモジュール化アプローチが提供されます。アプリケーションを単一の大型JSFページ・フローとして表すのではなく、複数のタスク・フローに分割し、各タスク・フローにアプリケーションのナビゲーション・グラフの一部が含まれるようにします。
タスク・フローは、ページまたはページ・フラグメントの表示、アプリケーション・ロジックの実行、別のタスク・フローのコールなど、簡単な論理操作を表すアクティビティ・ノードから構成されています。アクティビティ間の遷移は制御フロー・ケースと呼ばれます。
タスク・フローには、ページ・フローの一部としてのカスタム・ビジネス・ロジックの起動、宣言的なルーターの決定、宣言的例外処理、追加のメモリー有効範囲、ページ内のフロー、再使用可能なフローなどが含まれます。また、タスク・フローにはトランザクションの境界を定めるためにフローを使用し、メソッドのコールなど表示不可能なターゲットへのナビゲーションをルーティングするための組込みサポートも含まれます。
JDeveloperを使用すると、ダイアグラム・エディタで視覚的にタスク・フローを作成できます。
ADF Controllerは、次の項で説明されている主要なコンポーネントで構成されています。
Fusion Webアプリケーションには必ず単一のADFバインドなしタスク・フローが含まれており、これにはブラウザで直接リクエスト可能な任意のビュー・アクティビティである、アプリケーションのエントリ・ポイントが含まれています。アプリケーションのバインドなしタスク・フローには、他のビュー・アクティビティ(ブックマーク可能のURLを持つページなど)、制御フロー・ルール、およびバインド・タスク・フローへのコールも含まれます。
ただし、バインドなしタスク・フローはパラメータを受け入れたり、返したり、トランザクション境界として機能したりできません。
通常のアプリケーションでは、バインドなしタスク・フローと1つまたは複数のバインド・タスク・フローが組み合されています。たとえば、Fusion Webアプリケーション・テンプレートを使用してアプリケーションを作成する場合、JDeveloperでは、空のバインドなしタスク・フロー(ソース・ファイル名は adfc-config.xml
)がデフォルトで作成されます。実行時、Fusion Webアプリケーションでは、バインドなしタスク・フローに追加したアクティビティからバインド・タスク・フローをコールできます。
バインド・タスク・フローは、バインドなしタスク・フローまたは他のバインド・タスク・フローからコールできるプライベート・タスク・フローです。バインド・タスク・フローには、単一エントリ・ポイントと0以上の終了ポイントがあります。プライベート制御フロー・ルール、アクティビティおよびマネージドBeanの独自のセットが含まれています。バインド・タスク・フローでは、再利用、パラメータ、トランザクション管理、再入力が可能であり、JSFページまたはページ・フラグメントにあるADFリージョン内へのレンダリングが可能です。図5-2は、ダイアグラム・エディタで表示されているバインド・タスク・フローの例を示しています。
バインドなしタスク・フローとは違い、バインド・タスク・フローには、ブックマーク可能なビュー・アクティビティを含めることはできません。
図5-2 ADFバインド・タスク・フロー
各タスク・フローは次のアクションおよび制御ケースの一部から構成されています。
ビュー。JSFページまたはページ・フラグメントが表示されます。
URLビュー。ルート・ビュー・ポート(ブラウザ・ページなど)を任意のURLアドレス対応リソース(バインド・タスク・フロー、バインドなしタスク・フロー内のビュー・アクティビティ、現在のWebアプリケーションの外部のアドレスなど)にリダイレクトできます。
Routers。EL式の実行時の評価に基づいて、制御をアクティビティにルーティングします。
メソッド・コール。アプリケーションの制御フロー内のどこからでもアプリケーション・ロジックを起動する、カスタム・メソッドまたは組込みメソッドをコールできるようになります。
タスク・フロー・コール。バインドなしタスク・フローまたはバインド・タスク・フローのいずれかからバインド・タスク・フローをコールできます。タスク・フロー・コール・アクティビティによって、同じアプリケーション内または別のアプリケーション内にあるバインド・タスク・フローをコールできます。
タスク・フロー・リターン。アプリケーションの制御フロー内で、バインド・タスク・フローが完了してコール元に制御フローが戻される場所を識別します。
セーブポイント・リストア。後で使用するための保存の機能がサポートされているアプリケーションで、以前の永続的なセーブポイントをリストアできます。セーブポイントでは、特定のインスタンスでFusion Webアプリケーションのスナップショットが取得されます。セーブポイント・リストア機能を使用すると、セーブポイントが最初に作成されたときに取得された状態までアプリケーションをリストアできます。詳細は、「セーブポイント」を参照してください。
親アクション・アクティビティ。ADFリージョンで実行するバインド・タスク・フローによって、親ビュー・アクティビティに渡す結果を生成できます。この結果を使用して、ADFリージョンのタスク・フローではなく、親ビュー・アクティビティを含むタスク・フローに移動します。
制御フロー・ケース。タスク・フローで、あるアクティビティから別のアクティビティに制御を渡す方法が定義されます。制御フロー・ルールには、制御フローを渡すアクティビティを特定する1つまたは複数の制御フロー・ケースを含めることができます。
制御フロー・ルールは、JSFナビゲーション・ルールに基づきますが、その他の機能を提供します。JSFナビゲーションは常にページ間で実行されますが、タスク・フローの制御フロー・ルールは、メソッド・コールやバインド・タスク・フローのエントリ・ポイントと終了ポイントなど、その他のアクティビティ間の遷移も処理します。
ワイルドカード制御フロー・ルール。これにより、ワイルドカード式を使用して、指定された制御フロー・ルールに渡すビュー・アクティビティを指定できるようになります。
タスク・フロー・テンプレートは、バインド・タスク・フローの作成を簡単にし、タスク・フローのランタイム動作の一貫性を向上させ、アプリケーションのタスク・フローのリファクタを容易にします。
名前が示すように、タスク・フロー・テンプレートは標準のタスク・フロー・タイプを作成するためのメカニズムです。タスク・フロー・テンプレートから作成したバインド・タスク・フローには、タスク・フロー・テンプレートと同じタスク・フロー・アクティビティ、制御フロー、入力パラメータおよびマネージドBeanがセットで定義されています。新しいバインド・タスク・フローの作成時に、タスク・フロー・テンプレートをユーザー自身または他のアプリケーションの開発者のために作成し、出発点として使用できます。
また、タスク・フロー・テンプレートを実行時に使用できます。テンプレートに基づいてタスク・フロー(または別のタスク・フロー・テンプレート)を作成する場合、新規作成のフローまたはテンプレートと基本テンプレートの間のアソシエーションを保持するには、「テンプレートの変更時にタスク・フローを更新」チェック・ボックスを選択します。こうすることで、基本テンプレートに加えたそれ以降の変更(新しいビュー・アクティビティの追加など)が実行時に子フロー(またはテンプレート)に伝播されます。(子と親の間に競合がある場合、子が親をオーバーライドします。)子バインド・タスク・フローまたはタスク・フロー・テンプレートの親タスク・フロー・テンプレートは、子の開発中のどの段階でも変更、更新、関連付けの解除が可能です。
特定のインスタンスでFusion Webアプリケーションの状態を取得するために、セーブポイントをタスク・フローに追加できます。これにより、たとえばユーザーがページを完了せずにそのページから移動する場合などに、アプリケーションの状態を保存できるようになります。アプリケーションの状態は、後でリストアできます。保存される情報には、次のものがあります。
選択したタブ、選択したチェック・ボックス、選択した表の行、表の列のソート順など、現在のページのUIの状態。
セッション・スコープやページ・フロー・スコープなど、メモリー有効範囲に保存される状態の情報。
シリアライズ可能なマネージドBeanの状態。
ナビゲーションの状態。タスク・フロー・コール・スタックから導出され、アプリケーション内のエンド・ユーザーの位置、およびそこに至るまでのナビゲーション・パスが追跡されます。
ADFモデルの状態。現在のバインド・タスク・フローの開始以降に行われたすべてのデータ・モデルの更新で構成されています。
ADF Facesでは、pageFlowScope
、backingBeanScope
、viewScope
の共有メモリー有効範囲が提供され、標準JSFメモリー有効範囲が拡張されます。
タスク・フローに特に関連があるのはpageFlowScope
であり、これはタスク・フローの各インスタンスに対して一意の記憶域を定義します。pageFlowScope
スコープは、タスク・フローの開始時に始まり、タスク・フローの終了時に終わります。
たとえば、pageFlowScope
を持つマネージドBeanは、アクティビティが他のページにわたって広がっていても、そのタスク・フロー内でアクセスできます。ただし、これは、そのタスク・フローの外側にあるすべてのもの(そのタスク・フローをコールする他のタスク・フローや、同じページに存在していても異なるタスク・フローに含まれているリージョンにあるUIコンポーネントなど)については当てはまりません。
これらの範囲に関する詳細は、「ADF Facesの主要概念」を参照してください。
タスク・フローを作成する際に、そのタスク・フローでADF Faces train
コンポーネントおよびtrainButtonBar
コンポーネントを使用して、ユーザーにそのタスク・フローで指定された手順を示すように指定できます。図は、これらのコンポーネントをレンダリングするADFタスク・フローのSummitサンプル・アプリケーションのページ・フラグメントを示しています。
図5-3 ADFトレイン・コンポーネント
ADF Controllerの使用方法は、次の基本的な手順で構成されます。
JDeveloperで、そのアプリケーション用のアプリケーション・ワークスペースを作成します。
JDeveloperの「新規ギャラリ」でウィザードを使用し、タスク・フロー・ファイルを作成します。
JDeveloperのダイアグラム・エディタをタスク・フローに使用し、タスク・フロー・アクティビティ(ビュー・アクティビティ、メソッド・コール・アクティビティなど)と制御フロー・ケースを追加してタスク・フローを設計します。
この処理の過程で、タスク・フローで使用するページを最初から作成したり、既存のJSFページまたはページ・フラグメントをダイアグラム・エディタにドラッグ・アンド・ドロップしてタスク・フローでビュー・アクティビティを作成したりできます。
統合WebLogic ServerをJDeveloper内から使用して、タスク・フローのテストを実行します。
次のリソースで、アプリケーションでのADF Controllerの使用に関する詳細が提供されています。
『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFタスク・フローの作成」
ADF ControllerのJDeveloperチュートリアル
タスク・フロー設計の基礎ホワイト・ペーパー