ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development Frameworkの理解
12c (12.1.2)
E48094-02
  目次へ移動
目次

前
 
次
 

3 ADFモデル

この章では、データ・コントロール、宣言的バインディング、ADFバインド・コンテキストなど、ADFモデルのテクノロジの概要を説明し、それらのコンポーネントが機能豊富なエンタープライズ・アプリケーションの他の部分と連動する方法を示します。

この章には次の項が含まれます:

3.1 ADFモデルについて

ADFモデルは宣言的なフレームワークであり、これにはビジネス・サービス間の抽象化レイヤー、およびエンタープライズ・アプリケーションのビュー・レイヤーとコントローラ・レイヤーが用意されています。このエンタープライズ・アプリケーションは、それらのレイヤー内のコンポーネントが相互作用する方法を標準化します。図3-1は、ADFモデルがエンタープライズ・アプリケーションにどのように適合しているかを示しています。

図3-1 ADFモデルの全体のアプリケーション・アーキテクチャ

ADFモデルを強調表示したアーキテクチャの図

3.2 ADFモデルのコアな利点

ADFモデルには、UI開発者とアプリケーション・ロジックの開発者の両方に利点となる機能が備わっています。

UI開発者にとってのコアな利点は、次のとおりです。

アプリケーション・ロジックおよびデータ・モデルに重点を置いた開発者にとってのコアな利点は、次のとおりです。

3.3 ADFモデルの主要概念

ADFモデルは、次の主要な機能で構成されています。

この項では、データ・コントロールと宣言的バインディングがADFアプリケーション内でどのように機能するかについて概説します。

3.3.1 アプリケーションのモデル・レイヤーの抽象化

ADFモデルはMVC (model-view-controller)デザイン・パターンを構築し、ここではアプリケーションのデータ・モデルのコード、ビジュアル・インタフェース、およびアプリケーション・フローがすべて正確に区切られています。この分割により、複数のタイプのクライアント・ディスプレイで同じビジネス情報を使用できます。また、アプリケーションの異なるレイヤーで作業する開発者の責任の明確化に役立ちます。

基本のMVCアーキテクチャでは、図3-2に示すように、モデル・レイヤーはビジネス・サービスで構成されており、ビジネス・サービスはデータとやり取りします。この方法でフレームワークの支援がない場合、ビジネス・サービス、コントローラ、およびビュー・コンポーネントをコード化して、相互に適切にやり取りさせる必要があります。

図3-2 基本のMVCアーキテクチャ

モデル、ビュー、およびコントローラ・レイヤーのダイアグラム

ADFモデルをアプリケーションで使用する場合にはJavaコードを記述する必要がなくなりますが、そうしない場合にはMVCレイヤーの調整が必要になります。同様に、UI開発者はビジネス・サービスの実装の詳細について懸念する必要がなくなります。図3-3に示すように、ADFモデルはビジネス・サービスとアプリケーションのビューおよびコントローラ部分をつなぐパイプとして機能し、ビューとビジネス・サービスの間にバインディングを作成する標準的な方法を提示します。

図3-3 ADFモデルのMVCアーキテクチャ

ビジネス・サービスとモデル・レイヤーを区切ったMVC

3.3.2 宣言的なデータ・バインディング

JDeveloperで、データ・サービスとUIコンポーネント間に宣言的バインディングを作成するには、項目を「データ・コントロール」パネルから「JSF」ページなどの特定のUIテクノロジのビジュアル・エディタにドラッグします。図3-4に示すように、宣言的バインディングでは、データ・コントロール、コントローラ、およびUIレイヤーの間で調整が行われます。

ADFデータ・コントロールを宣言的にバインドできるようにすることで、ADFデータ・バインディングはJSFデータ・バインディングを拡張します。標準的なJSFアプリケーションでは、マネージドBeanを作成してから、JSFページ・コードでそれらに対するEL式参照を作成します。ただし、ADFモデルを使用するアプリケーションでは、マネージドBeanのかわりにXML構成ファイルを使用できます。これらのXMLファイルのバインディング・コードおよび「JSF」ページのEL式は、オブジェクトを「データ・コントロール」パネルからページへドラッグする際に自動的に生成されます。また、これらのファイルのバインディングを手動で追加、削除および変更することも可能です。

