Oracle Application Development Framework(Oracle ADF)は9.0.5.1以上のOracle JDeveloperに含まれるコンポーネントで、開発者は、J2EEエンタープライズ・アプリケーションのレイヤーの実装方法を、さらに柔軟かつオープンに決定することができます。Oracle ADFは、バックエンドのビジネス・サービス(データソース)に対するデータ・コントロールの抽象化を導入し、Oracleの既存のデータ・バインディング・オブジェクトを一般化してこれをサポートします。Oracle ADFのこれらの機能により、開発者はJ2EEアプリケーション・アーキテクチャに対し、一貫性のある交換可能なモデル・レイヤーを構築できます。
この章では、JDeveloperでのJ2EEアプリケーション開発をOracle ADFがサポートする方法について、概要を説明します。
このマニュアルは、JDeveloperを使用して、J2EEプラットフォーム(Java 2 Platform, Enterprise Edition)向けのエンタープライズ・ビジネス・ソリューションを実装する、エンタープライズ・アプリケーション開発者を対象としています。エンタープライズ・アプリケーションは様々なコンポーネントから構築され、各コンポーネントは標準的なテクノロジに基づいています。J2EE準拠の開発ツールであるJDeveloperでも、次の標準テクノロジを使用したエンタープライズ・アプリケーションの開発をサポートします。
JavaServer Pages: ユーザー・インタフェースの表示を扱います。
Apache Strutsフレームワーク用サーブレットおよびJavaBeans: アプリケーション・フローを管理します。
Enterprise JavaBeans: アプリケーションの状態を管理し、ビジネス・ロジックを定義します。
JDeveloperではこれらの標準テクノロジ以外のテクノロジも選択でき、典型的なJ2EEの構成を拡張できます。次の図に示すように、開発者は様々なテクノロジの中から使用するテクノロジを選択できます。
このマニュアルの目的は、これらのテクノロジを組み合せて、それぞれのアプリケーションのニーズに対応する方法を開発者に示すことです。開発が容易であること、およびJDeveloper IDEの設計時機能を活用するベスト・プラクティスであることが、推奨の基準となります。
この章の以降の項では、JDeveloperが提供するアプリケーション開発の選択肢について、さらに詳しく説明します。選択した方法の組合せによって、アプリケーションの信頼性と開発者の生産性を向上し、デプロイまでの合計時間を短縮する、ベスト・プラクティスが実現します。
追加情報は、次を参照してください。
チーム開発、テスト、およびJ2EEプラットフォームへの本番デプロイをサポートするJDeveloper IDE機能の詳細は、JDeveloperのヘルプ・システムを参照してください。これらのトピックは、このマニュアルの対象範囲外です。
J2EE関連のラーニング・リソースの一覧は、この章の最後の「関連資料」を参照してください。
エンタープライズ・アプリケーションは、通常、その分散コンポーネント・アーキテクチャを実現するために複数のサーバーにデプロイされます。クライアント側の、アプリケーションのうちユーザーが使用する部分は、ブラウザベースのアプリケーションにすることも、またはJava Swingコンポーネントをベースにしたスタンドアロン・クライアントにすることもできます。JDeveloperは、次の2つのデータ・バインドされたWebアプリケーション用ユーザー・インタフェース・テクノロジと、1つのスタンドアロン・クライアントをサポートします。
標準のJSPページおよびHTML要素
Oracle独自のADF UIXページ(専用のADF UIXユーザー・インタフェース・コンポーネントのセットを含む)
Oracle独自のADF JClientバインディング付きの標準Java/Swingコンポーネント
エンタープライズ・アプリケーション構築用のJDeveloper IDEでは、すべてのスタイルのアプリケーション・クライアントを平等にサポートします。画面設計者は、WebページまたはSwingフォームのどちらを作成する場合でも、データ・コントロール・パレットと呼ばれる操作性の高い単一の設計ツールを使用して、データ・バインドされたUIコンポーネントを処理します。
中間層に対しては、アプリケーションのビジネス・ロジックを定義するための複数のテクノロジが用意されています。J2EEプラットフォームでは、Enterprise JavaBeansコンポーネントがアプリケーション用の永続層を提供し、クライアントとバックエンドのデータ・ストア間のやり取りを管理します。これに対しJDeveloperでは、ビジネス・ロジックの開発者は次の各種テクノロジを使用して同じ機能を実装できます。
標準のEnterprise JavaBeansコンポーネント
Oracle ADF Business Components(トランザクション・アプリケーションで必要とされるデザイン・パターンを多数実装)
JavaBeansコンポーネントをベースとした、OracleAS TopLinkマッピング・オブジェクト
または中間層でトランザクション操作をサポートする必要がない場合(つまりユーザーが変更をコミットまたはロールバックできる場合)には、次のテクノロジを使用して、ビュー・レイヤーおよびコントロール・レイヤーにデータ・アクセス操作およびメソッド実行操作を提供できます。
Webサービス
標準のJavaBeansコンポーネント
これら5種類のビジネス・サービスは、すべて設計時にJDeveloperのデータ・コントロール・パレットからアクセスできます。データ・コントロールはビジネス・サービスを表しているため、Swing UI開発者、ページ設計者、またはコントローラ・レイヤー開発者は、選択したテクノロジ・スタックに関係なく、一貫した単一の設計環境から作業できることになります。
注意: JDeveloperでは、ビジネス・ロジックを定義するビジネス・オブジェクトをビジネス・サービスと呼びます。Oracle ADFモデル・レイヤー・オブジェクトはビジネス・サービスの実装を表し、すべてのビジネス・サービスに対して一貫した方法でアプリケーションへのアクセスを提供します。前述のとおり、JDeveloperは、Oracle ADFですぐに使用できる様々なビジネス・サービス・テクノロジを提供します。 |
次の項では、JDeveloperが提供する各種テクノロジを使用して、Model-View-Controllerアーキテクチャに基づくアプリケーションを実装する方法について説明します。
対話形式のエンタープライズ・アプリケーションに対するJ2EEのアーキテクチャ・デザイン・パターンは、Model-View-Controller(MVC)と呼ばれます。MVCパターンは、分散されたアプリケーション・ロジックを複雑なユーザー・インタフェースと組み合せるようなアプリケーションに適しています。MVCパターンに基づくアプリケーションを開発する場合、アプリケーション・ロジックとユーザー・インタフェースを強制的に分割することを目標とします。
一般的には、モデルは基盤となるロジックを表し、ビューはビジュアルを表し、コントローラはユーザー入力の処理方法を指定するものです。データ・モデルが変更になると、そのモデルに依存するすべてのビューに変更が通知されます。このように状態と表示を分割することにより、エンタープライズ・アプリケーションの次のような重要な特徴を実現できます。
同じモデルをベースにした複数のビューを使用できます。たとえば、同じデータを表とグラフの両方の形式で表示できます。データ・モデルが更新されるとモデルから両方のビューに通知され、それぞれのビューで更新の有無を決定できます。
モデルには表示方法は指定されないため、基になっているモデルに影響を与えずにビューを変更または作成することが可能です。
ビューの応答メカニズムは、コントローラを使用して指定します。たとえば、キーボード入力を受け取ったときの対応はコントローラが決定します。そのためには、2つのレイヤー間で情報を渡すためのオブジェクトが新たに必要となりますが、その手間に見合うだけのメリットがあります。各層のアプリケーション・レイヤーを明確に分けることで、開発チームにおける役割と責任の分割が簡単になります。
JDeveloperでは、次の表で説明するように、設計時のサポートによってモデル、ビューおよびコントローラの間の関係が確立されるため、統合作業を最小限にすることができます。
レイヤー | ブラウザベースのWebアプリケーション | Javaクライアント・アプリケーション |
---|---|---|
モデル・レイヤー | WebアプリケーションとJavaクライアントに共通な、Oracle ADFモデル・レイヤーと呼ばれるデータ・バインディング用のシン・レイヤーで、ビジネス・オブジェクトへのアクセスを提供します。Webアプリケーションでは、モデル・レイヤーのインスタンスは標準のStrutsアクション・クラスで作成されます。 | JavaクライアントとWebアプリケーションに共通な、Oracle ADFモデル・レイヤーと呼ばれるデータ・バインディング用のシン・レイヤーで、ビジネス・オブジェクトへのアクセスを提供します。Javaクライアント・アプリケーションでは、モデル・レイヤーのインスタンスはパネルの初期化中にJavaコードで作成されます。 |
ビュー・レイヤー | JSPのWebアプリケーションでは、HTML、StrutsタグおよびJSTLタグがビュー・レイヤーを構成します。JDeveloperでは、この他にOracle ADF UIXコンポーネントと呼ばれるビュー・テクノロジが用意されています。JSPとADF UIXのどちらも、設計時の完全なサポートによってモデル・レイヤーに統合されます。 | Javaクライアントのグラフィカル・ユーザー・インタフェースでは、Swingの標準UIコンポーネントがビュー・レイヤーを構成します。JDeveloperでは、Swingコンポーネントに加えて、JClientコントロールと呼ばれる(グラフ・コントロールのような)高機能な複合ウィジェットにも、モデル・レイヤーとの設計時統合が提供されます。 |
コントローラ・レイヤー | ビュー・レイヤーから送られるリクエストをモデル・レイヤー内の適切なアクション・クラスにディスパッチする、Strutsアクション・サーブレット。Oracle ADF UIXテクノロジも、Strutsコントローラに完全に統合されます。 | Javaクライアントでは、Swingの標準UIコンポーネントがコントローラ・レイヤーの役割を果たします。この場合も、JDeveloperでは設計時にSwingコンポーネントに統合されます。 |
次の項では、Oracle ADFが提供するテクノロジ・スタックについてさらに詳しく説明します。
フレームワークを使用すると、開発者は適切に定義されたインタフェースをベースにしてコードを記述できます。これだけでも開発時間は大幅に削減されますが、J2EEフレームワークはエンタープライズ・アプリケーションに必要なインフラストラクチャを提供するため、J2EE環境でも有効です。つまり、J2EEフレームワークはJ2EEデザイン・パターンが表現する概念をより具体的なものにします。
すでに多くのWebアプリケーション開発者に知られているJ2EEフレームワークとして、Apache Software Foundationが提供するStrutsと呼ばれるフレームワークがあります。現在Webアプリケーション開発者は、Strutsフレームワークをアプリケーションのフロー管理に使用しています。Strutsフレームワークは、簡単に言えば、JavaBeansテクノロジと宣言的な定義ファイルによって定義されます。このフレームワークは、Webアプリケーションのビュー・レイヤーに、リクエスト処理用の、1箇所に集中したアクセス・ポイントを提供します。
この他にもJDeveloperでは、Oracle Application Development Framework(Oracle ADF)というフレームワークが用意されています。Oracle ADFは、全体として、ビジネス・サービス、モデル、コントローラおよびビューの各レイヤーを簡単に作成する手段を提供します。Oracle ADF全体は次のような構成となっています。
Oracle ADFを使用する際には、このフレームワークのコンポーネントをすべて使用することも、またはOracle ADFモデル・レイヤー、Oracle ADF UIXビューまたはOracle ADF BCビジネス・サービスを単体で使用することもできます。JDeveloperには、Oracle ADFフレームワーク・テクノロジの使用に関して、一切制限はありません。たとえば、JDeveloperでは、Oracle以外のADFビジネス・サービスをOracle ADF UIXのビュー・テクノロジと簡単に統合できます。適用可能なJ2EEテクノロジについては、このマニュアルの冒頭にある図を参照してください。
テクノロジ・スタックのカスタマイズを可能にする接着剤の役割をしているのが、Oracle ADFモデル・レイヤー(図中のOracle ADFデータ・コントロールとOracle ADFバインディング)です。このレイヤーのオブジェクトについては、「ADF Business Componentsの詳細」で説明します。ここでは、Oracle ADFモデル・レイヤーでは、使用できるビュー・テクノロジまたはバックエンドのビジネス・サービスに制限がないことを理解しておいてください。また、Oracle ADFレイヤーは統合用のシン・レイヤーとして設計されているため、Oracle ADFモデル・オブジェクトは、アプリケーションのパフォーマンスを低下させることなくデータ・バインディングをはじめとするサービスを提供します。
次の項では、JDeveloperを使用した、シームレスなエンタープライズ・アプリケーションを簡単にわかりやすく構築する方法について説明します。
Oracle ADFおよびJDeveloperの設計時には、反復的開発と作業の分割という、開発における2つの高度な概念がサポートされます。これらの概念は、以降の章で説明するOracle ADFのベスト・プラクティスの基礎となるものです。
役割ベースの開発を詳細に検証する前に、反復的開発のニーズを考慮してください。
開発者は、タスクを分析し、それを構成するパーツに分割するという方法で、ビジネスの問題にアプローチします。次に開発チームはアプリケーションのコンポーネント作成へと進みます。これには、モデル・データの抽象化、ユーザーが使用する画面、およびアプリケーション・フローを管理するコードが含まれます。開発段階は、反復的に進行することがよくあります。これは、アプリケーションの開発が進み、構成パーツの定義が明確になるにしたがって、新しい機能を追加するなど、アプリケーションに新たなコンポーネントを追加するケースが発生するためです。
このようにして多様なコンポーネントから作成されたアプリケーションは、その全体が一貫して機能する必要があります。この方法で作業するためには、IDEのツールに対して高度なビジュアル性と対話性が同時に求められます。堅牢なアプリケーションの作成には、機能の追加がレイヤー間で統合されたことについて、即座にフィードバックされることが不可欠です。JDeveloperでは、様々なビジュアル・ツール群によってこのニーズに対応しています。
Oracle ADF Business Componentsの各種ウィザード、Strutsページ・フロー・モデラー、JSPビジュアル・エディタおよびデータ・コントロール・パレットといったツールが、反復的開発をサポートします。1つのレイヤーでオブジェクトを作成すると、他のオブジェクトは各オブジェクトが所属するレイヤー内で新しいオブジェクトと関連付けられます。たとえば、Strutsページ・フロー・モデラーでアプリケーションのフロー制御を管理する開発者が、ページ設計者によって作成されたJSPページまたはOracle ADF UIXページにアクセスできます。同様に、ビジネス・サービスのオブジェクトはデータ・コントロール・パレットを介してOracle ADFモデル・レイヤーに公開されます。データ・コントロール・パレットには、UIコンポーネントのデータ・バインディング作成に使用された項目が、リアルタイムで表示されます。
エンタープライズ・アプリケーション構築時のもう1つのニーズとして、モデル/ビュー/コントローラのパラダイムが提唱する開発役割のサポートがあります。たとえばモデル・レイヤー設計者はモデル・データから何を公開するかを決定しますが、UI開発者がその方法を気にする必要はありません。同様に、ページ・フロー制御はアプリケーションの実際のページと緊密に統合されている必要がありますが、ページ設計者がそのためのJavaコードを記述する必要はありません。
Webアプリケーション開発では、モデル/ビュー/コントローラのパラダイムはModel 2と呼ばれ、ページにフロー制御ロジックが含まれることもあるこれまでの概念と区別されています。このことからもわかるように、それぞれのエキスパートが役割別に作業をすることには確実にメリットがあります。現在では、Strutsフレームワークが提供する統合メカニズムにより、ページ設計者はページ・ハンドラ・クラス(Strutsアクション)を宣言的に参照できます。同様に、JDeveloperでは、ビジュアル・エディタとデータ・コントロール・パレットの組合せ(設計時にOracle ADFモデル・レイヤーの作業をする場合)により、UIコンポーネントまたはStrutsアクションからデータおよびメソッドへのバインディングを簡単に行えます。その結果、Webページの場合、バインディング式はページ自体のマークアップ言語(HTML要素、Strutsフォーム・タグまたはOracle ADF UIX要素)の一部としてわかりやすく表現されます。
つまり、JDeveloperを使用して設計すれば、開発者はモデル、ビュー、コントローラの各領域にわたって作業でき、どのように統合が実施されるかについての詳細な知識は必要ありません。
このマニュアルは、Oracle ADFが提供するすべてのテクノロジ・スタックについて短時間で理解することを目的としています。アプリケーション開発の疑問を解決するには、次にあげる提案事項を検討してください。
「ビジネス・サービスとOracle Application Development Framework」を参考にして、モデル・データをアプリケーションに公開する場合に、ビジネス・ロジック開発者が最も容易に作成できるビジネス・サービスは何かを判断してください。Oracle独自のトランザクション・テクノロジであるOracle ADF Business Componentsを含む各ビジネス・サービスには、それぞれに独自の機能と長所があります。
作成するアプリケーションのスタイル(JSPページ、Oracle ADF UIXページまたはSwingフォーム用Oracle ADF JClientのどれを使用するか)を決定してください。各テクノロジの詳細は、「ビュー・テクノロジにおけるOracle ADFデータ・バインディングの概要」のビュー・レイヤーに関する項を参照してください。
ブラウザベースのアプリケーションを作成する場合で、Strutsフレームワークを使用するかどうか決定していない場合は、「Oracle ADFとStrutsの統合」のOracle ADFとコントローラ・レイヤーの統合に関する項を参照してください。JDeveloperでは、Strutsコントローラが不要な場合、Model 1スタイルのアプリケーション開発がサポートされます。ただし、このマニュアルではStruts統合についてのみ記載します。
ブラウザからJDeveloper IDEのクイック・ツアーを実行し、使用可能なエンタープライズ・アプリケーション開発ツールの概要を確認してください。クイック・ツアーには、JDeveloperのヘルプ・システムの「スタート・ガイド」からアクセスできます。
JDeveloperで、作成するアプリケーションのニーズを満たすテンプレートを使用して、アプリケーション・ワークスペースを作成してください。このテクノロジ・スコープ機能については、JDeveloperのヘルプ・システムの「アプリケーション設計ツールの使用」で説明しています。
アプリケーションの典型的な使用例を、最初から最後までの手順を追った文書で検証してください。詳細は、JDeveloperのヘルプ・システムの「Oracle ADFの使用」に記載されています。
アプリケーションの実装方法が決定したら、JDeveloperでアプリケーション・テンプレートを選択するかまたはカスタム・テンプレートを作成します。これによりIDEが整理され、適切な標準ライブラリを含むプロジェクト・フォルダが設定されます。テクノロジ・スコープ機能は、開発作業が進行中で、アプリケーションのニーズに対する選択肢を制限することが必要な場合に特に有効です。
ただし一度アプリケーション・テンプレートおよびテクノロジ・スコープを選択したからといって、JDeveloperからツールやテクノロジが永久に削除されるわけではありません。また、選択したテクノロジ・スタックを変更する必要がある場合でも、すべてのテクノロジにアクセスできなくなることはありません。
J2EEおよびJDeveloperの詳細は、次のリソースを参照できます。
Oracle Technology Network Japanのスタートガイド(新規ユーザー向け)は、http://otn.oracle.co.jp/what/index.html
を参照してください。
Oracle Technology Network JapanのOracle JDeveloperの製品情報は、http://otn.oracle.co.jp/products/jdev/index.html
を参照してください。
Oracle Technology Network JapanのOracle JDeveloperドキュメント・ページは、http://otn.oracle.co.jp/document/products/jdev/index.html
を参照してください。
J2EEに関するSun社のホームページは、http://java.sun.com/j2ee/
です。
Strutsに関するApache Software Foundationのホームページは、http://struts.apache.org/
です。