`
m635674608
  • 浏览: 5030921 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用Atomikos处理ActiveMQ在Spring环境的XA事务

 
阅读更多

ActiveMQ完全遵循jms规范,而jms是支持事务的,即要么全部成功,要么全部失败。很多时间,我们的JMS操作需要和数据库操作的事务一致,即要么jms和数据库操作都成功,要么jms和数据库操作都失败,这就是分布式事务(xa事务, 也就是所谓的两段式提交事务,在java中的编程接口为JTA)的用武之地。
完美实现j2ee规范的web server是提供对JTA的实现的,但是tomcat,jetty等轻量级的web server没有提供,在j2se环境也没有,幸运的是还有第三的实现。atomikos就是其中的一个,因其有完整的文档,活跃的社区,商业的支持,而成为第三方jta实现的佼佼者。本文就使用该实现来实践xa事务。
步骤:
为了让本demo有最大的可移植性,本文使用h2数据库,而h2虽然是嵌入式数据库,但是它实现了xa事务,这正是我需要的。

1、新建一个Maven 工程

2、在Pom.Xml中添加对应的依赖

主要有spring-jms,spring-jdbc,activemq-all,com.atomikos:transactions-jta,com.atomikos:transactions-jdbc,com.atomikos:transactions-jms,com.h2database:h2

3、新建Schema.Sql,用于创建测试用的表

 

 

4、新建ApplicationContext.Xml

配置对应的bean,具体可以参考附件中的对应文件,注意xa.dataSource和xa.connectionFactory bean的定义,都指定了init-method="init" destroy-method="close"属性,因为在init方法中会将其加入Transaction Manager中去。
2)为了便于管理h2数据库,我声明了org.h2.tools.Server ,这样就可以将浏览器指向http://localhost:8082/来查看h2数据库的内容。

5、开发Service类

 

代码很简单,将User对象同时插入数据库和ActiveMQ队列。只要有某一步操作异常,就会造成数据库和ActiveMQ操作都回滚。使用了Spring经典的声明式事务@Transactional,当发生JdbcSQLException或者RuntimeException时回滚。

6、添加Main方法来触发测试

 

代码很简单,我们构造了两个User对象,注意我们将user 两次加入到了list中,目的为了造成主键重复!!
从context中获取TestXaService对象,调用testXaService.persistence(list)来持久化该list中的对象。

7、测试:

1、启动ActiveMQ 服务器
2、运行程序,发现插入失败,ActiveMQ事务和数据库事务都回滚;将user对象只插入一次到list中,事务提交成功。

参考文档:

1、《ActiveMQ in action》
2、Configuring ActiveMQ transactions in Spring
3、atomikos官网
4、Atomikos TransactionsEssentials Guide.pdf

 

 

http://www.javacoder.cn/?p=428

分享到:
评论

相关推荐

    spring搭建分布式事务所需嘉宝atomikos加druid配置分布式事务

    Atomikos是一个开源的事务处理服务,支持JTA(Java Transaction API),能很好地处理分布式环境中的ACID(原子性、一致性、隔离性和持久性)事务特性。Druid则是阿里巴巴开源的一个强大且灵活的数据库连接池组件,它...

    使用Spring+atomikos实现分布式事务

    Spring框架提供了强大的支持来处理分布式事务,而Atomikos是一个开源的事务管理器,专门用于处理JTA(Java Transaction API)事务,尤其适用于微服务和分布式环境。本教程将探讨如何结合Spring和Atomikos来实现...

    java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip

    8. **集成与配置**: 集成Atomikos到Spring Boot项目中,需要在配置文件中设置相关的事务管理属性,比如数据源、事务超时时间等,并且需要在代码中适当地声明和管理事务边界。 9. **测试与监控**: 在分布式事务环境...

    spring、mybatis、atomikos实现多数据源事务demo

    5. 业务代码中处理事务:在需要处理跨数据源事务的方法上使用@Transactional注解,由Spring的AOP代理来管理事务的生命周期。 6. 编写Mapper接口和XML文件:定义SQL查询和更新操作,关联到相应的数据源。 7. 测试:...

    SpringBoot+Atomikos+动态多数据源+事务+2种切换数据源的方式

    3. **事务管理**:SpringBoot默认使用LocalContainerEntityManagerFactoryBean处理JPA事务,但在多数据源环境中,需要改为使用Atomikos的`JtaPlatformTransactionManager`。此外,确保开启@...

    atomikos分布式事务提交框架

    Atomikos是一个强大的开源分布式事务处理框架,专为Java企业级应用设计,它提供了一种在分布式环境中确保数据一致性的方式。在大型系统中,尤其是在微服务架构或云环境下的复杂业务场景,分布式事务处理是必不可少的...

    非Maven基于SSM+Atomikos的分布式事务处理案例源码

    综上所述,这个案例提供了一个非Maven的SSM+Atomikos分布式事务解决方案,帮助开发者了解如何在没有Maven的情况下,处理多数据源和分布式环境下的事务问题。通过学习和实践,开发者可以提升在复杂分布式系统中的事务...

    tr-test:atomikos spring activemq jta oracle

    测试atomikos spring activemq jta oracle 为了最大限度地恢复和关闭/重启能力,强烈建议您使用以下 init 依赖项配置 Spring 配置: 使事务管理器依赖于您所有的 JDBC 和 JMS 连接工厂:这可确保在关闭期间事务管理...

    spring + JTA + atomikos 实现分布式事务

    总之,Spring + JTA + Atomikos的组合提供了一种强大而灵活的方式,用于处理分布式环境中的事务管理。通过理解JTA的基本原理,掌握Spring的事务管理机制,以及熟悉Atomikos的使用,开发者可以构建出高可用、强一致性...

    Spring+MyBatis+Atomikos实现JTA分布式事务

    本文将深入探讨如何使用Spring、MyBatis和Atomikos实现JTA分布式事务。 首先,让我们理解JTA的概念。Java Transaction API(JTA)是Java EE规范之一,用于处理分布式环境中的事务。它允许应用程序在不同的资源管理...

    spring4+atomikos实现分布式事务

    在这个案例中,我们将深入探讨如何使用Spring 4与Atomikos来实现跨数据库的分布式事务管理。 Atomikos是一款开源的事务处理监控器(Transaction Processing Monitor,TPM),它支持JTA(Java Transaction API)标准...

    Spring3.0+Hibernate+Atomikos多数据源分布式事务管理

    **多数据源事务管理**: 在Spring 3.0中,可以通过定义多个DataSource bean并结合Atomikos的UserTransaction接口来处理多数据源事务。每个DataSource代表一个不同的数据库连接池,而Atomikos作为全局事务协调者,可以...

    spring+atomikos+druid分布式事务Demo

    本示例"spring+atomikos+druid分布式事务Demo"聚焦于如何在Spring框架中利用Atomikos和Druid来处理分布式事务。接下来,我们将深入探讨这三个组件以及它们在实现分布式事务中的作用。 Spring是一个广泛使用的Java...

    基于Spring4.1.7+atomikos+mybaits 实现两阶段的分布式事务处理

    通过以上步骤,我们便成功地在Spring 4.1.7、Atomikos和MyBatis的基础上搭建了一个两阶段的分布式事务处理系统。在实际应用中,这种架构能有效处理复杂的业务逻辑,保证数据的一致性,同时提供良好的扩展性和容错性...

    Atomikos实现分布式事务

    在Web项目中使用Atomikos实现分布式事务,通常包括以下步骤: 1. **集成Atomikos**:首先,你需要将Atomikos的依赖库添加到你的项目中,这可以通过Maven或Gradle的依赖管理来完成。确保引入的版本与你的项目所使用...

    Atomikos分布式事务处理所需jar包

    6. **atomikos-log-api.jar** 和 **atomikos-log-xa.jar**:这些是日志管理和XA协议实现的相关库,用于在分布式环境中跟踪和恢复事务。 7. **atomikos-resources-ext.jar**:包含了对其他外部资源(如NoSQL数据库或...

    springboot + mybatis + atomikos 多数据源分布式事物管理

    Atomikos 提供了 XA 事务支持,这使得它可以协调来自不同数据源的事务,确保在整个分布式环境中的事务一致性。 在 Spring Boot 中集成 Atomikos,开发者需要配置 Atomikos 作为事务管理器,并为每个数据源设置相应...

    Spring Boot + Druid + Mybatis + Atomikos 配置多数据源 并支持分布式事务

    总结,通过Spring Boot、Druid、Mybatis和Atomikos的组合,我们可以实现多数据源环境下的分布式事务,提高系统的可扩展性和事务一致性。这个示例项目(springboot-druid-mybatis-multi)应该包含了相关的配置文件和...

    spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制

    在Spring中集成Atomikos,可以实现全局的分布式事务管理,确保在分布式环境下的数据一致性。 4. **配置多数据源** 在Spring的XML配置文件中,我们需要为每个数据源创建一个`AtomikosDataSourceBean`实例,并配置...

Global site tag (gtag.js) - Google Analytics