ibatis2とspring1を使用するアプリケーションがあるとします。daoメソッドを呼び出す外部クラスがあります。次のコードを実行するとどうなりますか。
// external class
public void doSomething() {
try {
daoLayer.startTransaction();
daoLayer.firstOperation();
daoLayer.secondOperation();
} finally {
daoLayer.endTransaction();
}
}
// dao layer which extends from org.springframework.orm.ibatis.support.SqlMapClientDaoSupport.SqlMapClientDaoSupport
public void startTransaction() { sqlMap.startTransaction(); }
public void firstOperation() { sqlMap.update("someQuery"); }
public void secondOperation() { sqlMap.update("someOtherQuery"); }
public void endTransaction() { sqlMap.endTransaction(); }
- このコードにより、データベース接続がリークされますか?
- 終了トランザクションは、startTransaction、firstOperation、およびsecondOperationメソッドを実行したのと同じtransaction / db接続で実行されますか?または、dbcp / ibatisがプールから別の接続を選択する可能性がありますか?
- すべての操作に同じ接続が使用され、トランザクションが正しく機能していることをテストして確認するにはどうすればよいですか?
- (編集で追加)-daoですべてのロジックを1つのメソッドに移動した場合、何か変更はありますか?それはよりトランザクションの安全性が高いでしょうか?