Menu Close
14.4. JMS トランザクションの設定
概要
CXF 3.0 は、一方向メッセージングを使用する場合、CXF エンドポイントでローカル JMS トランザクションと JTA トランザクションの両方をサポートします。
ローカルトランザクション
例外が発生した場合のみ、ローカルリソースを使用するトランザクションは JMS メッセージをロールバックします。データベーストランザクションなどの他のリソースを直接調整しません。
ローカルトランザクションを設定するには、通常通りエンドポイントを設定し、sessionTrasnsacted
プロパティーを true
に設定します。
トランザクションとプーリングの詳細は『Red Hat JBoss Fuse Transaction Guide』を参照してください。
JTA トランザクション
JTA トランザクションを使用すると、任意の数の XA リソースを調整できます。CXF エンドポイントが JTA トランザクション用に設定されている場合、サービス実装を呼び出す前にトランザクションが開始されます。例外が発生しなかった場合、トランザクションはコミットされます。それ以外の場合はロールバックされます。
JTA トランザクションでは、JMS メッセージが消費され、データがデータベースに書き込まれます。例外が発生すると、両方のリソースがロールバックされるため、メッセージが消費されてデータがデータベースに書き込まれるか、メッセージがロールバックされてデータがデータベースに書き込まれません。
JTA トランザクションを設定するには、以下の 2 つの手順が必要です。
トランザクションマネージャーの定義
Bean メソッド
トランザクションマネージャーの定義
<bean id="transactionManager" class="org.apache.geronimo.transaction.manager.GeronimoTransactionManager"/>
JMS URI にトランザクションマネージャーの名前を設定
jms:queue:myqueue?jndiTransactionManager=TransactionManager
この例では、ID
TransactionManager
の Bean を検索します。
OSGi リファレンスメソッド
Blueprint を使用してトランザクションマネージャーを 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>
この例では、最初の Bean は
JcaPooledConnectionFactory
に渡されたされた ActiveMQ XA コネクションファクトリーを定義します。その後、JcaPooledConnectionFactory
は idConnectionFactory
のデフォルトの Bean として提供されます。JcaPooledConnectionFactory
は通常の ConnectionFactory のようになります。しかし、新しいコネクションおよびセッションが開かれると、XA トランザクションがチェックされ、見つかった場合は JMS セッションを XA リソースとして自動的に登録します。これにより、JMS セッションが JMS トランザクションに参加できるようになります。重要JMS トランスポートに XA ConnectionFactory を直接設定しても動作しません。