ESBを必要とするシーン
サービスのトランスポートを抽象化する場合
ESBはサービス本体が実装しているトランスポート(SOAP/JMS/IIOP)に関わらず、他のトランスポートを利用して呼び出すこともでき る。そのためサービスを抽象化して、トランスポートに関係なくサービスを利用したい場合は、ESBを利用したほうがよい。
サービスの組み合わせをメディエーションする場合
第1回で解説した疎結合のレベル3を実現するためには、粒度の細かいサービスを組み合わせて、粒度の大きなサービスを提供する必要がある。この場合は後で説明するESBのメディエーション機能を利用すると便利であるため、ESBを利用するとよい。
またESBは、メッセージの粒度を大きくして処理するため、メッセージ全体をPOJOにマッピングするのではなく、必要に応じてメッセージの一部をPOJOにマッピングするといった特徴がある。
このことは必ずしもSOAがESBを必要としていることを示しているのではなく、サービスの粒度を大きくして疎結合にするためにはESBが適していることを示している。
ESBが持つ機能
WebサービスとESBの違いを解説してきたが、ESBのプロダクトは表2に関するすべての機能を持っているとは限らない。そこで、ESBのプロダクトが一般的に持っている機能を以降より解説する。
サービス実行
これは、リクエストがエンドポイントに到達した際にマッピングされたサービスを実行する機能である。このサービスは、リクエストやエンドポイントに依存しないように作成され、マッピングや形式の変換(ESBの独自形式)などはESB側が行う。
なおこのサービスは、ESB固有のAPIやインターフェースなどを利用して実装されるが、AOPやアノテーション技術を組み合わせて、POJOをサービスの実装とするESBプロダクトも存在している。
また、サービスとエンドポイントの間にサービスの実行用のコンテナ(サービスエンジンとも呼ばれる)を動的に挟み込むことで、サービスの呼び出しの 前後に機能を追加することができるようになる。このことでWebサービスセキュリティの呼び出しなどが宣言的に行えるようになる。
複数のトランスポートサポート
サービスの予期しているトランスポート以外のトランスポートを呼び出すことができる機能が、複数のトランスポートサポートである。ここでいうトラン スポートとは、サービスの呼び出しを行うプロトコルのことを意味しており、SOAP/JMS/IIOPなどにあたる。
一般的なWebサービスエンジンは、SOAPによる呼び出ししかサポートしておらず、Webサービスを受けるクライアントが他のシステムとJMSでやり取りしていても、このサービスを呼び出すためにはSOAPで呼び出さなければならないのとは対照的である。
なお、SCA(Service Component Architecture)のEntryPointやJBIのBC(Binding Component)はこのトランスポートサポートを実現している。