[J2EE] WebLogic8.1 JDBCデータソースの設定

WebLogic8.1の管理コンソールのJDBCデータソース設定画面には次の2つのチェックボックスがある。

  • グローバル トランザクションを受け付ける(デフォルトでチェック済み)
  • 非 XA ドライバ用に 2 フェーズ コミットをエミュレート(デフォルトではチェックなし)

エミューレート」という言葉に惑わされていて、両方にチェックをつけないと非XA Driverのリソースをグローバルトランザクションで管理できない(XAをエミュレートしてくれない)かと勘違いしていた。ここでのエミュレートは明らかに2 フェーズ コミットをエミュレートするかどうかなのでXAのエミュレートとは関係ない。普通に読めば「グローバル トランザクションを受け付ける」という文言ですでに十分XAのエミュレートをすることの目的を示していることに気づくべきなのに気づかなかった。「グローバル トランザクションを受け付ける」はデフォルトでチェックがついているので、特に何もしなくてもグローバル トランザクションが使える、みたい。アプリケーションサーバってそんなオプションを親切に用意してくれているのか...。WebSphereに非XA Driverをグローバルトランザクションで扱うことを指定するところあったな?前職でWebSphereの管理コンソールを触っていたころはグローバルトランザクションにまったく注意が向いていなかったのでぜんぜん覚えていない。<まとめ>

グローバル トランザクションを受け付ける
非 XA ドライバ/単一リソース。非XA Driverを使う場合にトランザクションマネージャが1フェーズコミット最適化を使用しますよ、という意味らしい。fakeなXAを使うとかXAをエミュレートするとかのような言い回しが見当たらないけど1フェーズコミット最適化といえばそういうことをしているのだと思う...けど、JTS ドライバとか聞きなれないものがでてくるし、XAのエミュレートとは違う方法で非XA Driverをグローバルトランザクションに入れているのかも?
非 XA ドライバ用に 2 フェーズ コミットをエミュレート
非 XA ドライバ/複数リソース。複数リソースをトランザクション対象にするときに1つのリソースが非XA Driverを使っている場合、非XA DriverのXAResource.prepare()でXA_OKを返すよということらしい。まさにXAのエミュレート。となるとそういう説明のない「グローバル トランザクションを受け付ける」はやっぱりXAのエミュレートではないのかなぁ。「リソースは、後続の XAResource.commit() または XAResource.rollback() の呼び出しに応答して、ローカル トランザクションをコミットまたはロールバックしようとします」とあるので、Last Resource Commitは使っていなさそう。

<ドキュメント>
http://edocs.beasys.co.jp/e-docs/wls/docs81/ConsoleHelp/jdbc_datasources.html
http://edocs.beasys.co.jp/e-docs/wls/docs81/jdbc/rmidriver.html#jtsdriver
http://edocs.beasys.co.jp/e-docs/wls/docs81/ConsoleHelp/jdbc_connection_pools.html#306659