[Seasar-user:18314] Re: [S2Tx] RequiresNewTxの挙動について

Nishiwaki Kiyoyuki [E-MAIL ADDRESS DELETED]
2009年 8月 18日 (火) 18:14:52 JST


小林さま

お世話になっております。
西腋です。

> 添付のサンプルは Seasar2 の @RequiresNewTx 等が
> 使われているため TxAttributeCustomizer はこれを
> 認識せず,全てのメソッドをデフォルトの
> Required としています.
>
> それとは別に @RequiresNewTx アノテーションが
> 指定されているため,RequiresNew も設定されます.

なるほど、了解いたしました。

@RequiresNewTx アノテーションの動作を勘違いしていましたので
サンプルを修正したら正常に動きました。

ありがとうございました。

/************************************************************/
  (株)オージス総研
  技術部 エンタープライズ・オープンソース・センター
  西腋 清行

  東京都港区芝浦 4-13-23 MS芝浦ビル
  Phone:03-5730-3221 / Ext:9-47-646
  mailto:[E-MAIL ADDRESS DELETED]
/************************************************************/

> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED]
> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of
> Koichi Kobayashi
> Sent: Tuesday, August 18, 2009 5:00 PM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:18313] Re: [S2Tx] RequiresNewTxの挙動について
>
> 小林 (koichik) です.
>
> Date:    Tue, 18 Aug 2009 11:26:28 +0900
> From:    "Nishiwaki Kiyoyuki" <[E-MAIL ADDRESS DELETED]>
> To:      Seasar User メーリングリスト <[E-MAIL ADDRESS DELETED]>
> Subject: [Seasar-user:18306] [S2Tx] RequiresNewTxの挙動について
>
> > サンプルでは、Serviceに対して TxAttributeCustomizer を適用して
> > 以下のようにアノテーションでのトランザクションの種類を指定しています。
> >
> > Test1Service : RequiredTx
> > Test2Service : RequiresNewTx
> > Test3Service : RequiredTx
>
> TxAttributeCustomizer を使うなら,EJB3 の
> @TransactionAttribute アノテーションを使う必要が
> あります.
> 以下の表の TxAttributeCustomizer の欄を参照して
> ください.
>
> http://s2container.seasar.org/2.4/ja/DIContainer.html#Standard
> Customizer
>
> 添付のサンプルは Seasar2 の @RequiresNewTx 等が
> 使われているため TxAttributeCustomizer はこれを
> 認識せず,全てのメソッドをデフォルトの
> Required としています.
>
> それとは別に @RequiresNewTx アノテーションが
> 指定されているため,RequiresNew も設定されます.
>
> この結果,Test2Service の @RequiresNewTx が
> 指定されたメソッドは RequiresNew と Required の
> インターセプタが重複して設定されます.
> # @RequiredTx が指定されたメソッドは Required が
> # 重複して設定されます.
>
> インターセプタが呼び出される順番は Required ->
> RequiresNew となります.
>
> > この際、Test1ServiceのトランザクションをTx1、
> > Test2Service、Test3ServiceのトランザクションをTx2として。
> >
> > Test3ServiceにてRuntimeExceptionをスローし
> > Test1ServiceでCatchして例外を握りつぶす(例外を再スローしない)場合
> > Tx1、Tx2共にロールバックされました。
>
> Test2Service に設定された Required のインターセプタ
> (これは RequiresNew より外側なので Tx1 のコンテキストに
> なります) を例外が通過するため,トランザクションは
> ロールバックするようにマークされます.これは,
>
> http://s2container.seasar.org/2.4/ja/tx.html#TransAttribute
>
> に記述してあるとおりであり,
>
> > 確認したい点は、
> > Tx1もロールバックされますが、これはS2Txの仕様でしょうか?
>
> 仕様です.
>
>
> 実際にやりたいことを実現するには,Seasar2 の
> @RequiredTx や @RequiresNewTx アノテーションではなく,
> EJB3 の @TransactionAttribute を指定してください.
>
>
> --
> <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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user



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