의 (나는 DAO로 iBatis를 사용하고) 나는 내 프로젝트에 다음과 같은 구조를 가지고 가정하자 :iBatis와 중첩 된 트랜잭션 문제를 해결하는 방법은 무엇입니까?
public class UsersManager {
public void do {
mySqlMapClient.startTransaction();
// my code here
mySqlMapClient.endTransaction();
mySqlMapClient.commitTransaction();
}
}
public class StatsManager {
public void do {
mySqlMapClient.startTransaction();
// my code here
mySqlMapClient.endTransaction();
mySqlMapClient.commitTransaction();
}
}
public class App {
public void do {
myUsersManager.do();
myStatsManager.do(); // here I get an exception, because the transaction is already started
}
}
그래서, 내 질문은, 어떻게이 문제를 해결할 수있다? 내 프로젝트에는 150 개 이상의 트랜잭션이 있으므로 모든 비즈 로직을 다시 작성하는 것은 쉬운 솔루션이 아닙니다. 이런 상황에 대한 표준 접근 방식이 있습니까? 그리고 어디서 볼 수 있습니까?
음, 다음으로해야 할 일은 봄을 배우는 것입니다. 그러나 나는 이미 DAO에 트랜잭션을 넣는 데 막대한 설계 문제가 있음을 고려했다. – Michael
어쨌든 답변 해 주셔서 대단히 감사합니다. – Michael
리팩토링 할 가치가 있습니다. 트랜잭션 로직이 150 개의 클래스 대신 한 곳에 있으면 코드가 얼마나 작아 질지 생각해보십시오. 그것이 가로 세로 절단 문제에 대해 aspect 지향 프로그래밍이 할 수있는 것입니다. 트랜잭션은 하나입니다. 로깅은 또 다른 것입니다. 이것을 Spring iBatis에 넣는 것만 큼 힘들지는 않습니다. – duffymo