Java jta 原理_分布式事务JTA实现Atomikos与Spring集成实践
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集成实践相关推荐
- java jta_JTA规范_分布式事务教程_田守枝Java技术博客
JTA规范事务模型 Java事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分 ...
- python分布式事务_分布式事务的管理--atomikos
在一些业务场景及技术架构下,跨库的事务时不可避免的,这时候如何统一管理事务,保证事务的强一致性是整个系统稳定.可用基石.一些中间件如tuxedo.cics就是凭借这个能力占据了金融.电信.银行等很大的 ...
- 分布式事务 之 04 atomikos JTA/XA全局事务
文章目录 1. atomikos 2. 直接使用TransactionEssentials的API 2.1 新建mysql数据库表 2.2 案例代码 2.3 atomikos 源码分析 3.Trans ...
- 《深入理解分布式事务》第三章 Spring 事务的实现原理
<深入理解分布式事务>第三章 Spring 事务的实现原理 文章目录 <深入理解分布式事务>第三章 Spring 事务的实现原理 一.Spring 事务原理 1.JDBC 直接 ...
- 分布式系统漫谈【拾】_分布式事务一致性:阿里方案
上篇文章:分布式系统漫谈[玖]_分布式事务一致性:协议支持 其实对于生产环境的分布式事务一致,各大互联网公司都是自己实现的解决方案,总结起来无非是异步.补偿.实时查询.定期校对几种模式,大部分场景都是 ...
- mysql分布式事务wcf_[转载]WCF系列_分布式事务(下)
浏览到chnking的WCF的分布式事务处理不错,转载过来分享一下.1. WCF分布式事务例子这里也用转账的例子说事. 用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B ...
- xa 全局锁_分布式事务如何实现?深入解读 Seata 的 XA 模式
原标题:分布式事务如何实现?深入解读 Seata 的 XA 模式 作者简介:煊檍,GitHub ID:sharajava,阿里巴巴中件间 GTS 研发团队负责人,SEATA 开源项目发起人,曾在 Or ...
- 分布式事务解决方案——基于Atomikos的实现
声明:以下关于"JTA规范事务模型"."Spring JTA分布式事务的实现"等内容均来源于其他大佬的博客内容,并已经表明出处. 1.JTA规范事务模型 J ...
- spring整合atomikos实现分布式事务的方法示例_分布式事务中的XA和JTA
在介绍这两个概念之前,我们先看看是什么是X/Open DTP模型. X/Open X/Open,即现在的open group,是一个独立的组织,主要负责制定各种行业技术标准.X/Open组织主要由各大 ...
最新文章
- 内存接口芯片,服务器平台,PCIe 芯片
- 有关GetPrivateProfileString的使用方法
- 项目进度管理:规划项目进度管理
- mysql 时区设定_如何设置MySQL 时区
- java学习笔记2022.2.11
- 全局处理ajax请求时session超时
- 使用maven时报错Dynamic Web Module 3.1 requires Java 1.7 or newe
- 邮件退订_如何方便地退订邮件列表
- Sutton 强化学习, 21 点游戏的策略蒙特卡洛值预测
- 物理层数据通信理论基础
- 数据库连接字符串的写法(参考)
- Node.js---02、node.js 模块加载机制
- NLP技术在金融资管领域的落地实践
- PHP面试题 - MySQL数据库
- abstract 抽象类
- 组织化视角的智慧城市
- requests模块中使用代理proxy发送请求
- 写给非网工的CCNA教程(8)跨LAN的通信
- 学习使用jQuery中的on() 方法
- matlab向excel连续写数据,每次换行
热门文章
- PCL之K维树--KD-tree
- 为XHR对象所有方法和属性提供钩子 全局拦截AJAX
- RN与原生交互(一)——基本页面跳转
- Linux(乌班图 )系统下安装jdk 和eclipse开发IDE
- Leetcode学习成长记:天池leetcode基础训练营Task02链表
- Android零基础入门第86节:探究Fragment生命周期
- 美国科技投资交易约4.1%来自中国 投资仍然很困难
- cad关闭图层的快捷命令是什么_36个CAD快捷键命令,18个CAD制图技巧,学会轻松玩转CAD...
- 「管理数学基础」4.3 模糊数学:模糊关系与模糊矩阵、模糊关系的运算与合成、模糊等价关系
- 54. C# -- 泛型(Generic)