図3-4 ADFモデルのデータ・バインディングおよびデータ・コントロール・レイヤー

ADFアーキテクチャ内のデータ・コントロールおよびバインディング・サブレイヤー

3.4 ADFモデルの主要コンポーネント

ADFモデルは、次のコンポーネントで構成されています。

3.4.1 データ・コントロール

使用するビジネス・サービスのタイプに応じて、異なったタイプのデータ・コントロールがあります。データ・コントロールの主要なタイプは次のとおりです。

  • EJB、プレーンJavaクラス(POJO)、SOAPベースのWebサービス、RESTful Webサービスなどの一般的なビジネス・サービスに向けた、アダプタ・データ・コントロール

  • ADFビジネス・コンポーネント・アプリケーション・モジュールに基づいたデータ・コントロール

3.4.1.1 アダプタ・データ・コントロール

アダプタ・データ・コントロールは、その名前からわかるように、インタフェースを標準的な方法でバインディング・レイヤーに公開する非ADFビジネス・サービス用アダプタとして機能します。

アダプタ・データ・コントロールは、JDeveloperで次のタイプのサービスに対して使用できます。

  • EJBセッションBean

  • Bean (プレーンJavaオブジェクト)

  • Webサービス(SOAPベースおよびRESTベース)

  • URLサービス

  • JMX

また、プレースホルダ・データ・コントロールもあり、これを使用するとUI開発者は実際のビジネス・サービスが使用可能になる前に、データバインドされたUIコンポーネントを作成する目的でデータ・コントロールのモックアップを作成できます。

データ・コントロールを作成した後、開発者は、宣言的メタデータでサービスを構成するために、データ・コントロールに含まれている個々のサービスに対してデータ・コントロール構造ファイルを作成することもできます。これらの構造ファイルでの構成の可能性は、ADFビジネス・コンポーネント・ビュー・オブジェクトで実行可能な宣言的構成のタイプを反映しています。

次に示す項目は、アダプタ・データ・コントロールに追加できるメタデータのタイプの一部です。

  • 属性のデフォルト値。

  • 一時属性。

  • 属性に対するUIヒント。

  • 検証ルール(比較操作のテンプレート、範囲、長さ、正規表現またはGroovy式に基づいてルールを記述できるかどうかなど)。

  • 指定基準。これを使用すると、事前に選択した部分検索基準に基づいてUI検索コンポーネントを作成できます。指定基準はJPAベースのデータ・コントロールでのみ使用できます。

  • LOV (値のリスト)コンポーネント。これにより、UI開発者はデータ・ソース内で指定された表によって移入されたリスト・コンポーネントを作成できます。

アダプタ・データ・コントロールを作成すると、DataControls.dcxという名前のデータ・コントロール定義ファイルが作成されます。それ以降、データ・コントロールで表現されたオブジェクトの宣言的メタデータを追加すると、XMLファイルが生成されてそのメタデータが保持されます。

3.4.1.2 ADFビジネス・コンポーネント

ADFビジネス・コンポーネントのサービスは、ADFモデルに直接統合されます。ADFビジネス・コンポーネント・アプリケーション内のデータ・コントロールは、1つまたは複数のアプリケーション・モジュールで設定したデータ・モデルから導出されます。アプリケーション・モジュールによりカプセル化されたビュー・オブジェクトは、ビジネス・サービスを表し、宣言的にもプログラムによっても構成できます。ビュー・オブジェクトに使用できる宣言的メタデータのタイプには、アダプタ・データ・コントロールで使用可能なすべてのタイプのメタデータ、およびビュー・オブジェクトに固有のその他のメタデータが含まれます。

アプリケーション・モジュールおよびビュー・オブジェクトの詳細は、第4.4項「ADFビジネス・コンポーネントの主要コンポーネント」を参照してください。

3.4.2 宣言的バインディング

宣言的バインディングには、EL式またはJavaコードを使用した、ビュー・レイヤーからモデル・レイヤーへのコールの方法が用意されています。

