14.4. 配置 JMS 事务


概述

CXF 3.0 在使用单向消息传递时支持 CXF 端点上的本地 JMS 事务和 JTA 事务。

本地事务

只有在发生异常时,使用本地资源的事务才会回滚 JMS 消息。它们不会直接协调其他资源,如数据库事务。

要设置本地事务,请将端点配置为您通常会将属性 sessionTrasnsacted 设置为 true

注意

有关事务和池的更多信息,请参阅 Red Hat JBoss Fuse 事务指南

JTA 事务

使用 JTA 事务时,您可以协调任意数量的 XA 资源。如果为 JTA 事务配置了 CXF 端点,它会在调用服务实施前启动事务。如果没有异常,交易将被提交。否则,它将回滚。

在 JTA 事务中,使用 JMS 消息并写入数据库的数据。发生异常时,两个资源都会回滚,因此信息会被消耗,并且数据写入数据库,或者消息将被回滚,数据也不会写入数据库。

配置 JTA 事务需要两个步骤:

  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 定义了 ActiveMQ XA 连接工厂,提供给 JcaPooledConnectionFactory。然后,提供 JcaPooledConnectionFactory 作为默认 bean,其 id ConnectionFactory

    注意 JcaPooledConnectionFactory 类似于普通的 ConnectionFactory。但打开新连接和会话时,它将检查 XA 事务;如果找到,则会自动将 JMS 会话注册为 XA 资源。这允许 JMS 会话参与 JMS 事务。

    重要

    在 JMS 传输上直接设置 XA ConnectionFactory 将无法工作!

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.