2011년 7월 4일 월요일

@Transactional 과 @Aspect annotation의 순서지정.

org.springframework.core.annotation.Order 순서와 tx:annotation-driven order attribute 값으로 순서를 결정할 수 있다.

아래와 같이 설정하면 Transaction의 외부에서 아래의 Aspect가 실행되기 때문에 Exception 이 발생했을 경우 rollback이 우선 처리되고 응답 메시지가 생성된다.

aspect 파일: 

@Aspect()
@Order(1)
@Service("myAspect")
public class MyAspect {
 @Around("execution(public com.my.IServiceResult com.my.*ServiceImpl.*(..))")
 public IServiceResult handleDwrMethod(ProceedingJoinPoint joinpoint) {
  try {
   Object[] args = joinpoint.getArgs();
   return (IServiceResult) joinpoint.proceed(args);
  } catch(Throwable ex) {
   return createErrorResult(ex);
  }
 }
}

spring 설정 파일:

 <tx:annotation-driven transaction-manager="queryTxManager" order="2" />