[Seasar-user:18484] DataSource取得時のトランザクション動作について

duran [E-MAIL ADDRESS DELETED]
2009年 9月 11日 (金) 14:37:59 JST


和田と申します。
お世話になっています。

S2.4.39
S2Dao 1.0.50
この利用環境で以下の問題に当たっています。

以下のようなコードで、直接DataSourceからConnectionを取得し、
SQLを実行する中で、別ロジックを呼び出すような処理があります。
※訳あって動的にSQLを処理するために直接Connectionを取得しています。

UpdateLogicImpl#update で、requiresNewTxをかけているのですが、
このメソッドが呼ばれた瞬間に、処理が止まります。
※ログに「トランザクションが開始されました」と出た直後になります。

ちなみに requiredTx の場合は正常に動作しました。

なぜrequiresNewTxにすると止まるのか分かりません。
ご教授よろしくお願いします。

public class SampleLogicImple extends SampleLogic{
  private DataSource dataSource;
  private UpdateLogic logic;

  public void execute(){
    Connection con = dataSource.getConnection();
    //SQL組み立て
    String sql = "xxxxxxxxxxxxx";
    PreparedStatement psmt = con.preparedStatement(sql);

    //条件により別ロジックを実行
    logic.execute();

    psmt.executeUpdate();
  }
  public void setDataSource(DataSource dataSource){
    this.dataSource = dataSource;
  }
  public void setUpdateLogic(UpdateLogic updateLogic){
    this.logic = updateLogic;
  }
}

public class UpdateLogicImpl extends UpdateLogic{
  private HogeDao hogeDao;
  @Aspect("j2ee.requiresNewTx")
  public void update(){
    //DB更新処理
   hogeDao.insert(hoge);
  }

  @Aspect("j2ee.requiredTx")
  public void execute(){
    //処理
    update();
    //処理
  }
  public void setHogeDao(HogeDao hogeDao){
    this.hogeDao = hogeDao;
  }
}


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