オブジェクト指向設計


コアJ2EEパターン - Session Facadeパターン

2008/07/11 00:51Update
TAGS: J2EE | パターン | Session Facade

Session Facade(セッション・ファサード)パターンは コアJ2EEパターン の一つであり、多層で分散するJ2EEアプリケーションにおいて、窓口となるSession Beanを配置することで、ビジネスオブジェクトの複雑さを隠蔽する役割を果たします。

本文は「問題」、「解決策」、「戦略」、「メリット」、「実装例」などからSession Facadeパターンについて説明します。

問題


多層分散のJ2EEアプリケーションでは、たくさんの小さなコンポーネント(Session Bean、EntityBean、DAO)によって、一連の業務を遂行します。

デザインが不適切な多くJ2EEアプリケーションでは、プレゼンテーション層のコンポーネントは、リモートコールによるビジネスロジック層のコンポーネントとのやり取りを大量発生してしまい、その結果、
◇ 性能ネック。大量のリモートコールがネットワーク上を通過するため、大きなネットワークのトラフィックは性能ネックになります。
◇ 複雑化。一つの業務を遂行するのに、大量な呼び出しをしてしまい、その結果システムが複雑になってしまいます。
◇ 重複コード。ビジネスロジック層のコンポーネントとのやり取りを各プレゼンテーションのコンポーネントに分散してしまうため、コードの重複が発生します。
◇ トランザクション管理の分散。粗粒度の業務のワークフローは各プレゼンテーションのコンポーネントに記述しなければならないので、トランザクション管理は分散してしまいます。

Session Facadeパターンはこれらの問題を解決します。

解決策


Use a session bean as a facade to encapsulate the complexity of interactions between the business objects participating in a workflow. The Session Facade manages the business objects, and provides a uniform coarse-grained service access layer to clients.
一連のワークフローでのビジネスコンポーネントとの複雑なやり取りを隠蔽するために、窓口(facade)となるSession Beanを配置します。また、ビジネスオブジェクトを管理し、クライアントに対して一貫した粗粒度のサービス単位を提供します。

Session Facadeパターンの構造
<<図>>


Client
    通常のJavaオブジェクトや、Business Delegate、または他のSession Beanなど
Session Façade
    ビジネスロジックをカプセル化したコンポーネント。複数ビジネスオブジェクトを管理して、クライアントに対して一貫した粗粒度のサービス単位を提供する
Business Object
    ビジネスオブジェクト

メリット


◇ 低結合度。クライアントとの依存関係を低くなり、低結合度を実現できます。
◇ 簡素化。クライアントに対して一貫した粗粒度のサービス単位を提供するため、容易に利用できるようになります。
◇ 性能向上。クライアントからのEJB呼び出し回数が減り、性能ネックとなるネットワークのトラフィックを減少することで、性能向上します。
◇ トランザクションの一元管理。粗粒度のSession Façadeにトランザクションを集中して管理できます。

戦略


Session Facadeパターンでは、窓口となるSession Beanはコントローラの役割を果たします。Session Facadeパターンの実装方法も、Beanの会話状態を保持するか、しないかによって次のような戦略があります。
Stateless Session Facade Strategy
Beanの会話状態を保持しないように実装する方法。窓口となるSession BeanはStateless(ステイトレス)となります。
Stateful Session Facade Strategy
Beanの会話状態を保持するように実装する方法。窓口となるSession BeanはStateful(ステイトフル)となります。

実装例


<<参考資料をご参照ください>>

関連パターン


◇ Facade [GoF]
    GoF FacadeパターンSession Facadeの元になります。

◇ Data Access Objectパターン
    Session Facadeパターンでは、Entity Beanの代わりにDAOを使ってデータベースの永続化することができます。

◇ Service Locatorパターン
    Session Facadeパターンでは、Service Locatorパターンを使ってビジネスオブジェクトをサーチ/アクセスすることができます。

◇ Business Delegateパターン
    プレゼンテーション層のコンポーネントは、さらに、Session Facadeをカプセル化したBusiness Delegateで、業務を遂行します。

◇ Broker [POSA1]
    Session Facadeは、EntityBeanコンポーネントとクライアント間の高結合度を打破します。

その他参考資料


Core J2EE Pattern Catalog
Core J2EE Patterns - Session Facade

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments