Service Locator[J2EEパターン]

インターネットで調べてみると、色々な解説がありましたし、
クラス図も異なる物ばっかりでした。
私は「J2EEパターン 第2版」とSunの「Core J2EE Patterns - Service Locator」を読んでいた時にもそのように感じました。

二つとも同じパターンを紹介されているだが、クラス図には違う物が書かれていると見えていたので、結構悩んでいました。


  • 分かりやすかった例

  • それは「J2EEパターン 第2版」であげられたJDBCの例でした。
    Webアプリにおき、JDBCに接続する際に、データベース接続初期化処理はシステム全体では、一回行え、そのインスタンスを唯一し、共有するのが理想の設計だろう。クライアント(ロジック)側からこの唯一のインスタンスを利用し、セッション毎にコネクションを作成するのを望ましい。
    このような事を実現するために、データベース接続初期化処理の部分をSingletonパターンを利用すれば出来るはずだが、システム内には、このような初期化を行うインスタンスが1つに限らずに、集中的に管理できればソースコードを書く分量も少なくなるはずでしょうと。ここまで考えてきたら、 Service Locatorの良さを少し見えてきたでしょう。
  • Service Locatorのコア

  • いきなり異なるクラス図からデザインパターンを理解するのが難しかったが、1つのデザインパターンは色々変化していても、コアの部分は変わりません。
    賢い2人の技術者の異なるクラス図を理解し、共通点が見つかれば、Service Locatorのコア部分も分かるでしょう。

    以下は二つクラス図の共通点:
    1. client        → サービスの利用側
    2. ServiceLocator    → 唯一のインスタンスを格納する場所
    3. IntialContext     → サービスの初期化を行うクラス
    4. BusinessService/Target→ サービスを提供する本体

  • 僕の理解

  • Service Locatorパターンとは、唯一のインスタンスを管理する方法の1つであると思います。
    唯一のServiceLocator?という容器の中で、データベースを初期化を行うような唯一のインスタンスを格納します。そして、格納するために、そのインスタンスを作成し、初期化を行う必要なIntialContext?(訳:サービスの全体を初期化すること)を利用し、クライアント(client)はサービスを利用するために、ServiceLocator?に問い合わせして(使用する・Lookup)、サービスを提供するBusinessService?(/Target)の唯一のインスタンスを取得し、利用できるようになるでしょう。
    システムに必要な唯一のインスタンスはデータベースに接続する物だけでなく、他にも色々あるが、いくつあっていても、1つのServiceLocator?を利用すれば、比較に短いソースコードでそれらのインスタンスの利用もやりやすくなるでしょう。
  • サンプル

  • JNDIデータソースを利用したデータベースに接続するサンプル

コメント

このブログの人気の投稿

Linux(UNIX)、MS-DOS、OpenVMS コマンド対応表

ECスペシャリストに生まれ変われ!