from S2.2.9 リリース – koichikのひとりごと
> 例えば XA に対応した Oracle (Oracle が提供する XADataSource を使用する) と対応していない HSQLDB (S2 が提供する XADataSource で XA をエミュレートする) を同一のトランザクション中で更新する場合,最初に HSQLDB からコネクションを取得することで,二つの DB がどちらもコミットされるかどちらもロールバックされるかという原子性 (ACID の A) が実現できます.
なるほどーそういうことか。理解できました! ありがとうございます! koichikさん。
### 昨日の質問
昨日のJ2EE勉強会(仮)で、以下の質問をさせていただいた。(若干、わかりやすく整理しています。昨日はもっと要領を得ない質問な感じ(苦笑)でした。)
> S2JTAの枠組みの中で、XA非対応のリソースマネージャを扱う場合、XAをエミューレートするラッパ経由で扱うことになるようだが、その場合、
>
- XA非対応のリソースマネージャ1つがJTA配下のトランザクションに参加している場合、1フェーズコミットプロトコルを使用する
> - XA対応のリソースマネージャ1つの場合、通常の1フェーズコミットプロトコルを使用する
> - XA対応のリソースマネージャ2つ以上の場合、2フェーズコミットプロトコルを使用する
>
> という理解でよいか?
なるほど、S2JTAの実装はLast Resource Commit Optimizationの機構を持っているため、
1番目、2番目の内容は正しいようだ。ただ、koichikさんの日記にかかれてあるように、
> Last Resource Commit Optimization は,このように複数のリソースがある場合に,最後のリソースに対しては prepare ではなく,通常の 1 フェーズコミットを指示するというものです.
というわけで、XA対応のリソースマネージャが2つある場合、すべてのリソースマネージャに対して2フェーズコミットプロトコルでコミットするわけではないということみたいである。
だから、3番目の内容はちょっと正しくない。 なるほどなるほど。
Leave a Reply