项目中XA Transaction应用
来源:互联网 发布:淘宝客独家是什么意思 编辑:程序博客网 时间:2024/06/05 02:19
和新同事介绍JEE事务的时候,大家对JPA和JTA的理解不够。这里聊聊有JPA后为什么还要JTA。JPA是大家常用的持久化规范,它提供了事务管理。它的事务处理都是单资源事务,那么事务是否成功,是否需要回滚就是一件比较简单的事情,只要和单资源交互就好。一个典型的数据库资源事务基本步骤如下:
开启事务执行事务确认事务结果(提交或者回滚)结束事务
简单的单资源事务, Local Transactions.,JPA就已经支持。在我们的项目中,有一个计价过程需要同时操作数据库和MQ两种资源(写入数据到MQ然后记录状态到数据库)。这个时候就需要XA,Global Transactions, JTA提供了相应的支持。在我们的系统中,一个XA的过程如下:
成功交互顺序:开启消息事务发送消息开启数据库事务更新数据库提交数据库事务提交消息事务如果出错,比如数据库出错,交互过程如下:开启消息事务发送消息开启数据库事务更新数据库失败回滚数据库事务回滚消息事务
Spring JTA的实现非常好,JtaTransactionManager帮助我们屏蔽了底下的细节,结合Atomikos给我们提供了非JEE容器依赖的XA实现, JtaTransactionManager子类WebLogicJtaTransactionManager和WebSphereUowTransactionManager提供了基于Weblogic和Websphere的JTA管理。在我们的系统中用的是websphere,所以我们配置了基于WebSphereUowTransactionManager的事务管理。
<bean id="txManager" class="org.springframework.transaction.jta.WebSphereUowTransactionManager" /><tx:annotation-driven transaction-manager="txManager"/>
更详细的实现例子可以参考IBM文档:http://www.ibm.com/developerworks/websphere/techjournal/0609_alcott/0609_alcott.html
JTA使用后对我们的系统产生了一定的性能影响,所以最后我们简化了系统的实现,直接改成2个单事务来处理,因为数据库记录是否成功对我们系统的影响不大,最多导致MQ消息重复处理一次。
开启消息事务发送消息提交消息事务开启数据库事务更新数据库提交数据库事务
参考资料:two-phase commit
three-phase commit。
JEE中XA经典讲解
- 项目中XA Transaction应用
- Hibernate XA transaction
- Java JTA XA transaction(经典)
- XA
- XA
- XA
- XA
- SQL Server学习:存储过程中Transaction(事务)的应用
- SQL Server学习:存储过程中Transaction(事务)的应用
- javax.transaction.xa.XAException: java.sql.SQLException: 无法创建 XA 控制连接。错误: 未能找到存储过程 'master..xp_sqljd
- javax.transaction.xa.XAException: java.sql.SQLException: 无法创建 XA 控制连接。(SQL 2000,SQL2005,SQL2008)
- ssh框架web项目中Transaction发生转换异常
- ORA-600 [504], ..., [Transaction Branch Allocation] Error When Using XA [ID 868527.1]
- 项目中应用ant
- 项目中应用Echarts
- 在 WebSphere Studio 中配置并使用 XA 分布式事务
- MSXML 在属性值中写入换行 &#xA;
- 在sql server中配置XA (by quqi99)
- mcsdk_video下 h.264 视频编码 demo(sv04)编译实验
- TCP协议中的三次握手和四次挥手
- poj 1151 扫描线
- Trie树
- PHP延迟绑定练习
- 项目中XA Transaction应用
- UVA 10200 (欧拉定理打表)
- Android中接口回调、方法回调
- 如何重启MySQL服务
- Leetcode 142. Linked List Cycle II (Medium) (cpp)
- jvm 类初始化的条件
- eclipse连接数据库sql server 2008
- 51nod oj 1050 循环数组最大子段和 【DP】
- js中的preventDefault与stopPropagation详解