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