환경: 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 문서내용을 본 기억이 나네요.
어떤 문제가 있을 까요?
제가 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이 정상적으로 작동한 상황 같습니다.