일반적으로 하나의 모듈에선 하나의 디비를 사용하는 것이 이상적이다.

그러나 플랫폼 단위의 모듈을 개발하다보면 다중 디비를  참조하게 되는 경우가 많다.

이럴경우 일반적인 프레임워크를 사용치 않고 하드코딩하는 경우 예외처리를 통해

트랜잭션 관리를 하는경우가 많다. 

그러나 보안적인 측면과 관리 그리고 개발 속도 향상과 라이브러리들의 지향점이

변화하면서 점점 프레임워크의 의존도가 높아지고있고 트랜잭션 관리의 중요성도

대두되고있다. 


보통 다중디비는 jta 를 통한 tomcat 에 지정하는 방식이 많이 사용되고 있으나

db 의 커넥션을 톰캣에 넘겨주는것은 성능상으로도 관리적인 측면에서도 좋지 않다.



해서 atomikos 같은 라이브러를 통해 xaDataSource 로 연결하는 방식이 일반적이진 않지만 효율성 면에서 좋으므로 고려해볼만 하다. 

그러나 해당 방식은 aop 와 중복될경우 aop 가 작동 하지 않는 경우가 생긴다.

해당 경우는 aspectJ 의 어노테이션 방식의 특히 around 를 사용할 때 많이발생한다.

spring 의 트랜젝션 매니저와 다르기 때문에 order 를 통해 우선순위를 주더라도

정상 작동하지 않는다. 

이유는 aop 의 around 에서 예외처리를 통한 핸들링 중 예외가 트랜잭션 까지 넘어가지

못하고 aop 에서 예외처리를 해버려 정상적으로 롤백등의 동작이 하지 않는것이다.


그래서 spring aop 에서는 try catch 문을 통한 핸들링 보다는

interceptor 나 exception handler 를 통해 핸들링 하는것을 권장하며

예외처리를 위한 목적으로 around 를 사용하는것은 비추천한다.

차라리 after 나 before 등으로 처리하는것이 관점지향프로그래밍 이라는 것에도 부합 한듯 하다.