14.4. JMS 트랜잭션 구성
14.4.1. 개요
CXF 3.0은 단방향 메시징을 사용할 때 CXF 끝점에서 로컬 JMS 트랜잭션 및 JTA 트랜잭션을 모두 지원합니다.
14.4.2. 로컬 트랜잭션
로컬 리소스를 사용하는 트랜잭션은 예외가 발생하는 경우에만 JMS 메시지를 롤백합니다. 데이터베이스 트랜잭션과 같은 다른 리소스를 직접 조정하지 않습니다.
로컬 트랜잭션을 설정하려면 일반적으로 끝점을 구성하고 sessionTrasnsacted
속성을 true
로 설정합니다.
트랜잭션 및 풀링에 대한 자세한 내용은 Red Hat JBoss Fuse 트랜잭션 가이드를 참조하십시오.
14.4.3. JTA 트랜잭션
JTA 트랜잭션을 사용하면 원하는 수의 XA 리소스를 조정할 수 있습니다. CXF 엔드포인트가 JTA 트랜잭션에 대해 구성된 경우 서비스 구현을 호출하기 전에 트랜잭션을 시작합니다. 예외가 발생하지 않으면 트랜잭션이 커밋됩니다. 그렇지 않으면 롤백됩니다.
JTA 트랜잭션에서는 JMS 메시지를 사용하고 데이터베이스에 기록된 데이터를 사용합니다. 예외가 발생하면 두 리소스가 모두 롤백되므로 메시지가 사용되고 데이터가 데이터베이스에 기록되거나 메시지가 롤백되고 데이터가 데이터베이스에 기록되지 않습니다.
JTA 트랜잭션을 구성하려면 다음 두 단계가 필요합니다.
트랜잭션 관리자 정의
Cryostat 메서드
트랜잭션 관리자 정의
<bean id="transactionManager" class="org.apache.geronimo.transaction.manager.GeronimoTransactionManager"/>
JMS URI에서 트랜잭션 관리자의 이름 설정
jms:queue:myqueue?jndiTransactionManager=TransactionManager
이 예에서는 ID
TransactionManager
가 있는 8080을 찾습니다.
OSGi 참조 방법
블루프린트를 사용하여 트랜잭션 관리자를 OSGi 서비스로 검색
<reference id="TransactionManager" interface="javax.transaction.TransactionManager"/>
JMS URI에서 트랜잭션 관리자의 이름 설정
jms:jndi:myqueue?jndiTransactionManager=java:comp/env/TransactionManager
이 예에서는 JNDI에서 트랜잭션 관리자를 조회합니다.
JCA 풀링된 연결 팩토리 구성
Spring을 사용하여 JCA 풀링된 연결 팩토리를 정의합니다.
<bean id="xacf" class="org.apache.activemq.ActiveMQXAConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> <bean id="ConnectionFactory" class="org.apache.activemq.jms.pool.JcaPooledConnectionFactory"> <property name="transactionManager" ref="transactionManager" /> <property name="connectionFactory" ref="xacf" /> </bean>
이 예제에서 첫 번째 Cryostat는
JcaPooledConnectionFactory
에 제공되는 ActiveMQ XA 연결 팩토리를 정의합니다. 그런 다음JcaPooledConnectionFactory
가 IDConnectionFactory
를 사용하여 기본 8080으로 제공됩니다.JcaPooledConnectionFactory
는 일반 ConnectionFactory와 같습니다. 그러나 새 연결 및 세션이 열리면 XA 트랜잭션을 확인하고, 발견되면 JMS 세션을 XA 리소스로 자동으로 등록합니다. 이를 통해 JMS 세션은 JMS 트랜잭션에 참여할 수 있습니다.중요JMS 전송에 XA ConnectionFactory를 직접 설정하면 작동하지 않습니다!