Spring的分布式事务实现(JTA+XA/2PC)

JTA是Java Transaction API简称 ,即Java事务管理器,主要管理本地事务。本地事务是只同一个数据库源中,多次数据库连接之间的事务,使得这多个数据表操作遵循ACID。

如果想让JTA管理多台数据库操作的分布式事务,需要XA支持,Open Group设计的X / Open分布式事务处理定义了一种标准通信架构。允许多个应用程序共享多个资源管理器提供的资源,并允许其工作协调到全局事务中。该XA接口使资源管理者参加事务,执行2PC(两个阶段提交),并在发生故障之后恢复。

2PC(两段提交)含义:首先, 事务协调员向每个服务器询问一遍,要求每个数据库都进行precommit的操作和是否可能实现 commit. 如果所有数据库都同意commit ,第二段开始。第二段:事务协调员要求每个数据库commit数据. 如果任何数据库否决commit, 那么所有数据库将被要求回滚。当事务对某个数据库锁定时,这个数据库或列就不可用,或者响应时间很慢。牺牲可用性了。

JTA + XA能够实现分布式事务2PC 。

Spring提供了JTA介入方式,但是没有提供JTA实现,目前JTA实现: Java Open Transaction Manager (JOTM), JBoss TS, Bitronix Transaction Manager (BTM), 和 Atomikos。

相关文章:
XA transactions using Spring,最老的一篇文章,JBossTS提供数据源之间的事务,但是不支持数据库源和JMS源,而Atomikos则支持。

Spring分布 式事务XA事务(两段提交2PC)实现:BTM的JTA实现。

Two Phase Commit With Tomcat Spring JMS And JDBC:使用Atomikos+Spring + JMS + JDBC实现

使用1PC实现分 布式事务,这是避免使用2PC,打插边球,虽然可靠性降低,但是性能提升,主要适合两三个不太多的数据库同时更新。

Configuring Spring and JTA without full Java EE:Spring官方网站的分 布式事务案例

在Weblogic服务器中使用Spring,安装MedRec-Spring可支持分布 式事务

xa transaction spring:文章提供源码案例。

Spring JTA multiple resource transactions in Tomcat with Atomikos example:提供了Atomikos+Spring源码案例

[该贴被banq于2017-04-12 15:49修改过]
[该贴被banq于2017-04-12 15:50修改过]
[该贴被banq于2017-04-12 15:51修改过]