트랜젝션 처리를 할 경우,
1. schema 방식 ( AOP 이용)
2. Transactional Annotation 방식 을 이용하면 편리하다.
그 중, transaction annotaion을 사용한 경우..
아무런 옵션을 넣지 않아도 commit/rollback 처리가 잘 된다.
하지만,
만약 내가 원하는 특정 Exception을 던지고 싶을 경우라면..
try ~ catch 를 통해 내가 원하는 별도 작업을 진행하고 싶다면..
그냥 해당 어노테이션 만으로는 안된다.
위 해결을 위해서는 가장 쉽게는 두가지 방법이 있다.
1. rollback시 처리할 exception을 지정해주는 방법.
---------------
@Transactional(rollbackFor=BusinessException.class)
public int insertTest(Map<String, Object> commandMap) throws BusinessException {
int cnt1;
int cnt2;
try {
cnt1 = sampleDao.insertTest1(commandMap);
cnt2 = sampleDao.insertTest2(commandMap);
} catch (Exception e) {
throw new BusinessException(".........");
}
return 0;
}
---------------
2. catch 부분에서 직접 rollback 시키는 방법
---------------public int insertTest(Map<String, Object> commandMap) throws BusinessException {
int cnt1;
int cnt2;
try {
cnt1 = sampleDao.insertTest1(commandMap);
cnt2 = sampleDao.insertTest2(commandMap);
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
throw new BusinessException(".........");
}
return 0;
}
---------------
재밋는 부분을 발견했다. ㅎㅎ
거 참..
http://m.blog.daum.net/jesuskim16/3721614 참고..
덧글