この章の内容は次のとおりです。
Fusion Webアプリケーションの高度な開発プロセスには通常、次のステップの組合せが含まれます。
アプリケーション・ワークスペースの作成: ウィザードを使用して、選択したテクノロジに必要なライブラリと構成の追加およびパッケージとディレクトリを含むプロジェクトへのアプリケーションの構成が、JDeveloperによって自動的に行われます。
図2-1 JDeveloperの「アプリケーション」ウィンドウ
データベース・スキーマの取得またはデータベース・オブジェクトの最初からのモデル化: JDeveloperでは、データベースのオフライン・レプリカを作成し、JDeveloperのエディタとダイアグラマを使用して定義の編集やスキーマの更新を行うことができます。
ユースケースの作成: JDeveloperのUMLモデラーを使用して、アプリケーションのユースケースを作成できます。
共有リソースの識別: アプリケーション全体または複数のアプリケーションで使用できるコンポーネントがある場合、そのコンポーネントをADFライブラリのJARとして開発およびパッケージ化すると、「リソース」ウィンドウでそれらのJARが使用可能になり、アプリケーションに追加できるようになります。
ADFビジネス・コンポーネントを使用する場合、ベース・フレームワーク・クラスを拡張する独自のカスタム・クラスを作成し、作成したビジネス・コンポーネントがそれらのカスタム・クラスをベースとするようにモデル・プロジェクトを構成: これらのカスタム・クラスにカスタム・コードを追加する初期プランがない場合でも、ベース・フレームワークの動作を後で変更し、それらの変更内容をアプリケーション内で作成済のすべてのビジネス・コンポーネントに適用するためのメカニズムが用意されています。
データにアクセスするためのビジネス・サービスの作成およびそれらのサービスに関するデータ・モデルの構築: データ・ソースに基づいて、ウィザードまたはダイアログを使用してビジネス・サービスを作成します。または、ビジネス・サービスを最初から作成し、後からデータベース表に関連付けることもできます。また、サービスをUMLダイアグラム内に直接作成することも可能です。
これらのビジネス・サービスは、ADFモデルと密接に統合されるADFビジネス・コンポーネント・サービスにすることが可能です。ADFモデルは、検証ルールやその他のタイプのビジネス・ロジックを宣言的に実装でき、データを容易にUIコンポーネントにバインドすることを可能にします。または、それらをEJBセッション・ビーンやWebサービスなど別のタイプのサービスにしてさらにADFモデル・データ・コントロールを作成し、データ・バインディングを有効にして宣言的ビジネス・ロジックを実装できます。
ビジネス・サービスへの宣言ロジックの追加(コントロール・ヒント、検証ルールなど)。
ADF Facesのベース・ユーザー・インタフェースの実装(ページ・テンプレートやレイアウトなど)。
アプリケーション・コントロールおよびナビゲーションを定義するためのADFタスク・フローの設計: ダイアグラマを使用し、ナビゲーションおよび制御フロー・ケースを視覚的に決定します。JDeveloperによって、ベースとなるXMLが作成されます。図2-2に、顧客のログインを処理するADFタスク・フローについてSummitのサンプル・アプリケーションでのタスク・フローを示します。
図2-2 ADFタスク・フロー
データバインドされたUIコンポーネントの作成: オブジェクトを「データ・コントロール」パネルからページへドラッグし、生成するUIコンポーネントを選択することで、データバインドされたコンポーネントを作成して、基礎となるデータを表示できます。図2-3は、ADFタスク・フローのSummitサンプル・アプリケーションでページ・フラグメントに円グラフとしてコレクションをドロップして作成された円グラフを示しています。JDeveloperのバインディング・エディタを使用して、既存のUIコンポーネントをデータ・モデルにバインド(または生成されたバインドを変更)できます。図2-4は、同じ円グラフのバインディング・エディタを示しています。どちらの場合も、JDeveloperではバインディング・コードが生成されます。
図2-3 円グラフのデザインタイム表示
図2-4 円グラフ用のバインディング・エディタ
ページ固有の検証およびエラー処理の組込み: アプリケーションを作成したら、エディタを使用して、検証を追加し、エラー処理を定義します。
アプリケーションの保護: 「ADFセキュリティの構成」ウィザードを使用して、ベース・セキュリティ機能を有効にします。次に、ビジュアル・エディタを使用して、アプリケーションのリソースに対するセキュリティ・ポリシーを定義し、ロールを作成し、そのロールにテスト・ユーザーを移入します。
アプリケーションのMDSカスタマイズの有効化: 顧客が自社のユーザーにアプリケーションのカスタマイズを提供したり、セッション内でユーザーがUIコンポーネントに加えた変更を永続化できるようにしたりするには、カスタマイズ・クラスを作成してそれをデザインタイムにアプリケーションで使用可能にし、カスタマイズ可能にするページに対してシード・カスタマイズを有効にします。
テストおよびデバッグ: JDeveloperに用意された統合アプリケーション・サーバーにより、パッケージ化せずにアプリケーションのテストを完全に行い、それをスタンドアロン・サーバーにデプロイできます。JDeveloperには、ブレークポイントを設定してデータを調べることができるツールのADF宣言デバッガも含まれています。
リファクタ: アプリケーションのテスト後(またはアプリケーションをデプロイした後でも)、コンポーネントの名前を変更したり、コードを再編成する必要がある場合があります。JDeveloperには、この作業を簡単に実行でき、不具合が生じる原因となる可能性のある変更を防止するためのリファクタ・ツールが備わっています。
サービス指向アーキテクチャ(SOA)における他のアプリケーションとの統合: SOAプリンシパルを使用して、Fusion Webアプリケーションを既存または新規のアプリケーションと統合できます。
追加ビューの開発: アプリケーションを拡張して、タッチ・デバイス、デスクトップ・クライアントなど他のタイプのユーザー・インタフェースの機能を提供できます。図2-5に、ADFデスクトップ統合のSummitサンプル・アプリケーションからのExcelワークシートの入力フォームを示します。
図2-5 ADFデスクトップ統合のフォーム
アプリケーションのデプロイ: JDeveloperウィザードとエディタを使用して、デプロイメント・ディスクリプタ、JARファイルおよびアプリケーション・サーバー接続を作成および編集します。JDeveloperを使用してアプリケーションをスタンドアロン・アプリケーション・サーバーに直接デプロイするか、または他のデプロイ・ツールを使用できます。
この項では、ADFテクノロジ・スタックに基づいた一連の機能豊富なエンタプライズ・アプリケーションである、Oracle ADFのSummitサンプル・アプリケーションの1つを作成する手順の概要を説明します。Summitサンプル・アプリケーションは、顧客、顧客の注文、製品に関するデータ保持の機能を持つスポーツ用品サプライヤをサポートしています。
図2-6は、その顧客の1つの概要が表示されているアプリケーションのページを示しています。
図2-6 Summitサンプル・アプリケーション
アプリケーションを作成する手順の概要は次のとおりです。
Oracle RDBMSをローカル・システムまたはアクセスできるリモート・マシンにインストールします。
サポートされる特定のバージョンのOracle Databaseの詳細は、http://www.oracle.com/technetwork/developer-tools/jdev/documentation/index.html
で「動作保証情報」を参照してください。
Summitスキーマをデータベースにインストールします。
注意:
Summitスキーマは、JDeveloperのオフライン・データベース・ツールを使用して、SummitデータベースをインストールするためのSQLスクリプトとともにJDeveloperアプリケーション・ワークスペース内に作成されています。データベースをインストールするには、JDeveloper内のスキーマのプロジェクトからSQLスクリプトを実行します。
JDeveloperで、Summit_Extensions
プロジェクトのアプリケーション・ワークスペースを作成します。このプロジェクトの出力は、コール側のデータベース・プロシージャに関連する一部のユーティリティ・コードを含むライブラリで、後からSummitサンプル・アプリケーションで使用され、その他のアプリケーションに対しても便利です。
JDeveloperで、メイン・アプリケーション用の新規アプリケーション・ワークスペースを作成します。「新規ギャラリ」で、「ADF Fusion Webアプリケーション」テンプレートを選択し、アプリケーション・ワークスペースを作成するための確認ウィザードで手順を完了します。このアプリケーション・ワークスペースは、ADFビジネス・コンポーネント・ビジネス・サービスを保持するためのモデル・プロジェクトおよび「ADF Faces」ページと「ADF Controller」タスク・フローを保持するためのView-Controllerプロジェクトで構成されています。
アプリケーションのモデル・プロジェクトに、拡張された機能が最終的に追加されるADFビジネス・コンポーネント実装クラス(oracle.jbo
パッケージ内)を拡張するスタブ・カスタム・クラスを作成します。次に、プロジェクトの「プロジェクト・プロパティ」ダイアログで、ADFビジネス・コンポーネント・ベース・クラスを更新し、生成する新規ビジネス・コンポーネントがこれらのカスタム・クラスに基づくようにします。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFビジネス・コンポーネント拡張クラスの作成に関する項を参照してください。
これにより、アプリケーションのサブクラスで選択可能なベース・フレームワーク・クラスに対して後から変更を加えることができるようになります。たとえば、Summitサンプル・アプリケーションはSummitEntityImpl
でoracle.jbo.server.EntityImpl
をサブクラスに分け、nextValSequence()
メソッドを提供するため、エンティティ・オブジェクトが指定されたデータベース順序から次の値を容易に読み取ることができるようになります。
アプリケーションのモデル・プロジェクトで、Summitサンプル・アプリケーションのデータ・モデルを構成するADFビジネス・コンポーネント・サービスを作成します。これらには、エンティティ・オブジェクト、ビュー・オブジェクト、およびアプリケーション・モジュールが含まれます。作業の多くを表からのビジネス・コンポーネントの作成ウィザードで実行できます。このウィザードでは、データベース表の外部キーに基づいたエンティティ・アソシエーション、ビュー・オブジェクト間の関係を示すビュー・リンク、および作成するビジネス・コンポーネントのUMLダイアグラムを生成することもできます。
使用するすべてのデータベース表のエンティティ・オブジェクト、アプリケーションで作成する必要のあるSQL問合せのビュー・オブジェクト、指定されたユーザー・タスクに必要なビュー・オブジェクトを集計するためのアプリケーション・モジュールが必要です。たとえば、Summitサンプル・アプリケーションには次のものが備わっています。
顧客、注文、製品、倉庫、地域、国などに関する情報を保存するデータベース表に対するエンティティ・オブジェクト。
アプリケーション内のエンティティ・オブジェクトで表されるデータベース表間の各外部キーの関係に対応するエンティティ・アソシエーション。
データバインドされたUIコンポーネントを作成する、ビュー・オブジェクト。大半のビュー・オブジェクトは1つまたは複数のエンティティ・オブジェクト内の列に基づいていますが、いくつかのものはデータベースに対する直接のSQL問合せに基づいており、読取り専用です。
様々なビュー・オブジェクト間の関係を示すビュー・リンク。
次の3つのアプリケーション・モジュール。
BackOfficeAppModule
。Summitの従業員が顧客および注文のデータベースを管理する際に必要な機能を開発するために必要なビュー・オブジェクトを含みます。
CustomerSelfServiceAppModule
。顧客のアプリケーションに必要な機能を開発するために必要なビュー・オブジェクトを含みます。
SummitAppModule
。2つの他のアプリケーション・モジュールをネストし、それらのすべてのサービスを必要とするアプリケーションを後で開発する場合、それらのアプリケーション・モジュールに含まれるサービスを提供します。
図2-7は、拡張された実装クラスおよびアプリケーション・モジュールを含む、Summitサンプル・アプリケーションのデータ・モデル・プロジェクトの全体の構造を示しています。
図2-7 モデル・プロジェクトの「アプリケーション」ウィンドウ
宣言ロジックをビジネス・コンポーネントに追加して、UI開発者がビュー・レイヤーで行う必要のあるこのロジックのコーディングを減らし、生成されたUIコンポーネントの外観と動作が、同じビジネス・コンポーネントから生成される複数のUIコンポーネント間で一貫性を保つためのデフォルト値が存在するようにします。たとえば、Summitサンプル・アプリケーションには次のタイプの宣言ロジックが備わっています。
種々のビュー・オブジェクト属性に対するUIヒント。たとえば、CustomerVO
ビュー・オブジェクトのZipCode
属性は、そのデフォルトのラベルがZip code
(図2-8)であり、デフォルトの表示幅が20文字になるように構成されます。
ユーザーの入力が有効であることを確認するビジネス・ルール。これらのルールは、範囲や比較のようなビルトイン・ルール・タイプの形式や自分で挿入できる式の形式で提供されます。
値リスト(LOV)オブジェクト。これを使用して選択リスト、およびデータベース表や静的リストのコンテンツに基づくその他のUIコンポーネントを作成できます。LOVオブジェクトを使用して、ユーザーの入力を検証することも可能です。
一時属性。これにより、注文アイテムの表示リストにおける総額など、動的に計算された値を表示するコンポーネントを作成できます。
入力コンポーネントに対するデフォルト値。
主キーの属性。この属性は、oracle.jbo.domain.DBSequence
データ・タイプを使用するように設定されているため、新規の行の主キー属性値がデータベース順序から取得されるようになります。たとえば、CustomerEO
エンティティ・オブジェクトのId
属性はoracle.jbo.domain.DBSequence
に設定されており、その値は新規行がデータベースに挿入されると順番に次の値を呼び出すデータベース・トリガーから取得されます。
図2-8 ビュー・オブジェクトの概要エディタ
アプリケーションのUIプロジェクトにおけるプロジェクトのメイン・ページの作成: Summitサンプル・アプリケーションにはindex.jsf
ページがあり、このページはWebインタフェースにビジュアル形式を確立するUI要素を定義する<af:pageTemplate>
コンポーネントに基づいています。
アプリケーションのフローを定義するタスク・フローの作成: Summitサンプル・アプリケーションにはバインドなしタスク・フローが含まれています。これは、アプリケーションとバインドされたタスク・フローへのエントリ・ポイントとして機能し、顧客データの表示と更新および順序を管理します。Summitサンプル・アプリケーションには、次のタスク・フローが含まれています。
バインドなしタスク・フロー(adfc-config.xml
ファイルなど)。アプリケーションへのユーザーのエントリ・ポイントとして機能し、これには指定されたタスクのワーク・フローの境界を定めるバインドされたタスク・フローが含まれます。
customer-task-flow-definition.xml
バインドされたタスク・フロー。ユーザー・ナビゲーションおよび顧客情報の管理を処理します。このタスク・フローでは、コントロールになんらかのビューサイドのロジックを提供するマネージドBeanも指定されます。
create-edit-orders-task-flow-definition.xml
タスク・フロー。これによりユーザーは新規の注文を記録できるようになります。
index.jsf
ページへのリージョンの作成およびデータバインドされたUIコンポーネントの移入: これは次のサブ手順で構成されています。
タスク・フローのビュー・アクティビティに基づいたページ・フラグメントの作成。
「データ・コントロール」パネルからページへのオブジェクトのドラッグアンドドロップによるUIコンポーネントの作成。ビュー・オブジェクト・コレクションをドロップして、データバインドされたフォーム、表、ツリー、ゲージ、チャート、カルーセルなどのDVTコンポーネントを作成できます。ADFモデルによりデータ・コントロールにビルトインされている標準操作をドラッグアンドドロップして、標準ナビゲーションおよびCRUDコマンドのボタンを作成できます。
タスク・フローのindex.jsf
ページへのドラッグおよびそれらのADFリージョンとしてのドロップ。
特に、Summitサンプル・アプリケーションには次のフラグメントが備わっています。
Customers.jsff
。これはビュー・アクティビティとしてcustomer-task-flow-definition.xml
バインドされたタスク・フローに埋め込まれます。
Orders.jsff
。これはビュー・アクティビティとしてcreate-edit-orders-task-flow-definition.xml
バインドされたタスク・フローに埋め込まれます。
「ADFセキュリティの構成」ウィザードを使用して、アプリケーションのセキュリティを有効にし、ロールおよびテスト・ユーザーを確立します。デフォルトのロール以外に、Summitサンプル・アプリケーションにはアプリケーションの顧客およびアプリケーションの従業員のロールが用意されており、それぞれのロールに適したリソース権限が付与されています。