JBIとは
JBIは、JavaにおけるSOA(ESB)実装を実現するためにJCPで制定された仕様です。
JBIとServlet APIは似ている部分もあります。
まず、JBIとServlet APIは共に仕様であり、それらの実装はApache ServiceMixとApache Tomcatであったりします。
※TomcatはRI(参照実装)ですが、ServiceMixはRIではありません。
・・・
図1はJBIの構成図ですが、JBI EnvironmentはJBIコンテナであることが分かります。各JBI ComponentはJBI SPI(Service Provider Interface)のインターフェイスを実装することでJBIコンテナにプラグインできます。
これは、JBIコンテナをServletコンテナに、JBI ComponentをServlet(コンポーネント)に、それぞれ置き換えてみればどんなものか大体想像が付きます。
・・・
図2はコンポーネントがメッセージを送受信する際のシーケンス図です。左側のComponent Aから右側のComponent Bへメッセージを送っています。
Component AはJBIコンテナに対してsendメソッドを呼び、メッセージを送信します。メソッドは非同期と同期と2種類あり、sendは非同期、sendSync は同期となります。非同期の場合、Javaのメソッド呼び出しと異なり、JBIのキューにメッセージが追加されればすぐに処理は戻ってきます。
一方、Component Bはacceptメソッドを呼び、自分宛のメッセージを受信します。上の図ではsendの後にacceptを呼んでいますが、実際にはComponent BをJBIに登録する際にacceptメソッドを呼び、メッセージが届くまでブロックされている状態となります。
・・・
図4は、BC(Binding Component)とSE(Service Engine)とNMR(Normalized Message Router)等の構成図です。
まず、コンポーネントにはBCとSEの2種類あり、BCは外部とのインターフェイスを持ったもの(例えばHTTPリスナーやメール送信)、SEは単体で実現されるビジネスロジックとなります。真ん中のNMRが一般的にESB(Enterprise Service Bus)と呼ばれる正規化されたメッセージが流れる中核部分です。
JBI内のコンポーネントが動くトリガーとして、タイマーのようなSEコンポーネントから開始される場合と、外部アプリ(External Service Consumer)から開始される場合とあります。
また、JBI内のコンポーネントだけで完結する場合と、外部アプリ(External Service Provider)も巻き込んで処理を返す場合とあります。この外部アプリがレガシーアプリであったり、他のJBIコンテナのConsumerとなる場合もあります。
・・・
図22はデプロイするモジュールの構成図です。
コンポーネントはSU(Service Unit)単位でアーカイブされます。これはWebアプリのアーカイブ(WARファイル)と同じ位置づけです。
さらに複数のコンポーネントの連携の設定をした状態をSA(Service Assembly)単位でアーカイブされます。これはEJBアプリのアーカイブ(EARファイル)と同じ位置づけです。
略語メモ
APIs: Application Programming Interfaces
BC: Binding Component
CSD: Composite Service Description
EPR: Endpoint Reference
ESB: Enterprise Service Bus
JBI: Java Business Integration
JMX: Java Management Extensions
MBean: Management Bean
ME: Message Exchange
MEP: Message Exchange Pattern
NM: Normalized Message
NMR: Normalized Message Router
SA: Service Assembly
SE: Service Engine
SPIs: Service Provider Interfaces
SU: Service Unit
W3C XOP: XML-binary Optimized Packaging
WS-I AP: WS-I Attachments Profile
リンク
http://www.jcp.org/en/jsr/detail?id=208