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

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 11月 9日 (金) 18:30:59 JST


小林 (koichik) です.

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

> InfoCenter では以下の記述となります。

これは自分も見ましたが,該当しないと思います.

> とりあえずS2SessionFactoryにデバッグ文を入れて同じコネクションを
> 使用しているか否かを確認してみます。

その必要はないと思います.
問題の例外は,WAS がトランザクションを開始する
処理中に発生しています.
WAS がトランザクションを開始した後の
アプリケーション (S2 含む) の処理中に
発生しているわけではありません.
以下の部分だけでも,ちゃんとスタックトレースを
見るように伝えた方がいいと思います.

[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.
	at com.ibm.ejs.j2c.ConnectionManager.reAssociate(ConnectionManager.java:1612)
	at com.ibm.ejs.j2c.HandleList.reAssociate(HandleList.java:354)
	at com.ibm.ejs.j2c.ConnectionHandleManager.userTranBegin(ConnectionHandleManager.java:310)
	at com.ibm.ejs.j2c.LTCHandleCollaborator.transactionPostBegin(LTCHandleCollaborator.java:163)
	at com.ibm.ejs.j2c.LTCHandleCollaborator.contextChange(LTCHandleCollaborator.java:104)
	at com.ibm.ws.LocalTransaction.LTCCallbacks.contextChange(LTCCallbacks.java:136)
	at com.ibm.ws.LocalTransaction.LTCUOWCallback.contextChange(LTCUOWCallback.java:166)
	at com.ibm.ws.uow.UOWScopeCallbackManager.notifyCallbacks(UOWScopeCallbackManager.java:62)
	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)
(ここから requiresNew なトランザクション開始)
(中略:required なトランザクションでの DB アクセスは問題なし)
	at com.ibm.ws.uow.UOWManagerImpl.runUnderNewUOW(UOWManagerImpl.java:969)
	at com.ibm.ws.uow.UOWManagerImpl.runUnderUOW(UOWManagerImpl.java:506)
(ここから required なトランザクション開始)

これを見れば,InfoCenter の記述が該当しないことは
明らかです.
UOWManager は,トランザクションを開始した後
アプリ (S2Tx) をコールバックします.
下の方にある required なトランザクションからは
ちゃんとコールバックされますが,その上にある
requiresNew なトランザクションでは,uowBegin()
というトランザクションの開始処理中に例外が発生
しています.


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




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