[Seasar-user:11548] Re: requiresNewTxにてcommit時に例外が発生した場合にRollbackされない

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 11月 8日 (木) 21:00:00 JST


小林 (koichik) です.

Date:    Thu, 08 Nov 2007 19:36:05 +0900
From:    鈴木 順 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:11544] Re: requiresNewTxにてcommit時に例外が発生した場合にRollbackされない

> ログの方取得できました。

ありがとうございました.
S2Tx が出力したログだけ見ると,こちらが
意図したとおりに動いているようです.

> 少々昨日送付したものとは違い、
> S2SessionFactoryImpl::bindSession->createSession
> がちゃんと2度発生していますが、
> 例外が発生している事は変わりがありません。

この例外,単にログに出力されてるだけで,アプリ
(S2 含む) 側にスローされてはいなかったのですね.
てっきり requiresNew なトランザクションは実行
されてないのだと思ってましたが,実は新しい
トランザクションが開始されていて,required,
requiresNew どちらともグローバルトランザクションに
なってるので,S2Tx としては問題ないと思います.

とはいえ,DB が更新されないのでは話になりませんね.
これは,requiresNew なトランザクションがコミット
されてないからで,例外が発生したことで requiresNew な
トランザクションに jdbc/cimTestXA が参加できていない
ためだと思われます.

おそらくですが,required なトランザクションで取得した
コネクションがクローズされる前に,requiresNew な
トランザクションが開始されることが例外の原因に
なってるのだと思います.
以下のドキュメントにもあるように,グローバル
トランザクションの元では問題なくできないと
いけないはずなんですけどね.

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/cdat_conshrnon.html

ローカルトランザクションの場合は接続を共有すると
問題があるので,このような場合は非共有にすることに
なってるので,非共有接続を試してみるといいかも.
web.xml のリソース参照で

<resource-ref>
  ...
  <resource-sharing-scope>Unshareable</resource-sharing-scope>
</resource-ref>

って感じです.

これで動くかどうかに関わらず,この現象は IBM さんに
報告するのがいいかもしれません.
もしかしたら,すでに PTF が出てるかもしれませんし.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>




Seasar-user メーリングリストの案内