20 データベース・データのモデル: ADFビジネス・コンポーネントの概要

ADFビジネス・コンポーネントを使用すると、データ・モデル・レイヤーを操作して、十分な機能を備えたIDE内でビジネス・ロジックおよびユーザー・インタフェースの持続的な開発を行うための強固な基盤を構築できます。

Oracle Database Cloud - Database Schema Serviceには、スタンドアロン・データ・ソースが使用されるビジネス・シナリオでデータベース機能を実現するための堅固な代替手法が用意されています。実際に、このサービスには、アプリケーションの残りの部分を実装する前に、データ・モデルを作成し、ビジネス・コンポーネント・レイヤーの準備を整えるための複数のオプションが含まれています。このような代替手法の1つにOracle Application Expressがあります。ただし、Oracle Application Expressでは、Oracle Application Development Framework (ADF)内のビジネス・コンポーネントの場合は可能である、複雑なアプリケーション・フローやユーザー・インタフェースのサポートが不可能である場合があります。

前提条件

このドキュメントに示される開発の例を実行する前に、以下の点に注意してください。

  • 必ずJavaバージョン6 (SEまたはEE)を実行してください。

  • 正しいバージョンのOracle JDeveloper IDEがインストールされていることを確認してください。

    .

    注意:

    Oracle JDeveloper IDEを使用してOracle Cloudで開発するには、Oracle JDeveloper Studio Editionバージョン11.1.1.7.1を使用する必要があります。これより新しいバージョンを含む他のOracle JDeveloperのバージョンの場合、Oracle Cloudの統合機能をサポートしていません。Oracle JDeveloper Studio Edition 11.1.1.7.1をOracle Technology Network (http://www.oracle.com/technetwork/developer-tools/jdev/downloads/jdeveloer111171-2183166.html)からダウンロードしてください。

ADFビジネス・コンポーネントについて

Oracle Application Development Framework (ADF)は、Model-View-Controller (MVC)アーキテクチャに基づいて設計されています。MVCアーキテクチャには、開発者にとって多くのメリットがありますが、主なメリットは、データ・コンポーネントまたはモデル・コンポーネントがアプリケーション・フローおよびユーザー・インタフェースから論理的に分離されていることです。アーキテクチャのADFモデル・レイヤー内には、実際の物理データ(データベースと他のタイプのデータ・リポジトリのどちらに属するかは関係ありません)と、物理データの上位に構築されたADF設計オブジェクトとの間に追加の境界が存在します。

ADFビジネス・コンポーネント・フレームワーク内では、物理データ・レイヤーから構築されたビジネス・コンポーネントを使用することにより、開発者は、特定の永続データ・ストアの実装の詳細を把握する必要なく、異種データ・ソースを操作できます。特定のデータベース・ベンダー(Oracle、Microsoft SQL Server、IBM DB2およびその他)から汎用ビジネス・コンポーネントへの変換はすべて、再利用可能なビジネス・オブジェクトの作成プロセスの一環としてOracle ADFソフトウェア・コンポーネント・ライブラリを介して行われます。プロセスのこの部分はすべてOracle ADFによって処理されるため、開発者がこの部分に関わる必要はありません。

ADFビジネス・コンポーネントは、物理データの上位に構築された論理的な抽象レイヤーであると捉えてください。このレイヤーは、通常のデータ・ソースが提供するものをすべて提供しますが、この提供は異なるタイプのデータ・ソース全体にわたって均一に行われるため、開発者は、既知および予測可能のアクセス・メカニズム、動作および設計機能をカプセル化する開発オブジェクトを操作できます。

次のADFコンポーネントは、連携してMVCアーキテクチャのモデル・レイヤーを形成します。

  • エンティティ・オブジェクト - エンティティ・オブジェクトは、データベース表内の行の表現であり、そのため、通常はデータベース制約や検証などによって定義されるビジネス・ルールおよびビジネス・ポリシーをサポートするよう設計できます。エンティティ・オブジェクトを相互に関連付けることにより、マスター/ディテール関係、外部キーおよびより複雑なデータ関係が可能になります。

  • ビュー・オブジェクト - ビュー・オブジェクトは、SQL問合せの表現です。ビュー・オブジェクトはSQL問合せと同様、アプリケーションの要求に応じてデータを結合、フィルタ、ソートおよび集計するよう設計できます。ビュー・オブジェクトは読取り専用または更新可能にすることができます。更新可能にする場合、ビュー・オブジェクトは、データ要素を検証および更新するために関連するエンティティ・オブジェクトによってバックアップされます。

  • アプリケーション・モジュール - アプリケーション・モジュールは、データ・トランザクションをカプセル化し、ユーザー・インタフェースからのユーザー・タスクを、(最終的に物理データ・リポジトリへとつながる)データの挿入、更新、削除およびコミットに変換する処理を支援するADFコンポーネントです。また、アプリケーション・モジュールにより、アプリケーション・アーキテクチャのモデル・コンテナとビュー・コンテナの間の仲介者として機能するオブジェクトであるデータ・コントロールを公開することも可能になります。

これらのオブジェクトには、たいていはビジネス・アプリケーションに反映されている要件およびユースケースのほとんどをサポートする組込み標準動作が含まれます。必要に応じて、カスタムJavaコードを使用してこれらの場合のデフォルトの動作を拡張または上書きできます。

エンティティ・オブジェクトおよびエンティティ・オブジェクト・アソシエーションの作成

開発環境内でデータ・ソース(データ接続とも呼ばれます)が定義された後、エンティティ・オブジェクトおよびビュー・オブジェクトを作成できます。Oracle JDeveloperでビジネス・コンポーネントを作成するためのより効率的な方法の1つは、表からのビジネス・コンポーネントの作成ウィザードを使用してこれらをバッチ・モードで作成する方法です。

ウィザードを使用してエンティティ・オブジェクトを作成する手順:
  1. Oracle JDeveloperアプリケーション・ナビゲータから、モデル・オブジェクトのプロジェクト・コンテナを右クリックしてから、「新規」を選択します。
  2. 新規ギャラリで、「ビジネス層」を展開し、「ADFビジネス・コンポーネント」「表からのビジネス・コンポーネント」の順に選択します。「OK」をクリックします。
    選択したプロジェクトでこのウィザードを初めて実行する場合は、ビジネス・コンポーネントの初期化ダイアログ・ボックスで適切なデータベース接続を選択するか、新しい接続を作成する必要があります。
  3. 「エンティティ・オブジェクト」ページ(下図を参照)で、次のステップを完了します。
    1. エンティティ・オブジェクトを含めるパッケージ名を入力します。
    2. 「使用可能」リストに表示された表は、自動的に移入することも、表名に基づいてフィルタ検索を実行して移入することもできます。適切なフィルタを使用して、リストに表示する表をフィルタします。すべての表をリストすることも、名前別にフィルタすることもできます。また、タイプ(表、ビューまたはシノニム)別にオブジェクトをフィルタすることもできます。
    3. エンティティ・オブジェクトを作成する表を「使用可能」リストから「選択済」リストに移動します。
  4. 「終了」をクリックし、エンティティ・オブジェクトを作成します。
    「Next」をクリックすると、ビュー・オブジェクト(更新可能および読取り専用の両方のタイプ)を作成したり、アプリケーション・モジュールやデータ・ダイアグラムを作成したりできる他のページに移動できます。

エンティティ・オブジェクトとアソシエーションは個別に作成できます。このプロセスは実質的にウィザード・アプローチと同一ですが、新規ギャラリの「ADFビジネス・コンポーネント」セクションからウィザードを選択するかわりに、「エンティティ・オブジェクト」を選択します。

また、物理データ・ソース・オブジェクト(表、ビューまたはシノニム)を基本として使用せずに、エンティティ・オブジェクトを作成することもできます。このオプションの場合、データ・ストア内にまだ存在しない表名を入力します。次に、各表属性を自動的に作成させるのではなく個別に定義する必要があります。後で、表を手動で作成することも、エンティティ・オブジェクト定義を使用して表を自動的に作成することもできます。

選択した表からエンティティ・オブジェクトを作成するプロセス中、データ・ディクショナリが読み取られ、フィールド/オブジェクト・データ型、主/一意キー、およびnull/非null制約が決定されます。また、選択した任意の表のデータベース・レベルで外部キー制約が定義されている場合、表間の関係を定義する名前付きアソシエーション・コンポーネントが作成されます。これらのコンポーネントは、MVCフレームワークのアプリケーション・ビューおよびコントローラ・モジュールで活用できます。

ビュー・オブジェクトの作成

ビュー・オブジェクトを最も適切に表現すると、SQL問合せに基づくラッパーになります。SQL問合せと同様、ビュー・オブジェクトには複数の異なるフレーバがあります。

  • 読取り専用ビュー・オブジェクトは、SQL問合せから直接作成することも、エンティティ・オブジェクトに基づいて作成することもでき、ビジネス・ロジックによってデータ更新が必要ない場合に使用されます。

  • 更新可能ビュー・オブジェクトは、物理データ・モデルに間接的にアタッチする必要があるため、常にエンティティ・オブジェクトに基づいています。

  • 静的データ・ビュー・オブジェクトは、ビュー・オブジェクト内からデータを定義し、主に非動的参照に使用されます。

  • プログラム関連ビュー・オブジェクト(このドキュメントでは扱っていません)は、特別なユースケースで使用できます。

エンティティ・オブジェクト・ベースのビュー・オブジェクトを作成する手順(「表」ウィザードからのビジネス・コンポーネントのバッチ作成の代替手法):
  1. Oracle JDeveloperアプリケーション・ナビゲータから、モデル・オブジェクトのプロジェクト・コンテナを右クリックしてから、「新規」を選択します。
  2. 新規ギャラリで、「ビジネス層」を展開し、「ADFビジネス・コンポーネント」「ビュー・オブジェクト」の順に選択します。「OK」をクリックします。
    選択したプロジェクトでこのウィザードを初めて実行する場合は、ビジネス・コンポーネントの初期化ダイアログ・ボックスで適切なデータベース接続を選択するか、新しい接続を作成する必要があります。「OK」をクリックします。
  3. 「ビュー・オブジェクトの作成」ウィザードの「名前」ページで、次の図に示すように、パッケージ名、ビュー・オブジェクト名および表示名を入力します。デフォルトでは、ビュー・オブジェクトは更新可能です。デフォルト値は、次のページで読取り専用に変更できます。「Next」をクリックします。
  4. 「エンティティ・オブジェクト」ページで、ビュー・オブジェクトの基準として使用するエンティティ・オブジェクトを選択します。「Next」をクリックします。
  5. 「属性」ページで、ビュー・オブジェクトに必要として選択したエンティティ・オブジェクトで公開する属性を選択します。「Next」をクリックします。
  6. 次の図に示す「属性の設定」ページで、属性名および他の初期設定を変更できます。「Next」をクリックします。
  7. オプションで、WHEREおよびORDER BY句をフィルタに追加し、「問合せ」ページのデータをソートします。

事前に、既存のエンティティ・オブジェクトで公開する属性をすべて使用することが分かっている場合は、デフォルトのビュー・オブジェクトを作成する近道があります。アプリケーション・ナビゲータから、対象のエンティティ・オブジェクトを右クリックしてから、新規デフォルト・ビュー・オブジェクトを選択します。残りのステップは「ビュー・オブジェクトの作成」ウィザードと似ていますが、より簡素化されています。ただし、属性を選択する機能の柔軟性が損なわれる点について妥協する必要があります。

エンティティ・オブジェクトに基づいていないビュー・オブジェクトは常に読取り専用です。この場合、ビュー・オブジェクトは、SQL問合せから直接作成されます。Oracle JDeveloperで使用可能なビュー・オブジェクト作成ウィザードを使用すると、問合せの作成は非常に簡単になります。読取り専用タイプのビュー・オブジェクトの有力候補には、SQLコードにデータ検証が埋め込まれている場合や、集合および集計済グループ化基準問合せを作成する必要がある場合が含まれます。

読取り専用ビュー・オブジェクトの作成

読取り専用ビュー・オブジェクトの作成は、エンティティ・オブジェクト・ベースのビュー・オブジェクトの作成の場合と同じように開始されます。ただし、「名前」ページで、エンティティ・オブジェクト・ベースのオプションを選択するかわりに、SQL問合せを介して読取り専用アクセスを選択します。残りのステップは異なります。

読取り専用ビュー・オブジェクトを作成する手順:
  1. Oracle JDeveloperアプリケーション・ナビゲータから、モデル・オブジェクトのプロジェクト・コンテナを右クリックしてから、「新規」を選択します。
  2. 新規ギャラリで、「ビジネス層」を展開し、「ADFビジネス・コンポーネント」「ビュー・オブジェクト」の順に選択します。「OK」をクリックします。
    選択したプロジェクトでこのウィザードを初めて実行する場合は、ビジネス・コンポーネントの初期化ダイアログ・ボックスで適切なデータベース接続を選択するか、新しい接続を作成する必要があります。「OK」をクリックします。
  3. 「ビュー・オブジェクトの作成」ウィザードの「名前」ページで、パッケージ名および表示名を入力し、「SQL問合せによる読取り専用アクセス」を選択します。「Next」をクリックします。
  4. 「問合せ」ページで、次のオプションの1つを完了します。
    • 「問合せ文」フィールドに有効なSQL文を入力します。

    • 「クエリー・ビルダー」をクリックし、選択したデータ・ソースに基づいて問合せを構築するための対話型選択プロセスが用意されたクエリー・ビルダーを開きます。

  5. 問合せが完了したら、「Next」をクリックします。
  6. (オプション)「バインド変数」ページで、問合せにバインド変数を追加できます。バインド変数は、一意の名前によって参照され、特定のデータ型が付与されます。また、実行時にバインド変数の値を要求することもでき、デフォルト値を定義できます。「Next」をクリックします。
  7. 「属性の設定」ページで、問い合せた表の主キーを定義します。
    このステップが必要なのは、ビュー・オブジェクトがエンティティ・オブジェクトに基づいていないため、およびビュー・オブジェクトの主キーがない場合は実行時に異常な動作が発生する可能性があるためです。
  8. ビュー・オブジェクト属性のデフォルトのプロパティの変更が完了したら、「終了」をクリックします。
ビュー・オブジェクトをまとめてリンクすることにより、すべてのタイプのビジネス・アプリケーションの共通要件であるマスター/ディテール・データ関係を作成できます。ADFビジネス・コンポーネント・ドキュメントで完全に網羅されるビュー・オブジェクトの開発機能はほかにも多数存在します。

アプリケーション・モジュールおよびデータ・コントロールの作成

エンティティ・オブジェクトおよびビュー・オブジェクトとともに、ADFビジネス・コンポーネント・レイヤーには別途必要な部分があります。すべてのデータ集中型のアプリケーションが必要とするのは、アプリケーションのユーザー・インタフェースまたはビュー・コンポーネントから生成されるユーザー・タスクを取り込み、これらのタスクを、エンティティ・オブジェクトとビュー・オブジェクトに渡した後に物理データ・ストアに対して渡すことができる論理作業単位に変換するコンポーネントです。このような要件に対するOracle ADFの回答が、アプリケーション・モジュールです。アプリケーションのエンティティ・オブジェクトおよびビュー・オブジェクトの親コンテナとして機能することに加えて、アプリケーション・モジュールは、データベース接続の作成と保持および個々のデータベース・トランザクションの処理に対応します。

アプリケーションのスコープに応じて、ユーザー・タスクからデータベース・トランザクションへの変換をサポートする1つ以上のアプリケーション・モジュールが必要です。

アプリケーション・モジュールを作成する手順:

  1. Oracle JDeveloperアプリケーション・ナビゲータから、モデル・コンポーネントのプロジェクト・コンテナを右クリックしてから、「新規」を選択します。
  2. 新規ギャラリで、「ビジネス層」を展開し、「ADFビジネス・コンポーネント」「アプリケーション・モジュール」の順に選択します。「OK」をクリックします。
  3. 「アプリケーション・モジュールの作成」ウィザードで、パッケージ名およびアプリケーション・モジュール名を入力します。「Next」をクリックします。
  4. 「データ・モデル」ページで、前に定義したビュー・オブジェクトを選択します。この際、オプションで、「データ・コントロール」パネルでの公開時にビュー・オブジェクトの目的が明確になるように名前を編集します。
  5. (オプション)「Java」ページで、アプリケーション・モジュールの動作をカスタマイズしたりアプリケーション・モジュールのクライアント・インタフェースからコールできるメソッドを追加したりできるJavaスタブ・ファイルを生成できます。(アプリケーション・モジュールが作成された後に編集することにより、後でJavaファイルを作成することもできます。)
アプリケーション・モジュールが作成された後、別のビュー・オブジェクト・インスタンスを追加できます。アプリケーション・モジュールの概要エディタを開くには、アプリケーション・ナビゲータでアプリケーション・モジュールをダブルクリックしてから、「データ・モデル」タブをクリックします。ここから、「ビュー・オブジェクト・インスタンス」セクションを展開してから、ビュー・オブジェクトを「使用可能」リストから「データ・モデル」リストに移動します。

ユーザー・インタフェース開発者の観点から、アプリケーション・モジュールの中で可視性と利用可能性が最も高いアーティファクトはデータ・コントロールです。データ・コントロールのジョブは、アプリケーション・モジュールに含まれるビュー・オブジェクト・コンポーネントのプログラム関連ビューを提示すること、および関連するメソッドおよび組込みデータ操作を提示することです。これにより、データ・コントロールによって公開されるすべてのオブジェクトを設計時にビュー・レイヤー内のユーザー・インタフェース・コンポーネントにバインドできるようになります。

下図は、アプリケーション・ナビゲータの「データ・コントロール」セクションを示しています。



アプリケーション・モジュールとデータ・コントロールを使用して、ビュー・オブジェクト間のマスター/ディテール関係の定義を含む、より多くの処理を実行できます。詳細は、Oracle ADFドキュメントを参照してください。

まとめ

MVCアーキテクチャの観点によるアプリケーション・モジュールのもう1つの捉え方は、フレームワークのモデル・コンポーネントとビュー・コンポーネントの間のコミュニケーション手段であるという捉え方です。前述のとおり、MVCアーキテクチャの主なメリットの1つは、データからユーザー・インタフェースを切り離すことができる機能ですが、依然として、モデル・レイヤー内のデータ要素をビュー・レイヤー内のインタフェース・コンポーネントにバインドするメカニズムが必要です。これを実現するために、特別なADFビジネス・コンポーネント・オブジェクトが連携して機能します。