JBoss에서 non-XA 다중 데이터소스의 트랜잭션 처리

428 views
Skip to first unread message

임병인(포데브)

unread,
Feb 17, 2011, 7:16:23 AM2/17/11
to Korea Spring User Group
최근에 트랜잭션과 관련된 다양한 결과를 보면서 좀 당혹스럽네요.

환경: Sybase ASE 15.5(jconn3d.jar) + JBoss EAP 4.3 + Spring 2.5.6
DS: sybase-ds.xml 에 local-tx-datasource 를 여러개 설정

<bean id="riDataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/RiKFlowDS" />
</bean>
<bean id="kflowDataSource"
class="org.springframework.jndi.JndiObjectFactoryBean" >
<property name="jndiName" value="java:comp/env/jdbc/KFlowDS" />
</bean>
<bean id="ctiDataSource"
class="org.springframework.jndi.JndiObjectFactoryBean" >
<property name="jndiName" value="java:comp/env/jdbc/CtiDS" />
</bean>

<bean id="kflowTxManager"
class="org.springframework.transaction.jta.JtaTransactionManager" />

<tx:advice id="kflowTxAdvice" transaction-manager="kflowTxManager">
<tx:attributes>
<tx:method name="register*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>

위와 같이 설정된 경우

kflowDataSource(A) -> ctiDataSource(B) --> kflowDataSource(A) 순으로 처리한다
고 가정하면

1. A(정상) - B(오류) : A, B 롤백
2. A(정상) - B(정상) - A(오류) : A 롤백, B 커밋

이 되어야 한다고 생각했는데 local-tx-datasource임에도 2번의 경우 A, B가 둘다 롤백이 되더군요.
마치 XA의 2PC 처럼 동작하는데 제가 알던 지식과 달라서 심히 혼란스럽네요.
JBoss의 어떤 설정(JBossTA의 allowMultiLastResources = true 설정) 때문인지 싶기도 하구요.

JTA를 사용하려면 XA를 설정하라는 JBoss 문서내용을 본 기억이 나네요.

어떤 문제가 있을 까요?

Sungchul Park

unread,
Feb 21, 2011, 3:09:24 AM2/21/11
to ks...@googlegroups.com

> 1. A(정상) - B(오류) : A, B 롤백
> 2. A(정상) - B(정상) - A(오류) : A 롤백, B 커밋
> 이 되어야 한다고 생각했는데 local-tx-datasource임에도 2번의 경우 A, B가 둘다 롤백이 되더군요.
> 마치 XA의 2PC 처럼 동작하는데 제가 알던 지식과 달라서 심히 혼란스럽네요.

제가 JBoss쪽을 거의 몰라서 정확한지 모르겠지만 local-tx-datasource로 설
정해도 global transaction으로 묶인다고 알고 있습니다. local-tx-
datasource와 xa-datasource는 클러스터링 환경에서 다중 서버간 분산 트랜젝
션을 지원하는지 여부 정도 같던데요.

그런데, 왜 1번은 A, B가 모두 롤백되어야 한다고 생각하셨나요?

> JBoss의 어떤 설정(JBossTA의 allowMultiLastResources = true 설정) 때문인지 싶기도 하구요. JTA를 사용하려면 XA를 설정하라는 JBoss 문서내용을 본 기억이 나네요.어떤 문제가 있을 까요

전 지금 뭐가 문제인지 잘 모르겠습니다. 위 1, 2번 상황 모두 global
transaction이 정상적으로 작동한 상황 같습니다.

Reply all
Reply to author
Forward
0 new messages