Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド 11gリリース1 (11.1.1.7.0) B52028-05 |
|
前 |
次 |
この章では、ADFビジネス・コンポーネント、ADFモデル、ADFコントローラおよびADF Facesリッチ・クライアントを使用するFusion Webアプリケーションの構築に使用されるOracle Application Development Framework (Oracle ADF)のアーキテクチャと主要機能、および開発プラクティスの概要について説明します。
この章の内容は次のとおりです。
Oracle Application Development Framework (Oracle ADF)は、JavaプラットフォームEnterprise Edition (Java EE)標準とオープン・ソース・テクノロジを基盤とするエンドツーエンドのアプリケーション・フレームワークです。Oracle ADFを使用すると、Web、ワイヤレス、デスクトップまたはWebサービス・インタフェースを使用してデータを検索、表示、作成、変更および検証するエンタープライズ・ソリューションを実装できます。宣言的な機能を提供するOracle ADFにより、ユーザーはコードの詳細ではなくアプリケーション作成ロジックに焦点を当てることができ、開発を簡易化および迅速化できます。Oracle JDeveloper 11gとOracle ADFを組み合せて使用すると、設計からデプロイに至る開発ライフサイクル全体に対応した環境が提供され、ドラッグ・アンド・ドロップによるデータ・バインディング、ビジュアルUI設計、チーム開発などの組込み機能を使用できます。
このガイド(および他のFusion Middleware開発者ガイド)の概念および手順を理解するために、Fusion Order Demoアプリケーションをダウンロードして参照できます。このアプリケーションのStoreFrontモジュールはFusion Webアプリケーション・テクノロジ・スタックを使用して構築され、ADFビジネス・コンポーネント、ADFモデル、ADFコントローラ、およびADF Facesリッチ・クライアントのコンポーネントを使用したJavaServer Facesページが含まれます。このモジュールのスクリーンショットおよびコード例は、このガイド全体で使用され、Fusion Webテクノロジ・スタックを使用するアプリケーションにおけるOracle ADFテクノロジの実際の使用例を示しています。Fusion Order DemoアプリケーションのStoreFrontモジュールのダウンロードおよび使用方法の詳細は、第2章「ADFサンプル・アプリケーションの概要」を参照してください。
Fusion Webテクノロジ・スタックを使用してアプリケーションを構築すると、業界のベスト・プラクティスに従うように、モデル・ビュー・コントローラ・アーキテクチャに準拠したビジネス・ロジック、ページ・ナビゲーション、ユーザー・インタフェースの明確な分離が実現します。図1-1に示すように、MVCアーキテクチャでは次のような構成になります。
モデル・レイヤーは、現在のページに関連したデータ値を表します。
ビュー・レイヤーには、データの表示および変更に使用するUIページがあります。
コントローラ・レイヤーでは、ユーザー入力を処理してページ・ナビゲーションを決定します。
ビジネス・サービス・レイヤーでは、データ・アクセスを処理してビジネス・ロジックをカプセル化します。
図1-2は、Fusion Webアプリケーション・アーキテクチャを構成する各ADFモジュールの場所を示しています。このフレームワークの中核モジュールは、データバインディング機能であるADFモデルです。ADFモデル・レイヤーにより、統一化されたアプローチを使用して、各ユーザー・インタフェースをコード記述なしで任意のビジネス・サービスにバインドできます。Fusion Webアプリケーション・テクノロジ・スタックを構成するその他のモジュールは、次のとおりです。
ADFビジネス・コンポーネント: ビジネス・サービスの構築作業を簡略化します。
ADF Facesリッチ・クライアント: JavaServer Faces (JSF)で構築されるWebアプリケーションに豊富なAJAX対応のUIコンポーネント・ライブラリを提供します。
ADFコントローラ: JSFをADFモデルに統合します。ADFコントローラは、JSFページ間のみでなく、メソッド・コールやその他のタスク・フローなど、他のアクティビティ間に制御を渡す再利用可能なタスク・フローなどの追加機能を提供することにより、標準JSFコントローラを拡張します。
注意: ADF Facesに加えて、Oracle ADFはSwing、JSPおよび標準のJSFビュー・テクノロジもサポートしています。これらのテクノロジの詳細は、JDeveloperのオンライン・ヘルプを参照してください。Oracle ADFでは、アプリケーションのビュー・レイヤーとしてのMicrosoft Excelの使用もサポートされます。詳細は、『Oracle Fusion Middleware Oracle Application Development Frameworkデスクトップ統合開発者ガイド』を参照してください。 |
サービス指向Java EEアプリケーションを構築する場合、コア・ビジネス・ロジックを1つ以上のビジネス・サービスとして実装します。これらのバックエンド・サービスは、適切なビジネス・ルールを適用すると同時に、必要に応じてビジネス・データの問合せ、挿入、更新、削除の手段をクライアントに提供します。ADFビジネス・コンポーネントは、高パフォーマンスで豊富な機能を持つ、データベース中心のサービスを提供および維持するための、組込みのアプリケーション・オブジェクトです。これらを使用すると、Java EEデザイン・パターンとベスト・プラクティスの実装方法がすぐに利用可能になります。
図1-3に説明するように、Oracle ADFはデータベース中心のビジネス・サービスを簡単に構築するために、次の主要なコンポーネントを提供しています。
エンティティ・オブジェクト
エンティティ・オブジェクトは、データベース表内の1行を表し、すべてのデータ操作言語(DML)操作を処理することでデータ変更を簡略化します。また、ビジネス・ロジックをカプセル化し、ビジネス・ルールが一貫して適用されることを保証します。エンティティ・オブジェクトを他のエンティティ・オブジェクトと関連付け、基盤となるデータベース・スキーマの関係を反映することで、複数のアプリケーションで再使用できるビジネス・ドメイン・オブジェクトのレイヤーを作成します。
ビュー・オブジェクト
ビュー・オブジェクトはSQL問合せを表し、その結果の操作を簡略化します。SQL言語を使用し、ユーザー・インタフェースで表されるエンド・ユーザーのタスクが必要とする形に、データを結合、フィルタ、ソートおよび集約します。これには、ビュー・オブジェクトを他のエンティティ・オブジェクトにリンクし、複雑度にかかわらずマスター/ディテール階層を作成する機能も含まれます。エンド・ユーザーがユーザー・インタフェースを使用してデータを変更すると、ビュー・オブジェクトはエンティティ・オブジェクトと連携し、変更内容が一貫して検証され、保存されます。
アプリケーション・モジュール
アプリケーション・モジュールは、UIクライアントがアプリケーション・データの操作に使用するトランザクション・コンポーネントです。これによって、エンド・ユーザー・タスクに関連した作業論理ユニットに関連する、更新可能なデータ・モデルやトップレベルのプロシージャおよびファンクション(サービス・メソッド)を定義します。
ヒント: Oracle Formsを以前に操作したことがある場合は、これらの機能を組み合せると、フォーム、データ・ブロック、レコード・マネージャ、およびフォーム・レベルのプロシージャまたはファンクションによって提供されるデータ中心の機能のセットと同じになることに気付くと思います。Oracle ADFでの主な違いは、ユーザー・インタフェースがデータ・アクセスおよび検証機能から明確に分離されていることです。詳細は、付録G「Oracle ADFでの一般的なOracle Formsのタスクの実行」を参照してください。 |
ADFモデル・レイヤーは、ビジネス・サービスの実装技術を抽象化し、異なるタイプのサービスの単一のプログラミング・インタフェースを提供します。データ・コントロールでは、関連するプロパティ、メソッド、タイプの情報を含め、サービスの操作とデータ・コレクションを表す標準のメタデータ・インタフェースを使用してこのインタフェースを提供します。JDeveloperでは、ビジネス・サービスによって公開される機能と属性は、「データ・コントロール」パネルのアイコンによって表示されます。ページにドラック・アンド・ドロップしてUIコンポーネントを作成できます。JDeveloperでは、ページとUIコンポーネントからサービスへのバインディングを自動的に作成します。ADFモデル・レイヤーによって、実行時に適切なXMLファイルからデータ・コントロールおよびデータ・バインディングを記述した情報が読み取られ、ユーザー・インタフェースとビジネス・サービスを結合する双方向の関係が実装されます。
Oracle ADFは、一般的なビジネス・サービス・テクノロジとしてすぐに使用可能なデータ・コントロール実装を提供します。JDeveloperとOracle ADFを組み合せて使用することで、ユーザー・インタフェースの作成時にドラッグ・アンド・ドロップによるデータ・バインディング機能を使用できます。ADFモデルでは、ADFアプリケーション・モジュールと次のサービス・テクノロジのサポートを提供します。
Enterprise JavaBeans (EJB)セッションBeanおよびJPAエンティティ
JavaBeans
Webサービス
XML
CSVファイル
Webアプリケーションのページ・フロー処理を主要機能とするコントローラ・レイヤーでは、ADFコントローラによってJSF上に拡張ナビゲーションおよび状態管理モデルが提供されています。JDeveloperでは、ページ、マネージドBeanのメソッド、CASE文、別のタスク・フローの呼出しなど、様々なタイプのアクティビティ間でアプリケーション・コントロールを渡すことのできるタスク・フローを宣言的に作成できます。
これらのタスク・フローは再利用可能で、それ自体またはページ内にネストすることもできます。ページ内にネストされたタスク・フローは、独自のナビゲート可能なページを含むリージョンになり、ユーザーはメイン・ページを離れずに様々なページと機能を表示できます。
ADF Faces Rich Client(略してADF Faces)は、AJAX機能が組み込まれた一連の標準JSFコンポーネントです。AJAXとは、非同期JavaScript、ダイナミックHTML (DHTML)、XMLおよびXmlHttpRequest
コミュニケーション・チャネルを組み合せたものです。この組合せを使用すると、ページを全面的に再レンダリングしないでサーバーにリクエストを送信できます。AJAXを使用すると、リッチ・クライアントのようなアプリケーションを標準インターネット・テクノロジで使用できますが、JSFではサーバー側の制御を可能にし、一般的なAJAXアプリケーションで頻繁に見られるJavaScriptへの過剰な依存を軽減します。
ADF Facesには、100を超えるリッチ・コンポーネントが含まれています。これには、階層形式のデータ表、ツリー・メニュー、ページ内ダイアログ、アコーディオン、デバイダ、ソート可能な表などがあります。また、ADFデータ視覚化コンポーネントも用意されています。これはFlashやSVGに対応したコンポーネントであり、動的チャート、グラフ、ゲージなどのグラフィックをレンダリングし、基礎となるデータをリアルタイムで表示できます。各コンポーネントはカスタマイズやスキニングに加えて、国際化とアクセシビリティの機能もサポートしています。
これらのフロントエンド機能を実現するために、ADF Facesコンポーネントではレンダリング・キットが使用されます。このレンダリング・キットは、コンポーネントの表示を処理するだけでない、リッチ機能に必要なJavaScriptオブジェクトも提供します。この組込みサポートを使用することによって、豊富なアプリケーションの構築に、フロントエンドまたはバックエンドの個々のテクノロジについての幅広い知識が不要になります。
ADF Facesは、Faceletsライブラリを使用するアプリケーションでも使用できます。Faceletsは、JSPエンジンの代替として使用できるJSF中心のXMLビュー定義テクノロジです。各コンポーネントのアーキテクチャおよび詳細情報など、ADF Facesの詳細は、Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイドを参照してください。
ADF Facesと同様に、Oracle ADFも次のビュー・テクノロジをサポートしています。
Apache MyFaces Trinidad: OracleからApache Software Foundationに寄贈されたオープン・ソース・コードです。ADF Facesコンポーネントは、これらのTrinidadコンポーネントを基盤にしています。
Java SwingおよびADF Swing: ADF Swingは、ADFモデル・レイヤーを使用するJava Swingアプリケーションを構築するための開発環境です。
ADF Mobile: モバイル・ユーザーをサポートするようにOracle ADFを拡張するフレームワークで、モバイル・デバイス上で動作するモバイル用ブラウザベース・アプリケーションまたはオンデバイス・アプリケーションの開発に活用できます。
Microsoft Excel: 他のビュー・テクノロジと同じバインディング原則を使用してデータにバインドするスプレッドシートを作成できます。詳細は、『Oracle Fusion Middleware Oracle Application Development Frameworkデスクトップ統合開発者ガイド』を参照してください。
Oracle ADFでは、開発プロセスを通して宣言的なプログラミング・パラダイムを使用することが重視されます。これによって、ユーザーは、アプリケーション作成のロジックに集中でき、実装の詳細を知る必要がなくなります。Oracle ADFとともにJDeveloper 11gを使用すると、データ・アクセス、検証、ページ・コントロールおよびナビゲーション、ユーザー・インタフェース設計、データ・バインディングでアプリケーションの宣言的メタデータを自動的に管理する生産性の高い環境が実現します。
高レベルのFusion Webアプリケーションの開発プロセスには通常、次の過程が含まれます。
アプリケーション・ワークスペースの作成: ウィザードを使用して、選択したテクノロジに必要なライブラリと構成の追加およびパッケージとディレクトリを含むプロジェクトへのアプリケーションの構成が、JDeveloperによって自動的に行われます。
データベース・オブジェクトのモデル化: データベースのオフライン・レプリカを作成し、JDeveloperのエディタとダイアグラマを使用して定義の編集やスキーマの更新を行うことができます。
ユースケースの作成: UMLモデラーを使用して、アプリケーションのユースケースを作成できます。
アプリケーション・コントロールおよびナビゲーションの設計: ダイアグラマを使用して、アプリケーション・コントロールおよびナビゲーションのフローを視覚的に決定します。JDeveloperによって、ベースとなるXMLが作成されます。
共有リソースの識別: アプリケーションにドラッグ・アンド・ドロップするだけで、インポートされたライブラリを表示したり、使用できるリソース・ライブラリを使用します。
データにアクセスするためのビジネス・コンポーネントの作成: データベース表から、ウィザードまたはダイアログを使用してエンティティ・オブジェクトを作成します。これらのエンティティ・オブジェクトから、アプリケーション内のページが使用するビュー・オブジェクトを作成します。エディタを使用して、検証規則およびその他のタイプのビジネス・ロジックを実装できます。
JSFによるユーザー・インタフェースの実装: JDeveloperの「データ・コントロール」パネルには、アプリケーションのビュー・オブジェクトが表示されます。ユーザー・インタフェースの作成は簡単で、オブジェクトをページにドラッグし、ベースとなるデータを表示するUIコンポーネントを選択するだけです。データバインドされていないUIコンポーネントの場合、コンポーネント・パレットを使用してコンポーネントをドラッグ・アンド・ドロップします。JDeveloperによって、すべてのページ・コードが作成されます。
ADFモデル・レイヤーを使用したUIコンポーネントとデータのバインディング: 「データ・コントロール」パネルからオブジェクトをドラッグすると、JDeveloperによってページとデータ・モデルとの間にバインディングが自動的に作成されます。
検証およびエラー処理の組込み: アプリケーションを作成したら、エディタを使用して、検証を追加し、エラー処理を定義します。
アプリケーションの保護: エディタを使用してロールを作成し、テスト・ユーザーに実装します。フラット・ファイル・エディタを使用して、これらのロールにセキュリティ・ポリシーを定義し、アプリケーション内の特定のリソースに割り当てます。
テストとデバッグ: JDeveloperには、統合されたアプリケーション・サーバーが含まれていて、パッケージ化してデプロイすることなく、アプリケーションを完全にテストできます。JDeveloperには、ブレークポイントを設定してデータを調べることができるツールのADF宣言デバッガも含まれています。
アプリケーションのデプロイ: ウィザードとエディタを使用して、デプロイメント・ディスクリプタ、JARファイルおよびアプリケーション・サーバー接続を作成します。
新規アプリケーションを作成する最初の手順は、アプリケーションに名前を割り当て、そのソース・ファイルを保存するディレクトリを指定することです。JDeveloperから提供されるアプリケーション・テンプレートを使用してアプリケーションを作成すると、作成するアプリケーションのタイプで必要とされる多くの構成ファイルが作成され、ワークスペースとともにプロジェクトに構成されます。
これらのテンプレートの1つがFusion Webアプリケーション(ADF)テンプレートで、ビューに対してADF Faces、コントローラに対してADF Page Flow、ビジネス・サービスに対してADFビジネス・コンポーネントを使用するWebアプリケーションを作成するために必要な正確に構成されたプロジェクトのセットを提供します。このテンプレートを使用してアプリケーション・ワークスペースを作成する場合、アプリケーションに必要なJSFおよびADF構成ファイルがJDeveloperにより自動的に作成されます。
「アプリケーション概要」の構成要素の1つに、「Fusion Webアプリケーションのクイック・スタート・チェックリスト」があります。このチェックリストは、Fusion Webアプリケーション作成の基本手順を提供します。図1-4に示すように、関連ドキュメント、前提条件、チェックリスト内の各手順のステータスを追跡する機能へのリンクが含まれています。
JDeveloperでは、アプリケーション内のビジネス・サービスに関連するすべてのソース・ファイルを含みModel
という名前のプロジェクトと、ADF Facesビュー・レイヤー用のすべてのソース・ファイル(コントローラ用のファイルを含む)を含みViewController
という名前のプロジェクトも作成されます。
JDeveloperでは、データ・モデル・プロジェクトに次のライブラリが追加されます。
ADFモデル・ランタイム
BC4J Oracleドメイン
BC4Jランタイム
BC4Jセキュリティ
BC4Jテスター
MDSランタイム
MDSランタイム依存性
Oracle JDBC
JDeveloperでは、ビュー・オブジェクトに次のライブラリも追加されます。
JSPランタイム
JSF 1.2
JSTL 1.2
ADF Page Flowランタイム
ADFコントローラ・ランタイム
ADFコントローラ・スキーマ
ADF Facesランタイム11
ADF Commonランタイム
ADF Webランタイム
MDSランタイム
MDSランタイム依存性
Commons Beautils 1.6
Commons Logging 1.0.4
Commons Collections 3.1
ADF DVT Facesランタイム
ADF DVT Facesデータバインディング・ランタイム
JSFページを追加すると、JDeveloperによってOracle JEWTライブラリが追加されます。
プロジェクトが作成された後は、必要に応じて名前を変更できます。その場合、JDeveloperを使用して追加のプロジェクトを作成し、アプリケーションに必要なパッケージとファイルを追加できます。
注意: アプリケーションのアーティファクト(タスクフローなど)を再利用する場合、第33章「アプリケーション・コンポーネントの再利用」のネーミング・ガイドラインに従って、名前の競合を回避する必要があります。 |
ヒント: アプリケーション・テンプレートで使用するデフォルト値を編集したり、独自のテンプレートを作成できます。その場合は、「アプリケーション」→「テンプレートの管理」を選択します。 |
図1-5は、アプリケーション・ナビゲータに表示されるStoreFrontModule
アプリケーションの様々なプロジェクト、パッケージ、ディレクトリおよびファイルを示しています。
詳細は、JDeveloperオンライン・ヘルプのJDeveloperの基本に関する項の、アプリケーションおよびプロジェクトの管理についての説明を参照してください。
ファイルを使用するには、ほとんどの場合、図1-6に示すようにエディタ・ウィンドウ、「構造」ウィンドウおよび「プロパティ・インスペクタ」を使用します。エディタ・ウィンドウでは、WYSIWYG環境に多くのファイルを表示でき、概要エディタにファイルを表示して宣言的に変更したり、ファイルのソース・コードを表示できます。「構造」ウィンドウには、現在選択されているファイルの構造が表示されます。このウィンドウでオブジェクトを選択した後、選択したオブジェクトのプロパティを「プロパティ・インスペクタ」で編集できます。
JDeveloperでは、アプリケーション・ワークスペースの作成後、データベース・スキーマからオフライン・データベースまたはプロジェクトにデータベース・オブジェクトをコピーし、.xml
ファイルとして保存されたオフライン・データベース・オブジェクトとして利用できます。次に、稼働中のデータベース接続でデータベース・オブジェクトを作成および編集するときに使用するものと同じエディタを使用して、プロジェクト内でデータベース・オブジェクト定義を作成および編集できます。また、オフライン・データベース・オブジェクトを他のオフラインまたは稼働中のデータベース・スキーマと比較したり、SQL文(CREATE
、REPLACE
およびALTER
を含む)を生成したりできます。
たとえば、アプリケーションによって定義されているデータベース接続からデータベース・ダイアグラムに表をドラッグすると、JDeveloperでは、稼働中またはオフラインのデータベースをモデリングする(オブジェクトの.xml
ファイル表現を作成する)ことができます。表および外部キーなどのデータベース定義のモデリングによって、スキーマの基本的な情報を視覚的に取得できます。ダイアグラムでは、列とキーをドラッグ・アンド・ドロップして、外部キー関係を複製、移動および作成できます。オフライン・モードでダイアグラム上でノードをモデリングする場合は、JDeveloperによって基礎となるオフライン・オブジェクトが作成され、アプリケーション・ナビゲータに表示されます。稼働中のスキーマを操作する場合は、ダイアグラムを修正すると、JDeveloperによってデータベース・オブジェクトが更新されます。同一のオフライン・データベース・オブジェクトから複数のダイアグラムを作成し、複数のプロジェクトにオフライン・データベースを展開できます。
図1-7に示すようなデータベース・ダイアグラムを使用すると、次の要素を視覚化できます。
表とその列
表間の外部キー関係
ビュー
オフラインの順序とシノニム
データベース・オブジェクトを直接作成および編集する場合は、ダイアグラムだけでなく、特定のデータベース・オブジェクト・エディタでも作業できます。オフライン・データベース・オブジェクトでの作業が終了したら、更新された新しいデータベース定義をオンライン・データベース・スキーマに生成できます。
データベース・ダイアグラムで作業する場合は、ダイアグラムをカスタマイズして、レイアウトの変更や、オブジェクトの表示方法とグループ化方法の変更を行ったり、依存性やリンク(URLなど)を指定する注釈をダイアグラムに追加したり、ダイアグラムの色およびフォント要素などの視覚的なプロパティを変更したりできます。
図1-7に示すデータベース・ダイアグラムでは、次のカスタマイズが行われています。
DISCOUNT_TRANSLATIONS
要素は、制約が非表示にされた表を示しています。
DISCOUNTS_BASE
要素は、一部の列定義(CREATED_BY
、CREATION_DATE
およびLASTUPDATED_BY
など)が非表示にされた表を示しており、ダイアグラムの構成要素はダイアグラム内に収まるようにサイズ変更されています(したがって一部の詳細が省略されています)。
DISCOUNT_TRANSLATIONS_SEQ
要素は、順序のプロパティが含まれるDISCOUNTS_SEQ
よりもコンパクトに表示された順序を示しています。
COUPON_USAGES
要素とELIGIBLE_DISCOUNTS
要素は、コンパクトな表示で異なる色を使用し、それぞれデータベース・スキーマ(FODOffline
)を示しています。
DISCOUNTS
要素は、表示されるビューです。この要素は、コンパクトなモードで、このビューを構成する表と、結合のタイプ(内部結合)を示しています。また、点線を使用して表の使用関係も示しています。
DISCOUNTS_BASE
要素とDISCOUNT_TRANSLATIONS
要素は、外部キー関係を示しています。
DISCOUNT_SEQ
要素は、注釈(点線矢印)を使用してDISCOUNTS_BASE
表との依存性を表しています。
Payments Grouping
要素は、HTMLリンク注釈(Customer Memberships
など)を使用してプロジェクトの他のダイアグラムを表示します。
Payments Grouping
要素は、グループの形(Click to Access
)で要素をネストしています。
データベース・ダイアグラムを使用したデータベース定義のモデリングの詳細は、JDeveloperオンライン・ヘルプのデータベース設計に関する項の、データベース・オブジェクトの作成、編集およびの削除についての説明を参照してください。
アプリケーション・ワークスペースを作成した後、ユースケースをモデル化して構築対象のアプリケーションに関するエンド・ユーザー要件を取得して伝達すると、開発プロセスを開始できます。図1-8は、JDeveloperのUMLモデラーを使用して作成した簡単なダイアグラムを示しています。このダイアグラムは、エンド・ユーザーがオーダー・リストを参照し、ドリルダウンしてオーダー詳細を参照している様子を示しています。ダイアグラムの注釈を使用すると、ユースケースを実装する画面上でエンド・ユーザーが参照する必要がある内容に関する特定の要件を取り込むことができます。たとえば、この場合、ユーザーはリストされているオーダーの詳細を選択します。
ユースケース・ダイアグラム作成の詳細は、JDeveloperオンライン・ヘルプのアプリケーションの設計および開発に関する項の、ダイアグラムによるモデリングについての説明を参照してください。
ユースケースのモデル化により、エンド・ユーザー要件を実装するために必要なユーザー・インタフェース・ページの種類を把握していきます。この時点で、アプリケーションのフロー設計を開始できます。Fusion Webアプリケーションでは、標準JSFナビゲーション・フローではなくADFタスク・フローを使用します。タスク・フローでは、ナビゲーションおよびアプリケーション・コントロールに対してよりモジュール化されたトランザクション対応のアプローチを使用します。標準JSFナビゲーション・フローと同様、タスク・フローには主に表示可能なページが含まれます。ただし、タスク・フローはページ間のナビゲーションを説明するのではなく、アクティビティ間のトランザクションを促進するものです。ナビゲーションとは別に、タスク・フローには、組み合せることでページ・フローとアプリケーション動作に影響を与えることができる否ビジュアル的なアクティビティも含まれます。たとえば、これらの否ビジュアル的なアクティビティでは、マネージドBeansへのメソッド呼出し、EL式の評価、または別のタスク・フローの呼出しが可能です。これにより、ビジネス・ロジックは表示されているページとは関係なく呼び出すことができるため、再利用しやすくなります。
図1-9は、Fusion Order DemoアプリケーションのStoreFrontモジュールからのcheckout-task-flow
タスク・フローを示しています。このタスク・フローでは、order
およびorderSummary
はページを表示するビュー・アクティビティであり、reconcileShoppingCart
はメソッド・コール・アクティビティです。ユーザーがこのフローを開始すると、reconcileShoppingCart
アクティビティ(緑色の円で示したフローのエントリ・ポイント)が呼び出され、対応するメソッドが呼び出されます。そこから、フローはorder
ページに続きます。制御は、order
ページからorderSummary
ページに渡されるか、ホームページに制御を戻すフローの終了ポイントのcontinueShopping
リターン・アクティビティに渡されます。
ADFコントローラでは、コントロール・フロー・ルールを使用してナビゲーションを定義するメカニズムを提供しています。コントロール・フロー・ルールの情報は、フローに関する他の情報とともに構成ファイルに保存されます。図1-10は、checkout-task-flow
タスク・フローの構造ウィンドウを示しています。このウィンドウは、コントロール・フロー・ルールなど、フローに構成された各項目を示しています。プロパティ・インスペクタ(デフォルトでは右下の位置)を使用すると、フローの様々な要素の値を設定できます。
ページとは別に、タスク・フローではページ・フラグメントを調整することもできます。ページ・フラグメントとは、別のJSFページのコンテンツとしてレンダリングされるJSF JSPドキュメントです。ページ・フラグメントおよびページ・フラグメント間の制御は、ページを作成する場合と同様にバインド・タスク・フローに作成し、タスク・フロー全体をリージョンとして別のページに挿入できます。リージョンは別のタスク・フローになるため、これによりメソッドの実行、式の評価、およびコンテンツの表示を個別に実行できますが、格納するページの残りのコンテンツは同じ状態のままです。たとえば、新規ユーザーを登録する前に、アプリケーションでどのような種類のユーザーを作成する必要があるかを判断する必要があります。このためのロジックはすべて、user-registration-task-flow
タスク・フローで処理され、registerUser
ページのリージョンとして使用されます。
また、リージョンによって再利用が可能になります。タスク・フローをリージョンとして作成し、タスクに必要な情報とタスクから返される情報を決定し、それらをリージョンのパラメータとして定義して値を戻すと、リージョンをアプリケーションの任意のページにドロップできます。パラメータの値によっては、異なるビューが表示される場合があります。
第III部「ADFタスク・フローの作成」では、タスク・フローの使用方法を詳しく説明しています。タスク・フローとその作成方法の一般的な情報は、第14章「ADFタスク・フローの概説」を参照してください。タスク・フロー・アクティビティの詳細は、第15章「タスク・フロー・アクティビティの使用」を参照してください。タスク・フローとパラメータをやりとりする必要がある場合は、第16章「タスク・フローでのパラメータの使用」を参照してください。リージョンの詳細は、第17章「リージョンとしてのタスク・フローの使用」を参照してください。トランザクション機能やページの必須の順序(トレイン)の作成方法など、タスク・フローの高度な機能の詳細は、第18章「複雑なタスク・フローの作成」を参照してください。タスク・フローを使用したダイアログの作成の詳細は、第19章「アプリケーションでのダイアログの使用」を参照してください。
アプリケーションの一部は、アプリケーション全体で再利用できる場合があります。たとえば、ユーザーが登録する場合やユーザーがオーダーを作成する場合に表示されるアドレスを作成する機能が必要な場合があります。または、開発プロセス全体で、アプリケーションの特定のコンポーネントをアプリケーション全体で共有する必要がある場合があります。アーティファクトをパッケージ化し、アプリケーション全体で再使用するためのADFライブラリを宣言的に作成できます。たとえば、アドレスを作成するプロセスのタスク・フローを作成する場合があります。このとき、そのタスク・フローを保存してライブラリとしてパッケージ化できます。このライブラリは他の開発者に送信可能で、受信した開発者はリソース・カタログにこれを追加でき、そこから必要なページにドラッグ・アンド・ドロップできます。図1-11は、JDeveloperのリソース・パレットを示しています。
アプリケーションを設計する際は、再利用の候補となるすべてのタスクに注意が必要です。ADFライブラリとしてパッケージ化および再利用できるADFアーティファクト、およびライブラリの作成と使用手順の詳細は、第33章「アプリケーション・コンポーネントの再利用」を参照してください。
通常、ビジネス・ロジックをADFビジネス・コンポーネントとして実装する場合は、次の手順を実行します。
アプリケーションによりトランザクションを実行する表を示すエンティティ・オブジェクトを作成します(トランザクションが実行されない場合、エンティティ・オブジェクトは必要ありません)。必要に応じて、検証規則およびビジネス・ルールを追加します。
データベースの問合せおよび更新を実行するエンティティ・オブジェクトと連動するビュー・オブジェクトを作成します。これらのビュー・オブジェクトを使用して、ビュー・レイヤーに表示できるデータを作成します。
アプリケーションのUIレイヤーで使用されるアプリケーション・モジュールを作成します。このアプリケーション・モジュールには、アプリケーションのWebページを介してユーザーが対話するデータ・モデルのビュー・オブジェクト・インスタンスとカスタム・メソッドが含まれます。
必要に応じて、リモート呼び出し用のWebサービスとしてサービスを公開します。
第II部「ビジネス・サービスの構築」では、これらのアーティファクトの作成方法を詳しく説明しています。第VI部「高度なトピック」では、ビジネス・オブジェクトの拡張、チューニング、状態管理などの補足情報を説明しています。
アプリケーションで表示され、操作されるデータについて理解すると、データベースを構築することができます(詳細は、JDeveloperオンライン・ヘルプのアプリケーションの設計および開発に関する項の、データベースの設計についての説明を参照してください)。データベース表が準備されている場合、これらの表を示す一連のエンティティ・オブジェクトを作成し、表に含まれるデータの変更を簡略化できます。エンティティ・オブジェクトを使用して表に関するデータ・アクセスおよび検証をカプセル化することにより、今日または将来作成するこれらの表と連携するページを一貫性のある方法で検証できます。作業の実行に応じて、実行時にアプリケーションで必要なOracle ADFランタイム・ライブラリを参照するように、JDeveloperによってプロジェクトが自動的に構成されます。
たとえば、StoreFrontModule
アプリケーションのStoreFrontService
プロジェクトには、アプリケーションに必要なビジネス・サービスが含まれています。図1-12は、該当するアプリケーションのデータベース表を表示する2つのエンティティ・オブジェクトを示しています。
ビジネス・レイヤーを作成するには、まずデータベース表に基づいてエンティティ・オブジェクトを作成します。表の間の関係は、対応するエンティティ・オブジェクト間のアソシエーションとして反映されます。また、エンティティ・オブジェクトとそのアソシエーションを作成した後で、それらのオブジェクトからデータベース表を作成することもできます。
エンティティ・オブジェクトが作成されると、エンティティのUIでの表示を簡略化するコントロールと属性のヒントを定義できるだけでなく、オブジェクトに動作を追加することもできます。詳細は、第4章「エンティティ・オブジェクトを使用したビジネス・ドメイン・レイヤーの作成」を参照してください。
ビジネス・オブジェクトの再利用可能なレイヤーが作成されると、アプリケーション・モジュールを実装することができます。アプリケーション・モジュールは、UIクライアントが使用できるデータモデルおよびサービス・メソッドを提供します。
アプリケーション・モジュールのデータ・モデルは、必要な問合せのカプセル化のために作成したビュー・オブジェクト・コンポーネントのインスタンスで構成されています。ビュー・オブジェクトでは、ユーザー・インタフェースで表されるエンド・ユーザーのタスクが必要とする形に、データを結合、計画、フィルタ、ソートおよび集約できます。エンド・ユーザーがデータを更新する必要がある場合、ビュー・オブジェクトでは、再使用可能なビジネス・ドメイン・レイヤー内のエンティティ・オブジェクトを参照します。ビュー・オブジェクトは、再利用可能であり、複数のアプリケーション・モジュールで使用できます。
データにアクセスするすべてのビュー・ページで、一貫した形式でデータを表示する場合、ビュー・オブジェクトにメタデータを構成して表示プロパティを指定できます。メタデータにより、1つの場所で表示プロパティを設定し、後で必要に応じて変更できるため、変更はデータを表示するすべてのページではなく1つの場所でのみ行います。逆に、ページで要求されるデータによって問合せを制御することもできます。すべての表示機能はページによって処理されます。詳細は、第5章「ビュー・オブジェクトを使用したSQL問合せの定義」を参照してください。
たとえば、図1-13に示すように、StoreFrontService
プロジェクトにはoracle.fodemo.storefront.store.queries
パッケージが含まれ、このパッケージにはStoreFrontModule
アプリケーションに必要な多くの問合せが含まれています。
さらに、外部アプリケーションに機能を公開する必要がある場合があります。このとき、サービス・インタフェースを通じてこの機能を公開できます。たとえば、StoreServiceAM
アプリケーション・モジュールは、Webサービスとして公開されます。このWebサービスは、図1-14に示すように、CustomerInfo
およびOrderInfo
ビュー・インスタンスを公開します。詳細は、第11章「サービス対応アプリケーション・モジュールの統合」を参照してください。
アプリケーションを開発する場合、ビジネス・コンポーネント・ブラウザを使用してビジネス・サービスを繰り返しテストできます。ブラウザを使用すると、サービスをテストするユーザー・インタフェースまたはその他のクライアントを使用したり作成せずに、ビジネス・サービスの問合せ、ビジネス・ロジック、および検証をテストできます。これにより、追加した最新の問合せまたはビジネス・ルールをテストし、問題の診断に要する時間を節約できます。アプリケーション・モジュールの開発およびテストの詳細は、第9章「アプリケーション・モジュールによるビジネス・サービスの実装」を参照してください。
またこのブラウザは、ADF宣言デバッガと対話し、ビジネス・サービスのデバッグを行えるようにします。作成する任意のカスタム・メソッドにブレークポイントを設定できます。詳細は、31.6項「テストとデバッグのためのビジネス・コンポーネント・ブラウザの使用」を参照してください。
計画段階で作成したページ・フローからページ・アイコンをダブルクリックすると、実際のJSPファイルを作成できます。ADF FacesアプリケーションのJSPの作成時には、*.jsp
ファイルではなく、(拡張子*.jspx
を使用する)XMLベースのJSPドキュメントを作成します。
ベスト・プラクティス: XMLベースのドキュメントの使用には、次の利点があります。
|
アプリケーションでJSPではなくFaceletsを使用する場合は、XHTMLファイルを作成できます。Faceletsは、JSPエンジンの代替として使用できるJSF中心のXMLビュー定義テクノロジです。
ヒント: Faceletページでは、 |
ベスト・プラクティス: Faceletsの使用には、次の利点があります。
|
ADF Facesには、ページのレイアウト全体の定義に使用できる多数のコンポーネントが用意されています。JDeveloperには、これらのコンポーネントを使用した事前定義済のクイック・スタート・レイアウトが含まれており、効率的に正しくページのレイアウトを決定できます。1列、2列または3列のレイアウトから選択でき、列の動作を指定できます。また、レイアウトに適用するテーマを選択すると、コンポーネントの一部に色が追加されます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』のクイック・スタート・レイアウトの使用方法に関する項を参照してください。
またOracle ADFでは、独自のページ・テンプレートを作成して使用できます。テンプレートの作成時に、開発者は(クイック・レイアウト・テンプレートの1つを使用または手動でレイアウトを作成して)ページのレイアウトを指定して、すべてのページに表示される静的コンテンツを提供し、ページごとに有効な値に置き換えられるプレースホルダ属性を作成できます。レイアウトの変更など、テンプレートが変更されるたびに、テンプレートを使用するページにも更新が反映されます。
StoreFrontModule
アプリケーションの大半のページで使用されているStoreFrontTemplate
テンプレートには、ブランド表示およびナビゲーションのための領域、3つのペインに分割されているメイン・コンテンツ用の領域、フッター用の領域が含まれています。テンプレートの設計者がブランド表示およびナビゲーションの位置を変更すると、実行時に、このテンプレートを使用するすべてのページにこの変更が自動的に反映されます。
第IV部「データバインドされたWebユーザー・インタフェースの作成」では、基本的なフォームから複雑な検索機能まで、異なるタイプのUI機能の作成方法を詳しく説明しています。
JSFでは、表示または修正(あるいはその両方)する情報にバインディングするために、単純な式言語(EL)を使用します(詳細は、http://java.sun.com/products/jsp/reference/techart/unifiedEL.html
を参照してください)。たとえば、特定のユーザー名を参照する#{userInfoBean.principalName}
、ユーザー名がSKINGかどうかを評価する#{userInfoBean.principalName eq 'SKING'}
などの式があります。汎用の式評価機能により、実行時にそれぞれString
、boolean
値が戻されるため、コードを必要とせずに、個々のオブジェクトとそのプロパティに自動的にアクセスできます。
特定のJSF UIコンポーネントの値は、実行時にそのvalue
属性によって決定されます。コンポーネントにはその値として静的テキストを割り当てることができますが、通常、value
属性には、表示データを決定するために実行時インフラストラクチャにより評価されるEL式のバインディングが含まれます。たとえば、現在ログイン中のユーザーの名前を表示するoutputText
コンポーネントには、value
属性に#{userInfoBean.principalName}
という式を設定できます。EL式を使用してコンポーネントの任意の属性に値を割り当てることができるため、データ駆動型の動的なユーザー・インタフェースを簡単に作成できます。たとえば、UIコンポーネントのrendered
属性に#{userInfoBean.prinicpalName !=null}
などのブール値の式を使用すると、ユーザーがログインしていないときにコンポーネントを非表示にできます。userInfoBean
の現在のインスタンスにプリンシパル名がない場合、rendered
属性はfalse
と評価され、コンポーネントはページに表示されなくなります。
通常のJSFアプリケーションでは、userInfoBean
オブジェクトのようなオブジェクトはマネージドBeanとして作成します。JSFランタイムでは、EL式でBeanを最初に参照した際に、Beanのオンデマンドのインスタンス化が管理されます。ただし、ADFモデル・レイヤーを使用するアプリケーションでは、UIコンポーネントの属性はマネージドBeanのプロパティまたはメソッドにバインディングされるのではなく、汎用データバインディング機能の実行にXML構成ファイルを使用するADFモデル・レイヤーに自動的にバインディングされます。これには、ユーザー・インタフェース・テクノロジとビジネス・サービス実装の分離を可能にする概念(データ・コントロールと宣言的バインディング)が実装されています。
データ・コントロールでは、サービスの記述にXML構成ファイルを使用します。設計時に、JDeveloperのようなビジュアル・ツールでメタデータを操作し、任意のデータ・コントロール操作やデータ・コレクションにUIコンポーネントを宣言的にバインドして、バインディングを作成できます。たとえば、図1-15は、JDeveloperの「データ・コントロール」パネルに表示されるStoreServiceAMDataControl
データ・コントロールを示しています。
パネルに表示されるコレクションは、StoreServiceAM
アプリケーション・モジュールに含まれる各ビュー・オブジェクト・インスタンスでの問合せによって返される行セットを表します。たとえば、「データ・コントロール」パネルのOrderPaymentOptions
というデータ・コレクションは、StoreServiceAM's
データ・モデルのOrderPaymentOptions
ビュー・オブジェクト・インスタンスを表します。OrderBillingAddress
というデータ・コレクションは子として表示されており、ビジネス・サービスの作成時に設定したマスター/ディテール関係を反映しています。それぞれのデータ・コレクションの各行で使用可能な属性は、子ノードとして表示されています。データ・コレクション・レベルの「操作」ノードには、ADFモデル・レイヤーでサポートされるデータ・コレクションに対する組込み操作(previous
、next
、first
、last
など)が含まれます。
注意: Webサービス、URLから取得されたXMLデータ、JavaBeans、EJBを操作するために別の種類のデータ・コントロールを作成する場合、これらは「データ・コントロール」パネルにも適切に表示されます。プロジェクトでこれらのデータ・コントロールのいずれかを作成する場合、JDeveloperでは構成情報を含むメタデータ・ファイルが作成されます。Oracle ADFアプリケーション・モジュールを操作する場合、アプリケーション・モジュールがすでにメタデータ駆動型のコンポーネントであり、データ・コントロールとして自動的に公開するために必要なすべての情報を含んでいるため、これらの追加ファイルを明示的に作成する必要はありません。 |
「データ・コントロール」パネルを使用して、データ・コレクションをビジュアル・エディタのページ上にドラッグ・アンド・ドロップすると、必要なバインディングが作成されます。図1-16は、「データ・コントロール」パネルからドラッグされ、JSFページにフォームとしてドロップされるStoreServiceAMDataControl
データ・コントロールからの CustomerRegistration
コレクションを示しています。
「データ・コントロール」パネルからデータバインドされたコンポーネントが最初にページにドロップされたときに、JDeveloperによりそのコンポーネントの関連ページ定義ファイルが作成されます。このXMLファイルは、ページ上でUIコンポーネントをサポートするバインディングのグループについて記述しています。ADFモデルでは実行時にこのファイルが使用され、ページのバインディングがインスタンス化されます。これらのバインディングは、バインディング・コンテナと呼ばれるリクエスト・スコープ・マップに保持されます。「データ・コントロール」パネルを使用してコンポーネントをページに追加するたびに、適切なバインディング・エントリがこのページ定義ファイルに追加されます。さらに、ドラッグ・アンド・ドロップによるデータ・バインディング操作を実行すると、JDeveloperにより、JSFページのJSF UIコンポーネントを示す、必要なタグが作成されます。「データ・コントロール」パネルの使用の詳細は、第12章「Fusion WebアプリケーションでのADFモデルの使用」を参照してください。
注意: 動的UIコンポーネントを使用すると、設計時ではなく実行時にバインディングを作成できます。動的コンポーネントを使用するには、ページからビュー・オブジェクトへのアクセスごとのデータの表示方法を決定するコントロール・ヒントをビュー・オブジェクトに設定します。これにより、複数のページ間でデータ表示を整合させ、また全ページを更新するのではなく、一箇所でのデータの表示方法を変更できます。詳細は、22.7項「実行時に表示するデータを決定する動的フォームの使用」を参照してください。 |
図1-17は、ADFモデルで宣言的なデータ・バインディングを使用する場合のJSFアプリケーションのアーキテクチャを示しています。ADFモデルとJSFを組み合せると、実際のアプリケーションに必要とされる典型的なマネージドBeanコードを大量に記述せずに済みます。
データを表示または更新するフォームおよび表の他に、検索フォーム、およびデータがバインドされた図とグラフを作成することもできます。データ・コントロールを使用して様々なタイプのページを作成する方法の詳細は、第IV部「データバインドされたWebユーザー・インタフェースの作成」の各章を参照してください。「データ・コントロール」パネル、およびUIデータがバインドされたコンポーネントを作成するためのその使用方法の詳細は、第12章「Fusion WebアプリケーションでのADFモデルの使用」を参照してください。
エンティティ・オブジェクトおよびビュー・オブジェクトでは、概要エディタを使用してビジネス・オブジェクトに検証を宣言的に追加できます。図1-18は、AddressEO
エンティティ・オブジェクトの概要エディタの「ビジネス・ルール」タブを示しています。
このタブでは、検証規則に加えて、検証が失敗した場合のエラー・メッセージの表示設定も行います。このような宣言的な検証を補足する場合は、Groovyスクリプト式も使用できます。サービス・レベルでの検証の作成の詳細は、第7章「検証とビジネス・ルールの宣言的な定義」を参照してください。
また、ADF Faces入力コンポーネントには、組込みの検証機能があります。required
属性を設定するか、事前作成済のADF Facesバリデータを使用して、コンポーネントに1つ以上のバリデータを設定します。ビジネス・ニーズに合せて、独自のカスタム・バリデータを作成することもできます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の「入力の検証および変換」を参照してください。
カスタムのエラー・ハンドラを作成して、ADFアプリケーションの実行中に発生したエラーをレポートできます。エラー・ハンドラを作成すると、アプリケーションの構成ファイルの1つにハンドラを登録するだけです。詳細は、28.10項「エラー処理のカスタマイズ」を参照してください。
Oracle ADFは、Java Authentication and Authorization Service (JAAS)に基づくセキュリティ実装を提供します。JAASは、Java Community Processを経てJava言語に追加された、標準的なセキュリティ・アプリケーション・プログラミング・インタフェース(API)です。それは、アプリケーションでのユーザーの認証と認可の実施を可能にします。Oracle ADFのJAASの実装は、パーミッションベースです。これらのパーミッションを定義したあと、アプリケーションのユーザーに関連付けるアプリケーション・ロールに付与します。アプリケーションのセキュリティ保護の詳細は、第30章「Fusion WebアプリケーションでのADFセキュリティの有効化」を参照してください。
Oracle ADF Webアプリケーションのテストは、他の任意のJava EEアプリケーションのテストとデバッグに似ています。大半のエラーの原因は、アプリケーションで定義される宣言情報内、またはページのOracle ADFバインディング・コンテナの実行時オブジェクトにアクセスするEL式内にある、単純で容易に修正できる問題です。多くのケースでは、宣言ファイルおよびEL式を検証すると大半の問題を解決できます。
宣言的ファイルまたはEL式が原因ではないエラーの場合、JDeveloperに含まれているADFロガーにより、ADFモデル・レイヤーAPIからランタイム・トレース・メッセージが取得されます。このトレースには、アプリケーション・エラーの原因をすぐに特定できるランタイム・メッセージが含まれます。ログ出力から特定のエラーを検索することもできます。JDeveloperには、ブレークポイントの設定が可能なツールのADF宣言デバッガも含まれています。ブレークポイントに達すると、アプリケーションの実行が一時停止され、Oracle ADFバインディング・コンテナの作業対象データを調べて、予測されるデータと比較することができます。第31章「ADFコンポーネントのテストとデバッグ」には、Fusion Webアプリケーションを正常にデバッグする方法についての有用な情報およびヒントが記載されています。
JDeveloperでは、テストのためのJUnitとの統合が提供されます。ウィザードを使用して、回帰テスト・ケースを生成します。詳細は、31.10項「JUnitを使用した回帰テスト」を参照してください。
JDeveloperを使用すると、アプリケーション内の異なるコンポーネントの名前を変更したり移動できます。たとえば、ビュー・オブジェクトの作成後に名前を変更する必要が生じたとします。JDeveloperを使用すると、名前を簡単に変更して、影響を受けるすべてのメタデータXMLファイルに変更を伝播できます。詳細は、第32章「Fusion Webアプリケーションのリファクタ」を参照してください。
Fusion Webアプリケーションは、JDeveloper内の統合WebLogicサーバーまたはスタンドアロン・インスタンスのいずれかにデプロイできます。デプロイメントの詳細は、第36章「Fusion Webアプリケーションのデプロイ」を参照してください。
Fusion Webアプリケーションは、Oracle SOA Suiteによって提供されるサービス指向アーキテクチャ(SOA)プリンシパルを使用して、既存または新規の任意のアプリケーションと統合できます。Oracle SOA Suiteに含まれる宣言型開発ツールにより、サービス、イベント、ビジネス・ルール、ビジネス・プロセス・フロー、その他のSOAテクノロジを使用して、複数のアプリケーションを容易に統合できます。
Fusion Webアプリケーションを構築して、容易に他のアプリケーションと統合できます。アプリケーション・モジュールは、サービスとして公開できます。また、たとえばビジネス・プロセスを開始するために使用できるイベントも作成できます。詳細は、第11章「サービス対応アプリケーション・モジュールの統合」を参照してください。アプリケーション・モジュールでは、その他のWebサービスも直接呼び出すことができます。詳細は、13.2項「アプリケーション・モジュールからのWebサービスのコール」を参照してください。アプリケーションは、タスク・フローを使用して統合することもできます。たとえば、タスク・フローを使用してビジネス・プロセス・フローを開始できます。詳細は、18.14項「タスク・フローでのBPELの使用」を参照してください。
Oracle SOA Suiteの詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』.を参照してください。
多くの場合、アプリケーションはチーム開発環境で構築されます。チームベースの開発プロセスは、1.3項「Oracle ADFによる開発」で説明した開発サイクルのとおり進められますが、開発者は通常、アプリケーションの様々な部分を同時に作成します。生産性の向上とは、効率的なアプリケーション開発を実現するため、チーム・メンバーが作業を分担し、標準の適用方法を理解し、ソース・コントロール・システムによってソース・ファイルを管理することを意味します。
大規模なアプリケーション開発を開始する前に、設計段階では通常、ユースケースの評価、タスク・フローおよび画面の計画、共有されるリソースの識別を行う必要があります。
次のリストは、初期設計が適用された場合の一般的なFusion Webアプリケーションの作業の分類方法を示しています。
インフラストラクチャ
DBAは、完成したアプリケーションの構築およびデプロイのためのAntスクリプト(またはその他のスクリプト・ファイル)を作成します。SQLスクリプトを開発して、アプリケーションで使用されるデータベース・スキーマを作成します。
エンティティ・オブジェクト
大規模な開発環境では、別の開発グループがアプリケーションのすべてのエンティティ・オブジェクトを構築します。残りのアプリケーションはこれらのオブジェクトに依存するため、エンティティ・オブジェクトはアプリケーションの開発の手順の1つとして、最初に完了する必要があります。
エンティティ・オブジェクトが完了すると、Oracle ADFライブラリを使用して他のチームと共有できます(詳細は、33.2項「ADFライブラリへの再利用可能なADFコンポーネントのパッケージ化」を参照してください)。他のチームは、リソース・パレットでカタログに追加してオブジェクトにアクセスします。自社アプリケーション開発プロセスでは、このように作業を分担しないことを選択できます。多くのアプリケーションでは、エンティティ・オブジェクトとビュー・オブジェクトは同じチーム(または1人)により開発され、1つのプロジェクト内に格納されます。
ビュー・オブジェクト
エンティティ・オブジェクトが作成され、ライブラリまたはプロジェクト内のいずれかに配置されると、(UIを構成する場合に)データ表示に必要なビュー・オブジェクトが必要に応じて作成されるか、または(SOAインフラストラクチャの他のアプリケーションがデータを必要とする場合に)サービス・データ・オブジェクトが提供されます。
Fusion Order Demoアプリケーションの構築では、特定のページまたはサービスの各開発者が、そのページまたはサービスのビュー・オブジェクトの作成を担当しました。これは、Fusion Order Demo内のビュー・オブジェクトとページでのその使用方法との間が密接に統合されていたためで、UIを構築したチームは対応するビュー・オブジェクトも構築していました。
開発中は、複数のビュー・オブジェクトが同じ機能を提供している場合があります。これらのビュー・オブジェクトは、オブジェクトの1つの問合せを変更して簡単に組み合せることができるため、各開発者のページまたはサービスのニーズに応じることができます。
ビュー・オブジェクトが配置された後は、アプリケーション・モジュールおよびデータ・コントロールを作成し、必要なカスタム・メソッドを追加できます。ビュー・オブジェクトの作成、冗長性の確認、およびアプリケーション・モジュールへのこれらの追加のプロセスは、繰返しのプロセスである場合があります。
ユーザー・インタフェース(UI)の作成
UI設計を適用し、ビュー・オブジェクトを配置し、データ・コントロールを作成すると、ビュー・オブジェクトを作成したチーム(これについては前項で説明済)または別のチームがUIを作成することができます。データ・コントロールを定義する前にUI設計者がページを作成する、UIファーストの手法を採用して開発することもできます。Oracle ADFでは、UI設計者が開発サイクルの初期に使用できるプレースホルダ・データ・コントロールが提供されます。詳細は、第29章「プレースホルダ・データ・コントロールによるページの設計」を参照してください。
別個のチームに分けられた多数のスタッフがアプリケーションを開発することから、開発を始める前に多数の標準を施行して、アプリケーションのすべてのコンポーネントが効率的に連携するようにする必要があります。チーム環境で作業する場合の標準化のために必要なアプリケーション内の領域を次に示します。
コード・レイアウト・スタイル
複数の人が効率よくコードを使用して作業できるようにするため、特定のコード・スタイルに準拠します。JDeveloperを使用すると、組込みコード・エディタの動作方法を選択できます。ほとんどの設定は、ユーザーのコード・エディタとの対話方法(表示設定など)に影響し、一部の設定はコードのフォーマット方法に影響します。たとえば、左の大カッコの配置位置やインデントのサイズなどを指定するコード・スタイルを選択できます。また、所有している既存のコード・スタイルをインポートしたり、独自のコード・スタイルを作成してエクスポートし、チームで使用できるようにします。詳細は、JDeveloperオンライン・ヘルプのJDeveloperの基本に関する項の、ソース・エディタのプリファレンスの設定についての説明を参照してください。
パッケージのネーミング規則
パッケージのネーミング方法のみでなく、各パッケージを構成するオブジェクトの数と種類の粒度も指定する必要があります。たとえば、StoreFrontモジュールのすべてのマネージドBeanはview.managed
パッケージ内にあります。他のBeanからアクセスされたヘルパータイプのメソッドを含むすべてのBeanはutil
パッケージ内(Oracle ADF用とJSF用)にあります。すべてのプロパティ・ファイルは、common
パッケージ内にあります。
ページ
1.3.7項「JSFによるユーザー・インタフェースの設計」で説明しているように、UIを操作しているすべての開発者が使用するテンプレートを作成できます。これにより、すべてのページのルック・アンド・フィールを同じにするだけでなく、テンプレートを変更し、これを使用するすべてのページにこの変更を適用することができます。詳細は、20.2項「ページ・テンプレートの使用」を参照してください。
テンプレートの使用とは別に、ページのネーミング標準を設定する必要もあります。たとえば、ページのアプリケーション内での使用箇所を名前に反映する場合があります。この目標を実現するために、サブディレクトリを作成してレイヤー構成を追加できます。
接続名: ほとんどのJDeveloperとOracle ADFのオブジェクトは、プロジェクトごとに一度のみ作成され、参照および使用するユーザーに関係なく、定義によって同じ名前を持ちますが、データベースの接続名は、同じ接続名の詳細にマッピングする場合でも、個々のチーム・メンバーによって作成できます。名前の不一致によって、不要な競合が生じる場合があります。まず、チーム・メンバーが大文字/小文字が区別される共通の接続名に同意し、該当チームの全メンバーがそれを使用する必要があります。
チーム環境で作業する場合、ソース・コントロール・システムを使用する必要があります。デフォルトでは、Oracle JDeveloperはCVSおよびSubversionのソース・コントロール・システムの統合サポートを提供しており、その他のサポートについては、拡張機能を通じて利用できます。JDeveloperの別のシステムで作業できるように、拡張子を作成することもできます。JDeveloper内のこれらのシステムの使用の詳細は、JDeveloperオンライン・ヘルプのアプリケーションの設計および開発に関する項の、バージョニングの使用についての説明を参照してください。
Fusion Webアプリケーションでのソース・コントロール使用の提案を次に示します。
チェックアウトの自動化
JDeveloperを使用すると、ソース・コントロール・サーバーへの接続を作成し、ソース・コントロール・ウィンドウを使用してソースをチェックアウトできます。ファイルをローカルで操作する場合、変更されたファイルは保留中の変更ウィンドウにより通知されます。JDeveloperに組み込まれているApache Antを使用すると、スクリプトを作成できます。作成したスクリプトを使用して、すべてのアプリケーション・ワークスペースをローカルでビルドできます。これにより、変更されたファイルをソース・コントロール・リポジトリにチェックインする前にソース・ファイルをコンパイルできます。Apache Antを使用したスクリプトを作成する方法については、JDeveloperオンライン・ヘルプのアプリケーションの設計および開発に関する項の、Apache Antによる構築についての説明を参照してください。
ビルドの自動化
連続的な統合ツールを実行するようにしてください。ファイルがソース・サーバーにチェックインされると、このツールを使用して、ファイルが変更されたかどうかを認識したり、変更されたファイルを指定した間隔でチェックしたりできます。この時点で、このツールを使ってサーバーでAntスクリプトを実行して、完全なソースをコピーし(チェックアウトではなくコピー)、これらのファイルをコンパイルすることができ、コンパイルが成功すると、アプリケーションの(開発者用ではなく)コンシューマが使用するZIPファイルが作成されます。このスクリプトによって、次にソース・ディレクトリがクリーンアップされます。連続的な統合ツールを実行すると、リポジトリ内のコードの品質が向上し、開発者が頻繁に更新を行うようになるため、更新の量と競合の数が減少します。連続的な統合ツールの例としては、Apache GumpとCruise Controlがあります。
ファイルの更新およびコミット
Subversionの処理時、更新およびコミットは各ファイルではなく「作業用コピー」レベルで行う必要があります。各ファイルをコミットおよび更新しようとしている場合、サポートするメタデータ・ファイルがなく、そのためアプリケーションのコミット済コピーが破損する場合があります。
マージ競合の解決
JDeveloperのADFビジネス・コンポーネント・プロジェクトでビジネス・コンポーネントの追加または削除を実行すると、JDeveloperはそれをプロジェクト・ファイル(.jpr
)に反映します。作成(またはリファクタ)によって新しいパッケージの中にコンポーネントが格納されると、JDeveloperはそれをプロジェクト・ファイルとADFビジネス・コンポーネント・プロジェクト・ファイル(.jpx
)に反映します。これらXMLフォーマットのプロジェクト管理ファイルはマージ競合の発生が減るように最適化されていますが、マージ競合はまだ発生する可能性があり、それらのマージ競合は、影響を受ける各ファイルのコンテキスト・メニューにあるJDeveloperの「競合の解決」オプションを使用して解決する必要があります。
ADFビジネス・コンポーネントのXMLコンポーネント・ディスクリプタ・ファイル、ADFビジネス・コンポーネント・プロジェクトのプロジェクト・ファイル(.jpr
)または対応するビジネス・コンポーネント・プロジェクト・ファイル(.jpx
)でマージ競合が解決した後は、該当するプロジェクトを一度閉じてから再度開き、最新バージョンのコンポーネント定義を使用していることを確認してください。その場合は、該当するプロジェクトをアプリケーション・ナビゲータで選択し、JDeveloperのメイン・メニューから「ファイル」→「閉じる」を選択した後、該当プロジェクトをアプリケーション・ナビゲータで再度展開します。
この開発者ガイドに加えて、アプリケーションでのOracle ADFの活用方法を理解するために役立つ次のリソースも用意されています。
JDeveloperのキュー・カード: JDeveloperのキュー・カードを使用すると、Oracle ADFを使用したアプリケーション開発プロセスを段階的に学習できます。それらは、用意されている例とサンプル・スキーマを使用するように設計されていますが、独自のデータを使用することもできます。キュー・カードには、詳細な背景情報を紹介したトピック、各ステップの進め方をカード形式で説明するViewlet、およびコード・サンプルも含まれています。キュー・カードでは、簡単なエンドツーエンドのタスクにより、Oracle ADFの基本機能および操作方法を迅速かつ簡単に理解できます。
Oracle Technology Networkのチュートリアル: これらの簡潔なチュートリアルを使用すると、価値のある実践的な体験が可能になり、各レッスンを基盤として各自の実践に応用できます。
Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド: ADF Facesコンポーネントおよびアーキテクチャを使用するための詳細な情報、手順および演習が記載されています。
このガイドの後半で説明するように、Oracle JDeveloper 11gおよびOracle ADFでは、宣言的な開発技術を最大限に活用し、機能豊富なデータベース中心のJava EEアプリケーションを構築するための、生産性の高いビジュアルな環境を提供します。しかし、Oracle Designerのように、高レベルなアプリケーション構造定義に基づく完全なユーザー・インタフェース生成を提供するツールの使用経験がある場合、Java EE開発でも同様の機能が必要になる場合があります。その場合は、Oracle JHeadstart 11g Application Generatorが適しています。これはOracle ADFの組込み機能を使用するJDeveloperの拡張機能で、アプリケーション・モジュールに対して完全なWeb階層の生成を実現します。ADFビジネス・サービスのために設計したデータ・モデルを開始点として、JHeadstartによりJDeveloper環境に追加された統合エディタを使用し、より高レベルのアプリケーション構造の定義を繰り返し修正できます。これらのエディタでは、生成されたWebユーザー・インタフェースのビュー・オブジェクト情報の機能と組織を制御します。チェック・ボックスのチェック、およびドロップダウン・リストからの様々なオプションの選択によって、検索するリージョン、検証を含めた値リスト(LOV)、シャトル・コントロール、ネストされた表およびその他の機能などの様々な形式を含む、ページの論理階層を表すことができます。このような宣言的な選択では、Oracle FormsやDesignerのユーザーが使い慣れた用語が使用されるため、Web開発がさらに容易になります。アプリケーション構造定義に基づき、Oracle ADFおよびJSFが提供する最も高度な機能を容易に活用して、このガイドに示すベスト・プラクティスを自動的に実装する完全なWebアプリケーションを生成できます。
JHeadstart Application Generatorを実行する場合は、コードが生成されるのではなく、Oracle ADFベースのWebアプリケーションのすべての宣言的なビューおよびコントロール・レイヤーのアーティファクトが作成(または再生成)されます。これらのアーティファクトは、ADFモデル・レイヤーを使用し、ビジネス・サービスとしてADFアプリケーション・モジュールと連携します。生成されたファイルは、JDeveloperに組み込まれたビジュアル・エディタを使用して生成するファイルと同様のものです。JHeadstartにおける相違点は、高レベルの定義に基づいてファイルをバルク・ベースで作成し、生成されたページがエンド・ユーザーの要件に可能なかぎり一致するまで繰り返し修正できるということです。生成されるファイルは次のとおりです。
データバインドされたADF Faces UIコンポーネントを含むJSFページ
各ページのデータ・バインディングを表すADFモデル・ページ定義XMLファイル
ページ・フローを処理するJSFナビゲーション・ルール
ローカライズ可能なUI文字列を含むリソース・ファイル
Webユーザー・インタフェースを最大数まで生成した後は、JDeveloperの生産性の高い環境で結果を調整し、特に注意が必要なモデルとなるページに集中することができます。生成したページを変更した後は、Application Generatorのページの実行時に再生成されないように設定を調整できます。また、生成されたページとカスタム設計のページが同一のADF Faces UIコンポーネントを利用しているため、すべてのページに同一のルック・アンド・フィールが自動的に継承されます。価格、サポート、追加サービスの詳細を含め、JHeadstartの評価のための十分な機能のトライアルの入手方法については、Oracle Technology NetworkのJHeadstartに関するページ、
を参照してください。
http://www.oracle.com/technetwork/developer-tools/jheadstart/overview/index.html