[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 メーリングリストの案内