|
|
JMS 補完機能 (XA 分散トランザクションのサポート) |
|
JMS の仕様では、ローカル トランザクションが定められていますが、分散トランザクションのサポートは必須となっていません。
しかしながら、実世界における多くのアプリケーションは、複数のリソースが参加するトランザクション処理を必要としています (このようなトランザクションは、分散トランザクションもしくはグローバル トランザクションと呼ばれています)。
このため、FioranoMQ では、JMS 1.1 の推奨にしたがって、
JTA (Java Transaction API) の XAResource SPI (XA Service
Provider Interface)
をサポートしています。
JTA (Java Transaction API) による XA トランザクション
下図は、あるアプリケーション (JMS クラインアント) がデータベースにデータを書込み、同時に JMS サーバーを通じて他のアプリケーションにもデータを送信する例です。このようなアプリケーションの場合、データベースへの書込みもしくは JMS サーバーを通じたデータ送信のどちらかが失敗すると、他のアクションをロールバックする必要があります。JMS で規定されている機能だけでは、このような複数リソースに対するトランザクション制御が行えません。
このため、JTA に基づく次のコンポーネントを用意します。
- トランザクション マネージャ
- リソース マネージャ
- コミュニケーション リソース マネージャ
トランザクション マネージャ
XA トランザクション全体を制御します。トランザクションに参加する JMS クライアントはこのトランザクション マネージャのもとで稼動します。トランザクション マネージャは J2EE アプリケーション サーバーに備わっているため、これを利用します。
リソース マネージャ
トランザクション リソースを制御し、アプリケーションに対するアクセスを提供します。FioranoMQ (JMS サーバー) はこのリソース マネージャとして機能するよう、あらかじめ実装されています。
コミュニケーション リソース マネージャ
トランザクション リソースにアクセスするためのコミュニケーションを制御します。FioranoMQ では、JMS XA SPI による XA セッションが行えるよう、XA セッション制御、XA 用ディストネーション (キュー、トピック)、XA 用接続ファクトリを用意しています。
図 XA 分散トランザクションの例
|
|
|
|
|
|