[Seasar-user:20194] Re: S2Txでコミット後に処理を行いたい

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2010年 9月 28日 (火) 01:00:00 JST


小林 (koichik) です.

Date:    Tue, 28 Sep 2010 00:18:29 +0900
From:    ちょま吉 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:20192] S2Txでコミット後に処理を行いたい

> ファイルの削除処理をDBのトランザクションがコミットされた後に行いたいと考
> えているのですが、コミット処理の結果を受けて動くコードを挿入する方法は
> ないのでしょうか。

Synchronization インタフェースの実装クラスを
TransactionSynchronizationRegistry に
登録すれば可能です.

http://download-llnw.oracle.com/javaee/6/api/javax/transaction/Synchronization.html
http://download-llnw.oracle.com/javaee/6/api/javax/transaction/TransactionSynchronizationRegistry.html

TransactionSynchronizationRegistry は
public フィールドか setter メソッドを
用意すれば Seasar2 によって DI されます.

public TransactionSynchronizationRegistry tsr;

tsr.registerInterposedSynchronization(new Synchronization() {
  @Override
  public void beforeCompletion() {
    //コミット前の処理
  }

  @Override
  public afterCompletion(int status) {
    if (status == Status.STATUS_COMMITTED) {
      //コミット後の処理
    } else {
      ロールバック後の処理
    }
  }
});



-- 
<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>
    <property name="twitter">"http://twitter.com/koichik"</property>
</component>



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