[Seasar-user:12000] Re: Transaction境界を設定したコンポーネントが階層的に呼び出された場合

Mitsutaka Sato [E-MAIL ADDRESS DELETED]
2007年 12月 8日 (土) 12:55:20 JST


小林様、ご教授ありがとうございます。
UserTransactionをDIすればよいんですね!

ちょっと発展した例を教えていただきたいのですが、
以下のようにHogeServiceを呼び出すメソッドで、トランザクションの開始〜終了を制御したい場合、

=========================
private UserTransaction userTransaction;
private HogeService hogeService;

public void run() {

  // トランザクション外の処理(クライアントから電文受信)
  doSomething();

  // トランザクション開始
  userTransaction.begin();
  try {
    hogeService.execute();

    // クライアントに電文送信
    doOutput();

    // トランザクションコミット
    // ※ hogeService内でfooSerivceの例外をキャッチしてsetRollbackOnlyしてる
    // かもしれないが、commit()でOK?
    userTransaction.commit();

  } catch(Exception e) {
    userTransaction.rollback();
  }
=========================

このように書くのが正しい*スタイル*でしょうか?

ちなみにご教授いただく以前は、
TransactionManagerをDIして、begin()し、
それをhogeService#executeの引数に渡していました^^;



On Dec 3, 2007 8:00 PM, Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> wrote:

> 小林 (koichik) です.
>
> Date:    Mon, 3 Dec 2007 17:48:55 +0900
> From:    "Mitsutaka Sato" <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:11885] Transaction境界を設定したコンポーネントが階層的に呼び出された場合
>
> > これは、HogeService#executeがトランザクション境界になっているので、fugaServiceで
> > Exceptionが発生しても、HogeServiceでcatchしているのでトランザクションはコミットされる
> > ということになるのでしょうか?
>
> はい.
>
> > このケースでトランザクションがロールバックされるような方法はないでしょうか?
> > (訳あってHogeService内でExceptionはキャッチしたい。)
>
> HogeService に UserTransacstion が DI されるように
> して,
>
> Class HogeService {
>
>  private FugaService fugaService;
>  private UserTransaction userTransaction;
>
>  public void execute() {
>    try {
>      fugaService.execute();
>    } catch (Exception e) {
>      userTransaction.setRollbackOnly();
>      log.info(e);
>    }
>  }
>
> }
>
> としてください.
> # 実際には setRollbackOnly() は checked な例外を
> # スローするので try 〜 catch が必要になります.
>
>
>
> --
> <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
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20071208/f900e88e/attachment-0001.html 


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