[그리운 만슈니..ㅠㅠ]
아래의 설명은 위의 사진과는 무관합니다! ^-^
2PC, JTA 사용 시 데이터소스가 하나만 먹히는 문제
환경
was : jboss eap 5.1 - xa datasource 설정
springframework 3.1 - jta manager 사용
@MVC 기반 => Facade - Service - Dao - Mybatis
postgreSQL 9.2(local- windows ver)
postgreSQL 9.2(remote - windows ver)
mybatis 3.1.1
TEST
Facade(POJO) - Service(POJO) - Dao - Mybatis 이나
Facade - FacadeImpl - Service - Dao - Mybatis 구조로 테스트 함.
[Facade - FacadeImpl - Service - Dao - Mybatis 구조]
1) JDK 다이나믹 프록시 사용 & Class프록시 사용
결과 : FacadeImpl 즉, 구현클래스에 @Transactional 사용(롤백, Required_NEW 등 2PC 트랜잭션 잘됌)
그러나 Class 프록시로 전환 뒤 Service에 @Transactional 해보았지만 트랜잭션 먹히지 않음.
커뮤니티에 문의 한 결과..정확하게 말해주는 사람은 없었음. 그러나 순수 class까지도 되어야 한다고 함.
[Facade(POJO) - Service(POJO) - Dao - Mybatis구조]
2) Class 프록시 사용
결과 : JTA를 사용하였지만 데이터소스 하나만 잘됨. 2PC일 때 다른 데이터소스는 트랜잭션이 먹히지 않음. 단일 트랜잭션임에도 불구하고..
추측
1. PostgreSQL AutoCommit 문제
2013/05/25 - [DataBase/Postgresql] - windows postgreSQL autocommit off 만들기
2.XA Datasource는 조금 다른지..
주저리
아..스프링 시큐리티도 해야하는데..완전 손놓고 있네..이노무 Global Transaction.....@.@;;
해결 되면 업데이트 하겠음!!~
https://community.jboss.org/message/747830#747830
해결!!~
Mybatis에서 map 중복이 있어서 해당 datasource를 잘 찾지 못하거나 다른 db에 들어가는 현상이 있었다!!
라고 해결 한줄 알았으나!! 그게 아니였다!!
한 클래스내에서 메소드별로 @Transactional이라는 것으로 전파속성을 달리해서 사용한다면 예를 들어서 한 클래스내에 A라는 메소드에서B라는 메소드를 호출 시에 B에서 전파속성을 Reqired_new를 사용 할 경우에 트랜잭션이 타지 않는 현상이 있습니다.
이를 해결해주기 위해서는 메소드를 클래스로 하나 빼서 처리를 하면 됩니다. 이와 비슷한 경우는 @Asyne라는 어노테이션에서도 발생을 합니다.
- 끝 -
'OpenSource > Spring MVC' 카테고리의 다른 글
Heuristic completion: outcome state is mixed; nested exception is javax.transaction.HeuristicMixedException / TwoPhaseOutcome.HEURISTIC_HAZARD (0) | 2013.06.10 |
---|---|
org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class (0) | 2013.06.10 |
@Valid (0) | 2013.01.24 |
웹??? web.xml은 알고 하자!! (0) | 2012.11.09 |
Spring MVC의 주요 구성요소 (0) | 2012.11.09 |