[Seasar-user:11890] Re: Transaction境界を設定したコンポーネントが階層的に呼び出された場合
    Koichi Kobayashi
    [E-MAIL ADDRESS DELETED]
       
    2007年 12月  3日 (月) 20:00:25 JST
    
    
  
小林 (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 メーリングリストの案内