2PC, JTA 사용 시 데이터소스가 하나만 먹히는 문제

2013. 5. 27. 02:08OpenSource/Spring MVC

반응형

 [그리운 만슈니..ㅠㅠ]

 

아래의 설명은 위의 사진과는 무관합니다! ^-^

 

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는 조금 다른지..

http://forum.springsource.org/showthread.php?100710-JTA-on-JBoss-not-working&s=e077b42fd45ae3a3177a01c90339893c 참고

 

 


 

주저리

 

아..스프링 시큐리티도 해야하는데..완전 손놓고 있네..이노무 Global Transaction.....@.@;;

해결 되면 업데이트 하겠음!!~

 

 

 https://community.jboss.org/message/747830#747830

 

 


 

해결!!~

Mybatis에서 map 중복이 있어서 해당 datasource를 잘 찾지 못하거나 다른 db에 들어가는 현상이 있었다!!


라고 해결 한줄 알았으나!!  그게 아니였다!!

한 클래스내에서 메소드별로 @Transactional이라는 것으로 전파속성을 달리해서 사용한다면 예를 들어서 한 클래스내에 A라는 메소드에서B라는 메소드를 호출 시에 B에서 전파속성을 Reqired_new를 사용 할 경우에 트랜잭션이 타지 않는 현상이 있습니다.
이를 해결해주기 위해서는 메소드를 클래스로 하나 빼서 처리를 하면 됩니다. 이와 비슷한 경우는 @Asyne라는 어노테이션에서도 발생을 합니다.

 

- 끝 -

 

 

반응형