バインディングには次の3つのカテゴリがあります。

  • 値バインディング。データを表示するUIコンポーネントで使用します。ツリー、リストおよびその他のコンポーネントには、値バインディング・オブジェクトのサブタイプがあります。

  • アクション・バインディング。ボタンおよびリンクをサービス・メソッドおよび操作にバインドする際に使用します。

  • 実行可能なバインディング。これにはイテレータ・バインディングが含まれ、通常は問合せや行の現行性の管理など、バックグラウンド・タスクに関与します。

これらのバインディング・オブジェクトはページ定義ファイルで定義されます。ページ定義ファイルは、「データ・コントロール」パネルを使用してデータバインドされたコンポーネントを作成すると自動的に作成および更新されます。デフォルトでは、生成された定義ファイル名はその対応Webページの名前を付け、pageDefを追加し、xml拡張子を使用します。ページごとにページ定義ファイルが1つあります。

各ページのバインディング・オブジェクトは、データ・コントロール・オブジェクトを参照してUIコンポーネントにデータを提供します。実行時には、バインディング・オブジェクトはバインディング・コンテナでインスタンス化されます。EL名前空間bindingsに基づいた式を使用して、ページからその対応バインディング・コンテナにアクセスできます。そのような式では、常に、現在のページのバインディング・コンテナに対して評価されます。標準の式では、#{bindings.BindingObject.propertyName}という形式になります。ここでは、BindingObjectはページ定義ファイルで定義されたオブジェクトまたは属性を参照し、propertyNameは標準ADFバインディング・プロパティを参照します。たとえば、#{bindings.Phone.inputValue}Phone属性の値を返します。

すべてのアプリケーションのバインディング・コンテナとそのデータ・コントロールへの参照は、組み合わさって、アプリケーションのバインディング・コンテキストを形成します。このバインディング・コンテキストは、デザインタイムにDataBindings.cpxファイルによって表され、アプリケーションのUIプロジェクトに配置されます。

3.5 実行時のADFモデル

ADFモデル・レイヤーは実行時に次の操作を実行します。

図3-5 データ・バインディングで使用されるファイル

バインディングに使用される構成ファイルを示す図

図3-6 はデータ・コントロール、宣言的バインディング、およびビュー・レイヤー間の接続を示しています。

図3-6 ADFモデルを使用した、UIコンポーネントへのデータ・ソースのバインディング

UI要素はバインディングを使用してデータ・コントロールに接続します

3.6 ADFモデルのプロセス・フローの概要

この項では、ADFモデルと連動するためのプロセス・フローについて説明します。このプロセスは、ADFビジネス・コンポーネントを使用しているか、その他のタイプのデータ・コントロールを使用しているかによって異なります。

3.6.1 ADFビジネス・コンポーネントでADFモデルを使用するための開発手順

ADFビジネス・コンポーネントでADFモデルを使用する場合は、単にビジネス・コンポーネントを構築します。詳細は、第4.5項「ADFビジネス・コンポーネント・プロセス・フローの概要」を参照してください。

3.6.2 非ADFビジネス・サービスでADFモデルを使用するための開発手順

非ADFビジネス・サービスでADFモデルを使用する場合の基本的な手順は次のとおりです。

  1. JDeveloperで、そのアプリケーション用のアプリケーション・ワークスペースを作成します。

  2. アプリケーション・ワークスペースで、データ・コントロールの基準となるビジネス・サービスを作成またはインポートします。

    これらのサービスには、EJBセッション・ファサード、プレーンJavaオブジェクト(POJO)、Webサービスまたはデータ・コントロールがあるその他のタイプのサービスが含まれます。サービスを作成するには、データベース、URL、またはスキーマへの接続も必要となる場合があります。

  3. JDeveloperの「新規ギャラリ」で使用可能なウィザードを使用して、ビジネス・サービスのデータ・コントロールを作成します。

  4. オプションで、JDeveloperのビジュアル・エディタを使用して、データ・コントロールでカプセル化されたサービスのビジネス・ルールを宣言的に指定します。

  5. オプションで、JPAベースのデータ・コントロールに対し、ADFモデル・テスターを使用してビジネス・サービスをテストします。

  6. 「データ・コントロール」パネルと様々なバインディング・エディタを使用して、データバインドされたコンポーネントをビュー・レイヤーに作成します。

3.7 ADFモデルの詳細について

次のリソースに、アプリケーションのADFモデルの使用に関する詳細が記載されています。