[Seasar-user:11361] Re: requiresNewTxにてcommit時に例外が発生した場合にRollbackされない
鈴木 順
[E-MAIL ADDRESS DELETED]
2007年 10月 31日 (水) 19:07:29 JST
小林さん
お世話になっています。鈴木です。
異常系の試験で不正なデータが作られており、調査を行っておりました。
結果requiresNewTxが入れ子になっており、
Rollbackされていないと想定してしまい、
先ほど投稿してしまいました。
返信を頂き再度調査したところ、全く別の問題でした。
大変ご迷惑をおかけして申し訳ございません。
以後気をつけます。
On Wed, 31 Oct 2007 17:00:30 +0900
Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> wrote:
> 小林 (koichik) です.
>
> Date: Wed, 31 Oct 2007 15:53:03 +0900
> From: 鈴木 順 <[E-MAIL ADDRESS DELETED]>
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:11350] requiresNewTxにてcommit時に例外が発生した場合にRollbackされない
>
> > S2.4.16を利用して、requiresNewTxにてトランザクション管理を行っています。
> > 「commit時に例外が発生した場合にRollbackされない」と言う事象が発生しております。
>
> ロールバックされないとは具体的にどういう
> 現象になるのでしょうか?
>
> > 具体的に言いますと、
> > RequiresNewInterceptorのinvoke()のend()にて例外が発生し、
> > complete()が呼ばれます。
> > complete()よりRollback()が呼ばれ、
> > Rollback()内で、hasTransaction()がfalseとなる為、
> > userTransaction.rollback();が呼ばれません。
>
> 呼ぶ必要がありません.
> UserTransaction#commit() が例外をスローしたと
> いうことは,トランザクションをコミットすることが
> できなかったということであり,ロールバックされたと
> いうことでもあります.
>
> > 通常のJDBCであれば、commit時に例外が発生する事はまれだと思いますが、
> > (S2)Hibernateを利用している場合には、commit時に全てのSQLが流れますので、
> > commit時に例外が発生する事は稀ではない状況です。
>
> コミット時といっても,正確には
> Synchronization#beforeCompletion() で例外が
> 発生します.
> S2JTA では (おそらく他の JTA 実装でも),
> beforeCompletion() で例外が発生すると
> トランザクションをロールバックします.
> その後に明示的に rollback() を呼び出す必要は
> ありません.
> というか,トランザクションの状態は既に
> ロールバック済みなので,IllegalStateException が
> 発生します.
>
>
>
> --
> <signature>
> <name>Koichi Kobayashi</name>
> <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
> </signature>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内