コアJ2EEパターン - Session Facadeパターン
2008/07/11 00:51Update
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
問題
多層分散の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
Sponsored Link
- Relative Articles
- ASP.NETでのフロント・コントローラ(Front Controller)実装 - (2009/10/20 15:22)
- Factory Method パターン - ファクトリメソッドパターン - (2008/06/09 22:44)
- Abstract Factory パターン - 抽象ファクトリパターン - (2008/06/10 13:25)
- Singleton パターン - シングルトンパターン - (2008/06/10 15:36)
- Prototypeパターン - プロトタイプパターン - (2008/06/10 17:23)
- Builderパターン - ビルダーパターン - (2008/06/10 19:01)
- Adapter パターン - アダプターパターン - (2008/06/11 11:30)
- Composite パターン - コンポジットパターン - (2008/06/11 16:59)
- Interpreter パターン - インタプリタパターン - (2008/06/13 15:42)
- Chain of Responsibility パターン - 責任の連鎖パターン - (2008/06/14 00:28)