changeUser() そして 問題解決(?)

getXADataSouceした時に以前のConnector/JはchangeUserコマンドを発行していた.changeUserが発行されるとautocommitとかの接続後に設定した内容が初期化される.

つまりこの仕様に立てば,AppServerはサーバ起動時のコネクションプーリング作成の際だけでなく,グローバルトランザクションを発行する際にも再度setAutocommit(false)を呼ばなければならないはずだった.

しかしながらWebLogic側ではそのような呼び出しを行う実装になっておらず,ここに想定通りにテストが通らない原因の1つがあった.

この問題はConnector/Jの未リリース最新版を使うことで回避が可能.さっそくこれを入手して試してみたところ,commit-rollbackともにうまく機能した.

(この問題を回避しないと,XAであるにも関わらずDB接続の実体がautocommitモードに戻ってしまっている(MySQLのデフォルト)のでrollbackメソッドをコンテナ側が読んでもDB側はコミット済みという状況になる)

相変わらずWebLogicJMSは信じがたい動きをしているが,WebLogicMySQL XAコネクション 2本でのXAテストに変え,この問題をクリアしたことでやっと前進できるような状態になった.このまま上手く行ってくれると良いが.