ヘッダーをスキップ
Oracle Application Development Framework Forms/4GL開発者のための開発者ガイド
10g(10.1.3.0)
B40013-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

E ADF Business Components J2EE設計パターン・カタログ

この付録では、ADF Business Components層によって自動的に実装されるポピュラーなJ2EE設計パターンの概要を示します。

この付録には、次の項が含まれます。

E.1 ADF Business Componentsによって実装されるJ2EE設計パターン

Oracle Application Development Frameworkのビジネス・コンポーネント部品とJDeveloper用の関連する設計時拡張機能を使用すると、高性能かつ機能豊富で正確な階層構造を持つJ2EEビジネス・サービスを構築するための規範的なアーキテクチャが得られます。ADF Business Components層によって自動的に実装される多数の設計パターンの概要を、表E-1に示します。おなじみのSunのJ2EE Blueprintsのパターンもあれば、ADF Business Componentsによって追加された設計パターンもあります。

表E-1 ADF Business Componentsによって実装されるJ2EE設計パターン

パターンの名前と説明 ADF BCによる実装方法

モデル/ビュー/コントローラ

データおよびプレゼンテーションの役割が正しく分割され、複数のタイプのクライアント・ディスプレイで同じビジネス情報を使用できます。

ADFアプリケーション・モジュールが提供するモデル/ビュー/コントローラというアプリケーション・オブジェクトの汎用的な実装により、あらゆるアプリケーションまたはサービスに対するアプリケーション・データ・モデルの公開が簡単になり、論理的な作業ユニットの境界を宣言的に指定することが容易になります。JDeveloper 10gではUI中心のフレームワークおよびタグ・ライブラリも提供され、これにより開発者はビュー・レイヤーおよびコントローラ・レイヤーを簡単に実装できます。

インタフェース/実装の分離

コンポーネントのAPIまたはインタフェースが、その実装クラスから正確に分離されます。

ADF Business Componentsにより、クライアント層から(インタフェースを介して)アクセス可能な機能とそのビジネス層の実装の論理的な分離が強制されます。カスタム・インタフェースおよびクライアント・プロキシ・クラスの作成は、JDeveloperにより自動的に処理されます。

サービス・ロケータ

クライアントからより簡単に使用できるように、サービスの検索に関する技術的な詳細情報が抽象化されます。

ADFアプリケーション・モジュールの検索に使用されるシンプルな構成オブジェクトにより、背後にあるサービス・インスタンスを検索するための低レベルの詳細情報が隠蔽されます。Webアプリケーションの場合は、アプリケーション・モジュール・プール(一連のサービス・コンポーネントから構成される軽量プールであり、アプリケーションの拡張性を改善する)の実装も隠蔽されます。

制御の逆転

格納側コンポーネントは、開発者がコードの実行時期よりも実行内容を重視できるように、適切な時期にオーバーライド可能な特定のメソッドを起動することで、格納しているコンポーネントのライフサイクルを調整します。

ADFコンポーネントには、アプリケーションの処理過程で必要に応じてフレームワークによって起動される、オーバーライドが容易な一連のメソッドが含まれています。

依存性注入

コンポーネントの構成とコンテナへのアセンブリを保留することにより、アプリケーション・コードが簡単になり、構成の柔軟性が高くなります。

ADFは、外部のXMLメタデータ定義ファイルからそのすべてのコンポーネントを構成します。そのフレームワークにより、ビュー・オブジェクト・インスタンスのような依存オブジェクトはアプリケーション・モジュール・サービス・コンポーネントに、エンティティ・オブジェクトはビュー行にと、実行時に自動的に注入されるので、遅延ロードが実装されます。コンポーネントのカスタマイズされた任意のサブクラスによる該当コンポーネントの実行時ファクトリ置換がサポートされるので、オンサイトでのアプリケーションのカスタマイズが容易になります。ADF機能の大半はバリデータ・サブスクリプションおよびリスナー・サブスクリプションの動的注入によって実装されますが、それにより、XMLメタデータ内の各コンポーネントで構成されている宣言的な機能に基づいて、フレームワークのやり取りが調整されます。

アクティブ・レコード

データベース表またはデータベース・ビュー内の1行をラップしてデータベース・アクセスをカプセル化し、該当するデータ上でドメイン・ロジックを追加するようなオブジェクトを提供することにより、「すべてのものからすべてのものへ」というオブジェクト・リレーショナル・マッピングの複雑性が回避されます。

ADFエンティティ・オブジェクトでは、継承、アソシエーション、コンポジションのサポートも含め、ユーザーがよく使用するデータベースのマッピング機能を処理します。そのため、ユーザーは、オブジェクト・リレーショナル・マッピングについて考える必要がありません。また、宣言的なビジネス・ルールおよびプログラムによる1回かぎりのビジネス・ドメイン・ロジックがカプセル化される場所も提供されます。

データ・アクセス・オブジェクト

依存オブジェクトをそれぞれEnterprise Beanとして実装するのではなく、一連の軽量の永続クラスとして実装することにより、不要なマーシャリングのオーバーヘッドがなくなります。永続性に関する詳細が、保守が簡単な単一のクラスに分離されます。

