Java Business Integration(略称JBI)とは、エンタープライズ・サービス・バス: Enterprise service bus、ESB)をJavaで実装する方法を示したフレームワークである。

コンポーネント 編集

JBI 1.0では、ESBのバスにあたるノーマライズメッセージルータやバスにつながるコンポーネントのうち、メッセージ変換やメッセージルーティングのようにESB内部に作用するコンポーネントをサービスエンジン、SOAPJMSのような通信プロトコルを用いてESBの外部との接続の窓口となるコンポーネントをバインディングコンポーネントと定義している。 これらの2種類のコンポーネントは、JBI仕様の中でインタフェースが決められており、その実装クラスとコンポーネント名などを記述したjbi.xmlという配備記述子を封入したJARファイルであり、誰でも作ることができるので、独自の通信プロトコルや機能を実装できる。しかし、一般ユーザが実装するには難しく、現実にはベンダー製のもの、あるいはオープンソースで実装されるのを待たなければならないのもまた事実である。

サービスアセンブリ 編集

JBIではコンポーネントエンドポイント名、サービス名、インタフェース名、オペレーション名、その他コンポーネント独自の設定を与えてコンポーネントを活性化させ、インスタンスを起動させるものを「サービスアセンブリ」と定義している。 サービスアセンブリは、前述した設定事項をWSDL 1.1/2.0(タグを拡張する部分はコンポーネントごとに独自形式)やコンポーネントが独自に読み込む設定ファイルに書き込み、既定の形でZIPファイルに封入し、JBIコンテナに配備するという方法で運用する。このように、理論的には実装クラスとサービスを独立なライフサイクルで扱えるのがJBIの利点と言える。

ノーマライズメッセージルータを流れるメッセージは「メッセージエクスチェンジ」と呼ばれるものであり、内容はJavaのプロパティの塊そのものであり、その中にWebサービスではなじみ深いエンドポイント名、サービス名、インタフェース名 (PortType)、オペレーション名、ノーマライズメッセージ、その他のプロパティを書き込み、これをメッセージルータにsendすることで、指定したエンドポイントに運ばれる。なお、ノーマライズメッセージは、(javax.xml.transform.Source) と定義されたコンテント、(javax.activation.DataHandler) と定義された添付ファイル、その他のプロパティで構成され、おおよそSOAPメッセージの形式を継承したような設計になっている。コンテントはXMLが入るが、Sourceになっていることにより、DOMSAXStAXなどのあらゆるAPIでの処理が可能になっている。しかし、経由するコンポーネントでのXML処理方法を統一していなければ、DOM、SAX、Streamのどの形式のインスタンスでメッセージが来ても処理できるようにしておく必要がある。

各社対応 編集

現在、JBIに対応した実装を行っているものとしては、Open ESB、NECのWebOTX Enterprise Service Busなどがある。多くのベンダーがESB製品をリリースしているが、JBI対応を掲げているところは少ない。その理由は、仕様策定段階で、IBMBEAシステムズが強烈な反対票を入れていることによるものと考えられ、その状況は最新のJBI 2.0仕様の投票においても変わっていない。