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つは、表からのビジネス・コンポーネントの作成ウィザードを使用してこれらをバッチ・モードで作成する方法です。
エンティティ・オブジェクトとアソシエーションは個別に作成できます。このプロセスは実質的にウィザード・アプローチと同一ですが、新規ギャラリの「ADFビジネス・コンポーネント」セクションからウィザードを選択するかわりに、「エンティティ・オブジェクト」を選択します。
また、物理データ・ソース・オブジェクト(表、ビューまたはシノニム)を基本として使用せずに、エンティティ・オブジェクトを作成することもできます。このオプションの場合、データ・ストア内にまだ存在しない表名を入力します。次に、各表属性を自動的に作成させるのではなく個別に定義する必要があります。後で、表を手動で作成することも、エンティティ・オブジェクト定義を使用して表を自動的に作成することもできます。
選択した表からエンティティ・オブジェクトを作成するプロセス中、データ・ディクショナリが読み取られ、フィールド/オブジェクト・データ型、主/一意キー、およびnull/非null制約が決定されます。また、選択した任意の表のデータベース・レベルで外部キー制約が定義されている場合、表間の関係を定義する名前付きアソシエーション・コンポーネントが作成されます。これらのコンポーネントは、MVCフレームワークのアプリケーション・ビューおよびコントローラ・モジュールで活用できます。
ビュー・オブジェクトの作成
ビュー・オブジェクトを最も適切に表現すると、SQL問合せに基づくラッパーになります。SQL問合せと同様、ビュー・オブジェクトには複数の異なるフレーバがあります。
-
読取り専用ビュー・オブジェクトは、SQL問合せから直接作成することも、エンティティ・オブジェクトに基づいて作成することもでき、ビジネス・ロジックによってデータ更新が必要ない場合に使用されます。
-
更新可能ビュー・オブジェクトは、物理データ・モデルに間接的にアタッチする必要があるため、常にエンティティ・オブジェクトに基づいています。
-
静的データ・ビュー・オブジェクトは、ビュー・オブジェクト内からデータを定義し、主に非動的参照に使用されます。
-
プログラム関連ビュー・オブジェクト(このドキュメントでは扱っていません)は、特別なユースケースで使用できます。
事前に、既存のエンティティ・オブジェクトで公開する属性をすべて使用することが分かっている場合は、デフォルトのビュー・オブジェクトを作成する近道があります。アプリケーション・ナビゲータから、対象のエンティティ・オブジェクトを右クリックしてから、新規デフォルト・ビュー・オブジェクトを選択します。残りのステップは「ビュー・オブジェクトの作成」ウィザードと似ていますが、より簡素化されています。ただし、属性を選択する機能の柔軟性が損なわれる点について妥協する必要があります。
エンティティ・オブジェクトに基づいていないビュー・オブジェクトは常に読取り専用です。この場合、ビュー・オブジェクトは、SQL問合せから直接作成されます。Oracle JDeveloperで使用可能なビュー・オブジェクト作成ウィザードを使用すると、問合せの作成は非常に簡単になります。読取り専用タイプのビュー・オブジェクトの有力候補には、SQLコードにデータ検証が埋め込まれている場合や、集合および集計済グループ化基準問合せを作成する必要がある場合が含まれます。
読取り専用ビュー・オブジェクトの作成
読取り専用ビュー・オブジェクトの作成は、エンティティ・オブジェクト・ベースのビュー・オブジェクトの作成の場合と同じように開始されます。ただし、「名前」ページで、エンティティ・オブジェクト・ベースのオプションを選択するかわりに、SQL問合せを介して読取り専用アクセスを選択します。残りのステップは異なります。
アプリケーション・モジュールおよびデータ・コントロールの作成
エンティティ・オブジェクトおよびビュー・オブジェクトとともに、ADFビジネス・コンポーネント・レイヤーには別途必要な部分があります。すべてのデータ集中型のアプリケーションが必要とするのは、アプリケーションのユーザー・インタフェースまたはビュー・コンポーネントから生成されるユーザー・タスクを取り込み、これらのタスクを、エンティティ・オブジェクトとビュー・オブジェクトに渡した後に物理データ・ストアに対して渡すことができる論理作業単位に変換するコンポーネントです。このような要件に対するOracle ADFの回答が、アプリケーション・モジュールです。アプリケーションのエンティティ・オブジェクトおよびビュー・オブジェクトの親コンテナとして機能することに加えて、アプリケーション・モジュールは、データベース接続の作成と保持および個々のデータベース・トランザクションの処理に対応します。
アプリケーションのスコープに応じて、ユーザー・タスクからデータベース・トランザクションへの変換をサポートする1つ以上のアプリケーション・モジュールが必要です。
アプリケーション・モジュールを作成する手順:
- Oracle JDeveloperアプリケーション・ナビゲータから、モデル・コンポーネントのプロジェクト・コンテナを右クリックしてから、「新規」を選択します。
- 新規ギャラリで、「ビジネス層」を展開し、「ADFビジネス・コンポーネント」、「アプリケーション・モジュール」の順に選択します。「OK」をクリックします。
- 「アプリケーション・モジュールの作成」ウィザードで、パッケージ名およびアプリケーション・モジュール名を入力します。「Next」をクリックします。
- 「データ・モデル」ページで、前に定義したビュー・オブジェクトを選択します。この際、オプションで、「データ・コントロール」パネルでの公開時にビュー・オブジェクトの目的が明確になるように名前を編集します。
- (オプション)「Java」ページで、アプリケーション・モジュールの動作をカスタマイズしたりアプリケーション・モジュールのクライアント・インタフェースからコールできるメソッドを追加したりできるJavaスタブ・ファイルを生成できます。(アプリケーション・モジュールが作成された後に編集することにより、後でJavaファイルを作成することもできます。)
ユーザー・インタフェース開発者の観点から、アプリケーション・モジュールの中で可視性と利用可能性が最も高いアーティファクトはデータ・コントロールです。データ・コントロールのジョブは、アプリケーション・モジュールに含まれるビュー・オブジェクト・コンポーネントのプログラム関連ビューを提示すること、および関連するメソッドおよび組込みデータ操作を提示することです。これにより、データ・コントロールによって公開されるすべてのオブジェクトを設計時にビュー・レイヤー内のユーザー・インタフェース・コンポーネントにバインドできるようになります。
下図は、アプリケーション・ナビゲータの「データ・コントロール」セクションを示しています。
アプリケーション・モジュールとデータ・コントロールを使用して、ビュー・オブジェクト間のマスター/ディテール関係の定義を含む、より多くの処理を実行できます。詳細は、Oracle ADFドキュメントを参照してください。