Предположим, что у меня есть приложение, использующее ibatis 2 и spring 1. У меня есть внешний класс, который вызывает метод 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? Или может dbcp/ibatis выбрать другое соединение из пула?
- Что я могу сделать, чтобы проверить и убедиться, что для всех операций используется одно и то же соединение и что транзакция работает правильно?
- (Добавлено через Edit) — Изменится ли что-нибудь, если я перенес всю свою логику в один метод в дао? Будет ли это более безопасной транзакцией?