Enterprise Integration Patternsとは
「Spring Integration」は、企業システム統合を実現するためのフレームワークで、Gregor Hohpe氏がまとめた「Enterprise Integration Patterns」(以下、EIP※1)の概念に従っている。EIPは、その名の通り企業システムにおける統合パターンをカタログ化したもので、統合処理のモデル化を行っている。以下が基本的なモデルだ。
まず、アプリケーションから他のアプリケーションに情報を送るための媒体を"チャンネル"と呼ぶ。チャンネルの実体はTCP/IPコネクション、データベース共有、USBメモリなどがあげられる。そして、そのチャンネルに双方のアプリケーションが会話するためのデータとして"メッセージ"が流し込まれる。また、双方のアプリケーションが利用するデータ形式が異なる場合は、メッセージ交換に際してデータ形式を変換するための機構として"トランスフォーマー"が置かれる。さらに、メッセージのコピー、分割、結合といった経路管理を行う機構として"ルーター"が置かれる。
このモデルでは、送信元のアプリケーションは"チャンネル"に"メッセージ"を流し込むだけでよい。あとはミドルウェアが"ルーター"や" トランスフォーマー"として機能し、相手先のアプリケーションまでメッセージを送り届ける。一見すると複雑そうに思えるが、こうした分割によって以下のようなメリットが得られる。
- アプリケーション間の統合結合度を疎にすることで、統合処理の変更による影響を最小化する
- コンポーネント化された単位での再利用性を高める
特に2点目については、Spring Integrationで多数のコンポーネントが用意されており、標準的な処理であれば設定を行うだけで多くの統合処理を実現することができる。
Spring Integrationのプログラミング
では、実際にサンプルアプリケーションを参照しながらSpring Integrationのプログラミングを理解していこう。開発に利用したバージョンは次の通りだ。
- Spring 2.5.6
- Spring Integration 1.0.3
サンプルアプリケーションはAmazon Web サービスを使って書籍の一覧を取得するというものだ※2。統合処理のモデル図は次のようになる。
図2: サンプルアプリケーションの処理モデル |
※2 サンプルアプリケーションを動かすためにはAmazon Web サービスにてユーザー登録を行いアクセスキーとシークレットキーを取得する必要がある。キーを取得後、applicationContext.xmlのそれぞれ{ accessKey }と{ secretKey }の部分を書き換え、BookRanking.javaを起動する。