ADFビュー・オブジェクトは、SQL文を使用してデータを読み取るためのデータ・アクセスの実装を自動化します。ADFエンティティ・オブジェクトは、軽量ビジネス・エンティティの永続的な保存を自動化します。ADFのビュー・オブジェクトとエンティティ・オブジェクトが協力して提供する高度で高性能なデータ・アクセス・オブジェクト層では、ビュー・オブジェクトを介して問合せが行われるデータを、コードを記述することなく、任意で完全に更新可能にすることもできます。

セッション・ファサード

セッションBeanを使用してエンティティBeanをラップすることにより、エンティティBeanの非効率的なクライアント・アクセスと機密性の高いビジネス情報の不注意な露見が回避されます。

ADFアプリケーション・モジュールは、サポートされているどのデプロイ・モードでも粒度の粗いサービス・ファサード・アーキテクチャを実装するように設計されています。EJBセッションBeanとしてデプロイされると、セッション・ファサード・パターンが自動的に実装されます。

値オブジェクト

1回かぎりのトランスポート・オブジェクトを作成し、クライアント・プログラムに必要な、関連する一連の属性をグループ化することにより、ネットワークの不必要なラウンドトリップが回避されます。

ADFによって実装される汎用的なRowオブジェクトは、クライアントからアクセスする必要がある任意の数および種類の属性から構成されるメタデータ・ドリブンのコンテナです。開発者は、汎用的なRowインタフェースを使用して遅延バインドのgetAttribute("Price")コールおよびsetAttribute("Quantity")コールを実行するか、OverdueOrdersRowのような早期バインドのRowインタフェースを生成して、getPrice()setQuantity()のような型保証メソッド・コールを有効にすることができます。ADF Rowオブジェクトは、単純な属性の集合よりも洗練されており、実行時に見直して行内の属性の数、名前およびタイプを規定することが可能なため、高度で汎用的なソリューションを実装することができます。

ページごとのイテレータ

1つの大きな塊をページサイズの一連のチャンクに分割して表示することにより、不必要なデータの送信が回避されます。

ADFによって実装される汎用的なRowSetインタフェースは、ビュー・オブジェクトSQL問合せの実行によって生成された結果セットを管理します。開発者はRowSetを使用して望ましいページサイズ(たとえば10行)を設定し、そのページサイズのチャンク単位で問合せ結果のページを上下に移動できます。データは遅延して取得されるため、ユーザーが実際にアクセスしたデータのみがバックエンドでデータベースから取得され、クライアント層ではページ内の一連の行がネットワークを介して1回のラウンドトリップで返されます。

優先リーダー

JDBC APIに直接アクセスすることにより、読取り専用データの不必要なオーバーヘッドが回避されます。これにより、アプリケーションは、クライアントに少数の属性しか必要でない場合、主キーによって全属性を探すかわりに、表示が必要な属性のみを取得することができます。このパターンの実装では通常、パフォーマンスのためにデータ整合性が犠牲になります。JDBCのrawレベルで実行される問合せは、Enterprise Beanによって表されるビジネス情報に対して行われた保留中の変更を確認しないためです。

ADFビュー・オブジェクトは、パフォーマンスを上げるために、データベースからデータを直接読み取ります。ただし、データ整合性に関する選択は、開発者に委ねられます。保留中の変更に関する更新の可能性または整合性(あるいはその両方)が必要な場合には、開発者はビジネス・データが表示の対象となる適切なエンティティ・オブジェクトと自身のビュー・オブジェクトを関連付けるだけで済みます。整合性が問題でない場合、ビュー・オブジェクトでは問合せを実行するだけで済み、不要なオーバーヘッドはありません。いずれの場合でも、開発者はJDBCデータ・アクセス・コードを記述する必要がありません。適切なSQL文をXMLディスクリプタで記述するだけで済みます。

(Bean)ファクトリ

外部構成が可能な情報に基づいて、指定のインタフェースまたはスーパークラスの適切なサブクラスのインスタンス化および構成を実行時に実行できます。

すべてのADFのコンポーネントのインスタンス化は、ファクトリ・クラスを使用し、XML構成メタデータに基づいて実行されます。そのため、特殊なコンポーネントの実行時置換が可能になり、アプリケーションのカスタム化が促進されます。

エンティティ・ファサード

1つ以上のビジネス・エンティティのデータおよび動作の制限的ビューを提供します。

ADFのビュー・オブジェクトは、基礎となる1つ以上のエンティティ・オブジェクトの組合せから属性およびメソッドの任意のセットを公開し、操作対象となる単一の論理値オブジェクトをクライアントに提供できます。

Value Messenger

クライアントの値オブジェクトの属性と、双方向に表示される中間層のビジネス・エンティティ情報の同期が維持されます。

ADFのビュー・オブジェクトの実装により、クライアント側値オブジェクトとの調整が実行され、EJB層に対するバッチ属性変更のキャッシング、および中間層ビジネス・ロジックの結果として発生するバッチ属性更新の受信が実行されます。ADF Value Messengerの実装は、これを実現するためのどのような種類の非同期メッセージングも必要としないように設計されています。

続行

ステートレスなWebソリューションの拡張性を備えたステートフルなプログラミング・モデルの容易さおよび生産性を開発者に提供します。

ADFのアプリケーション・モジュール・プーリングと状態管理機能により、開発者にこのような付加価値が提供されます。これにより、アプリケーション・サーバー層のリソースが個々のユーザーに占有されることを回避できます。ただし、ユーザーがチューニングできるユーザー・アフィニティによるステートレスな最適化がサポートされます。