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

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


小林 (koichik) です.

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


> ■WASの場合
> 
> [07/11/07 21:19:32:203 JST] 0000003c S2SessionFact I jp.co.worksap.common.s2.S2SessionFactoryImpl bindSession S2SessionFactoryImpl::bindSession->createSession.tx=[E-MAIL ADDRESS DELETED]
> [07/11/07 21:19:32:203 JST] 0000003c S2SessionFact I jp.co.worksap.common.s2.S2SessionFactoryImpl getConnection S2SessionFactoryImpl::getConnection.ThreadId=1
> 
> SQL文

ここまでは最初の required なトランザクションですよね.
そして,

> [07/11/07 21:19:32:297 JST] 0000003c ConnectionMan E   J2CA0058E: ConnectionManager は、リソース jdbc/cimTestXA に対して、接続 [E-MAIL ADDRESS DELETED] を ManagedConnection MCWrapper id 6152d0ce  Managed connection [E-MAIL ADDRESS DELETED]  State:STATE_TRAN_WRAPPER_INUSE
>  と関連付けることができませんでした。  例外を受け取りました: javax.resource.ResourceException: Current UOW does not match the UOW with which the ManagedConnection is already enlisted.

requiresNew に入ったところでいきなりこれなんですね.

> 	at com.ibm.ws.Transaction.JTA.UserTransactionImpl.begin(UserTransactionImpl.java:180)
> 	at com.ibm.ws.uow.UOWManagerImpl.uowBegin(UOWManagerImpl.java:1133)
> 	at com.ibm.ws.uow.UOWManagerImpl.runUnderNewUOW(UOWManagerImpl.java:957)
> 	at com.ibm.ws.uow.UOWManagerImpl.runUnderUOW(UOWManagerImpl.java:506)
> 	at org.seasar.extension.tx.adapter.WAS6TransactionManagerAdapter.executeCallback(WAS6TransactionManagerAdapter.java:123)
> 	at org.seasar.extension.tx.adapter.WAS6TransactionManagerAdapter.requiresNew(WAS6TransactionManagerAdapter.java:72)

このスタックトレースを見ると,requiresNew な
トランザクションの開始処理で例外が発生してるので,

> S2SessionFactoryImpl::bindSession->createSession
> の発生回数が違います。

は問題ではないですね.
requiresNew なトランザクション開始するところで
こけていて,Hibernate にアクセスする前なので.
前のメールで書いた UOWManager が期待と違う動きを
してるかも? というのも関係なさそうなので,
IBM さんにお伺いする必要もなさそうです.

気になるのは,

> 	at com.ibm.ws.LocalTransaction.LTCCallbacks.contextChange(LTCCallbacks.java:136)
> 	at com.ibm.ws.LocalTransaction.LTCUOWCallback.contextChange(LTCUOWCallback.java:166)

この辺りに LocalTransaction と出てること.
GlobalTransaction とかになるはずじゃないかと
思うのですが.
XA ではない DataSource が使われてないでしょうか?
であれば,新しい requiresNew なトランザクションに
切り替えられないのも辻褄は合いそう.
念のため,データソースの設定を見直しをお願いします.

他に考えられるのは required なトランザクションが
グローバルトランザクションになってないことですが,
こちらはもう少し調べてみます.


-- 
<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 メーリングリストの案内