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

鈴木 順 [E-MAIL ADDRESS DELETED]
2007年 10月 31日 (水) 15:53:03 JST


お世話になっております。鈴木です。

S2.4.16を利用して、requiresNewTxにてトランザクション管理を行っています。
「commit時に例外が発生した場合にRollbackされない」と言う事象が発生しております。

具体的に言いますと、
RequiresNewInterceptorのinvoke()のend()にて例外が発生し、
complete()が呼ばれます。
complete()よりRollback()が呼ばれ、
Rollback()内で、hasTransaction()がfalseとなる為、
userTransaction.rollback();が呼ばれません。

通常のJDBCであれば、commit時に例外が発生する事はまれだと思いますが、
(S2)Hibernateを利用している場合には、commit時に全てのSQLが流れますので、
commit時に例外が発生する事は稀ではない状況です。

また今SVNを見たら、tx周りが結構修正があるようで、
最新版で同様の件が発生するかは確認できていません。
JTATransactionManagerAdapterやDefaultTransactionCallbackを見てみました。
JTATransactionManagerAdapterのrequiresNewのend();でcommitが
行われた場合の例外処理が無いので同様の問題が発生するように感じます。
(こちらは推測です)

以上 申し訳ございませんが確認いただけると幸いです。




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