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 つの手順が必要です。

  1. トランザクションマネージャーの定義

    • 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 でトランザクションマネージャーを検索します。

  2. 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 は id ConnectionFactory のデフォルトの Bean として提供されます。

    JcaPooledConnectionFactory は通常の ConnectionFactory のようになります。しかし、新しいコネクションおよびセッションが開かれると、XA トランザクションがチェックされ、見つかった場合は JMS セッションを XA リソースとして自動的に登録します。これにより、JMS セッションが JMS トランザクションに参加できるようになります。

    重要

    JMS トランスポートに XA ConnectionFactory を直接設定しても動作しません。