Atomikos官网无法访问,不过Maven中央库中具atomikos包。Atomikos集成Spring,Hibernate,Mybatis网上文章比较多,本文是通过JavaSE的方式借用Spring配置来测试Atomikos对JTA的实现。

下面做一件事,就是两(+)个数据库,在一个事务里对其分别对数据库操作验证操作的原子性,即要么两个数据库的操作都成功,要么都失败。

1.准备工作

1.1 Maven pom.xml中添加依赖包

atomikos:(目前最新版)

jar依赖图:

Postgresql数据库驱动:

注:文中使用的是Postgresql V9.2

javax.transaction.transaction-api.1.1:

注:根据需要选择其一即可。

Spring,Junit依赖这里省略。

1.2 创建数据库以及表

数据库分别是:javaee,tomdb

2.在项目中添加配置文件

spring-jta.xml 和transaction.properties(模版见文中附件)文件,spring-jta.xml在src/main/resources/integration下,transaction.properties在src/main/resources/下。

2.1在spring-jta.xml中配置两个XADataSource:

说明:

Postgresql的max_prepared_transactions参数值默认是0,要开启XA需要设置该值至少和max_connections参数值一样大,该参数在PostgreSQL\9.3\data\postgresql.conf文件中。

PGXADataSource的父类BaseDataSource没有url属性,可需要分别设置serverName,portNumber,databaseName等属性。不同的数据库驱动有不同的实现方法。

2.2 配置事务管理对象和UserTransaction接口实现

上面三个Bean可以独立使用来进行事务控制,具体看下面3。

3. 编写测试

3.1 使用atomikosUserTransactionManager对象测试(TestAtomikos1.java)

3.2使用Spring的JtaUserTransactionManager对象测试(TestAtomikos2.java 修改TestAtomikos1.java中的exe方法即可)

3.3使用atomikosUserTransaction Bean对象进行测试(TestAtomikos3.java 修改TestAtomikos1.java中的exe方法即可)

使用上述三种UserTransaction进行测试,其中test1方法是成功执行,test2方法是执行失败的(因为插入的值长度超过的字段长度限制)。通过分析之后,如果分布式事物控制正确,那么数据库中写入的值对于两张不同的表而言,是没有数字值被写入的。如图所示:

在测试过程中,经过对比确实达到了分布式事务控制的效果。

整个操作的架构图如下(摘自Atomikos Blog)

关于JTA原理文章开始提到的那篇文章,写的很详细和清晰,可以细细阅读和理解。

本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1658102,如需转载请自行联系原作者

Java jta 原理_分布式事务JTA实现Atomikos与Spring集成实践相关推荐

  1. java jta_JTA规范_分布式事务教程_田守枝Java技术博客

    JTA规范事务模型 Java事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分 ...

  2. python分布式事务_分布式事务的管理--atomikos

    在一些业务场景及技术架构下,跨库的事务时不可避免的,这时候如何统一管理事务,保证事务的强一致性是整个系统稳定.可用基石.一些中间件如tuxedo.cics就是凭借这个能力占据了金融.电信.银行等很大的 ...

  3. 分布式事务 之 04 atomikos JTA/XA全局事务

    文章目录 1. atomikos 2. 直接使用TransactionEssentials的API 2.1 新建mysql数据库表 2.2 案例代码 2.3 atomikos 源码分析 3.Trans ...

  4. 《深入理解分布式事务》第三章 Spring 事务的实现原理

    <深入理解分布式事务>第三章 Spring 事务的实现原理 文章目录 <深入理解分布式事务>第三章 Spring 事务的实现原理 一.Spring 事务原理 1.JDBC 直接 ...

  5. 分布式系统漫谈【拾】_分布式事务一致性:阿里方案

    上篇文章:分布式系统漫谈[玖]_分布式事务一致性:协议支持 其实对于生产环境的分布式事务一致,各大互联网公司都是自己实现的解决方案,总结起来无非是异步.补偿.实时查询.定期校对几种模式,大部分场景都是 ...

  6. mysql分布式事务wcf_[转载]WCF系列_分布式事务(下)

    浏览到chnking的WCF的分布式事务处理不错,转载过来分享一下.1. WCF分布式事务例子这里也用转账的例子说事. 用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B ...

  7. xa 全局锁_分布式事务如何实现?深入解读 Seata 的 XA 模式

    原标题:分布式事务如何实现?深入解读 Seata 的 XA 模式 作者简介:煊檍,GitHub ID:sharajava,阿里巴巴中件间 GTS 研发团队负责人,SEATA 开源项目发起人,曾在 Or ...

  8. 分布式事务解决方案——基于Atomikos的实现

    声明:以下关于"JTA规范事务模型"."Spring JTA分布式事务的实现"等内容均来源于其他大佬的博客内容,并已经表明出处. 1.JTA规范事务模型   J ...

  9. spring整合atomikos实现分布式事务的方法示例_分布式事务中的XA和JTA

    在介绍这两个概念之前,我们先看看是什么是X/Open DTP模型. X/Open X/Open,即现在的open group,是一个独立的组织,主要负责制定各种行业技术标准.X/Open组织主要由各大 ...

最新文章

  1. 内存接口芯片,服务器平台,PCIe 芯片
  2. 有关GetPrivateProfileString的使用方法
  3. 项目进度管理:规划项目进度管理
  4. mysql 时区设定_如何设置MySQL 时区
  5. java学习笔记2022.2.11
  6. 全局处理ajax请求时session超时
  7. 使用maven时报错Dynamic Web Module 3.1 requires Java 1.7 or newe
  8. 邮件退订_如何方便地退订邮件列表
  9. Sutton 强化学习, 21 点游戏的策略蒙特卡洛值预测
  10. 物理层数据通信理论基础
  11. 数据库连接字符串的写法(参考)
  12. Node.js---02、node.js 模块加载机制
  13. NLP技术在金融资管领域的落地实践
  14. PHP面试题 - MySQL数据库
  15. abstract 抽象类
  16. 组织化视角的智慧城市
  17. requests模块中使用代理proxy发送请求
  18. 写给非网工的CCNA教程(8)跨LAN的通信
  19. 学习使用jQuery中的on() 方法
  20. matlab向excel连续写数据,每次换行

热门文章

  1. PCL之K维树--KD-tree
  2. 为XHR对象所有方法和属性提供钩子 全局拦截AJAX
  3. RN与原生交互(一)——基本页面跳转
  4. Linux(乌班图 )系统下安装jdk 和eclipse开发IDE
  5. Leetcode学习成长记:天池leetcode基础训练营Task02链表
  6. Android零基础入门第86节:探究Fragment生命周期
  7. 美国科技投资交易约4.1%来自中国 投资仍然很困难
  8. cad关闭图层的快捷命令是什么_36个CAD快捷键命令,18个CAD制图技巧,学会轻松玩转CAD...
  9. 「管理数学基础」4.3 模糊数学:模糊关系与模糊矩阵、模糊关系的运算与合成、模糊等价关系
  10. 54. C# -- 泛型(Generic)