`
fengzl
  • 浏览: 216218 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

JTA中跨数据库事备的实现原理----简单理解

阅读更多
我根据自己的经验谈一下个人看法。这是一个非常复杂的话题。三言两语可能说不清楚。

1. Transaction 分两种,Local Transaction 和 Global Transaction。
涉及到一个Connection的Commit,称为Local Transaction。
涉及到多个Connection的Commit,称为Global Transaction。
楼主提到的是,Global Transaction.

2. Global Transaction 需要XA接口(包括在JTA里面)的支持。

import javax.sql.XAConnection;
import javax.transaction.xa.Xid;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.XAException;
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;

其中的
javax.sql.XAConnection;
javax.transaction.xa.Xid;
javax.transaction.xa.XAResource;

这些XA接口的实现,需要数据库的JDBC提供。
数据库本身要支持XA。数据库的JDBC也要提供XA的实现。

Oracle, Sybase, DB2, SQL Server等大型数据库才支持XA, 支持Global Transaction。
My SQL 连Local Transaction都支持不好,更别说Global Transation了。

3. XA需要两阶段提交 -- prepare 和 commit.
假设有两个Connection, con1, con2, 大体的过程如下,

con1 = XAResouce1.getConnection...
con2 = XAResouce2.getConnection...

con1 do some thing.
con2 do some thing.
after they finish.

pre1 = XAResouce1.prepare();
pre2 = XAResouce2.prepare();

if( both pre1 and pre2 are OK){
XAResouce1 and 2 commit
}else {
XAResouce1 and 2 rollback
}


前面有人讲了,在XAResouce1 and 2 commit的时候,
可能XAResouce1 commit() 成功了,XAResouce2 commit()失败了。
这时候,会抛出一个 “启发式异常”。程序可以处理这个异常。比如,XAResouce.recover()之类。
但一般情况下,还真没别的办法,需要数据管理员根据数据操作日志 undo所有的操作,或者恢复数据备份。
有的数据库在进行数据操作的时候,会生成一个“反操作”日志。比如,insert 对 delete, 等。

4. TransactionManager的实现能够处理多个XAResouce(一个XAResouce list)的情况。
比如Tyrex。或JBoss等EJB Server的Transaction实现代码
分享到:
评论
2 楼 Leonid2002 2014-07-27  
赞一下,我就比较欣赏这种三言两语把原理讲明白的风格。网上尽是码一堆配置文件和代码,实际上可能他自己都没理解重点在哪
1 楼 ye_guanwen 2011-06-28  
不错喔。

相关推荐

    jta1.1-doc

    《JTA 1.1 技术文档详解》 JTA(Java Transaction API)是Java平台企业版...通过深入学习和理解JTA 1.1文档,开发者可以更好地掌握分布式事务处理的原理和实践,从而在Java EE环境下构建更健壮、可扩展的应用程序。

    java实现JTA简单例子

    在本例子中,我们将通过一个简单的Java程序来理解JTA的工作原理。 `TestXa.java` 文件很可能是用来实现JTA事务管理的核心代码。在Java中,实现JTA通常涉及以下几个关键组件: 1. **Transaction Manager(事务管理...

    JavaEE5学习笔记01-JTA和数据库事务

    ### JavaEE5学习笔记01-JTA和数据库事务:深入解析与应用 #### 一、JavaEE5概览与核心组件 ...通过深入理解JTA的工作原理和应用场景,开发者可以更好地设计和实现高性能、高可用性的JavaEE应用。

    JTA 深度历险 - 原理与实现.pdf

    最后,文档中还介绍了两位IBM中国软件开发中心(CSDL)的工程师,他们具有丰富的J2EE开发经验,对于JTA的体系架构和实现机制有着深入的理解和实践经验。这些背景信息为文章内容的专业性提供了支持。

    spring jta

    JTA是Java平台标准的一部分,用于管理跨多个数据源(如数据库、消息队列等)的事务。 在Spring框架中,JTA事务管理主要用于处理分布式系统中的事务,确保数据的一致性和完整性。Spring提供了两种主要的方式来实现...

    完整的jta例子 mysql测试

    在这个例子中,我们将深入探讨如何在MySQL数据库环境下使用JTA来实现跨不同数据存储的事务一致性。 【描述】虽然描述部分为空,但根据标题,我们可以推测这是博主Andilyliao在iteye博客上分享的一个详细教程,目的...

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

    通过理解JTA的基本原理,掌握Spring的事务管理机制,以及熟悉Atomikos的使用,开发者可以构建出高可用、强一致性的分布式系统。在实际操作中,还需要不断地调试和优化,以确保系统的稳定性和性能。

    HIBERNATE - 符合Java习惯的关系数据库持久化

    4. **JTASession管理**:在支持JTA(Java Transaction API)的环境中,Hibernate可以集成JTA事务管理器,提供分布式事务支持。 #### 三、架构与工作原理 Hibernate的核心架构主要包括以下几个层次: 1. **概览**...

    JTA-demo说明文档.doc

    2. 资源参与事务:应用在事务中执行操作,如数据库查询或更新,这些资源必须实现XAResource接口,并注册到事务管理器。 3. 提交或回滚:当所有操作完成,应用决定提交事务(`userTransaction.commit()`)或在遇到...

    jta-1.0.1B.jar

    4. **JTS(Java Transaction Service)**:这是JTA的一种实现,提供了一种分布式的事务协调器,可以跨多个节点管理事务。在JTA-1.0.1B.jar中,JTS负责处理事务的传播、两阶段提交(2PC)等复杂逻辑。 5. **JTAS...

    Hibernate实现原理模拟

    二级缓存可配置,实现跨Session的数据共享。 **四、模拟Hibernate实现** 模拟Hibernate,可以创建一个简单的Java类库,包含以下关键组件: 1. **配置类**:模拟hibernate.cfg.xml,包含数据库连接信息。 2. **...

    跨多个数据库操作,同时连接两个一上的数据库,用事物关联起来

    在IT行业中,尤其是在分布式系统和企业级应用中,经常需要处理跨多个数据库的操作。这种情况下,数据一致性变得至关重要,这就引入了"跨多个数据库操作"的概念。为了保证数据的一致性,我们需要一种机制来协调这些...

    JAVA JTA jar-doc-spec

    通过阅读“JAVA JTA jar-doc-spec”中的文档和规范,开发者可以深入理解JTA的工作原理,学习如何在Java应用中实现事务管理,以及如何与其他Java EE组件如JDBC和JMS结合使用,以构建健壮的、高可用的企业级应用。...

    Lab4-JTA-code_jta_choiceh76_

    通过这个实验,你将更深入地理解JTA的工作原理,以及如何在实际项目中应用分布式事务处理。掌握这些技能对于开发高可用、高并发的Java企业级应用至关重要。在实践中,你还需要注意事务的ACID属性(原子性、一致性、...

    spring+jotm+ibatis+mysql实现JTA分布式事务

    本项目“spring+jotm+ibatis+mysql实现JTA分布式事务”旨在利用这些技术来确保在分布式环境中的数据一致性。下面将详细介绍这个项目所涉及的知识点。 首先,Spring框架是Java开发中最常用的应用框架之一,它提供了...

    第二部分spring+hibernate+jta 分布式事务Demo

    在这个"第二部分spring+hibernate+jta 分布式事务Demo"中,我们将深入探讨如何利用这些技术实现高效的分布式事务管理。 Atomikos是一个开源的JTA实现,它提供了一套完整的事务管理解决方案,包括事务协调器和服务,...

    Spring boot+Atomikos+JTA+Hibernate+MySQL实现分布式事务+多数据源(可运行)

    在分布式系统中,确保数据的一致性和完整性是至关重要的,这就是分布式事务的用武之地。本项目使用Spring Boot、Atomikos、JTA(Java ...通过理解和实践这个项目,开发者可以深入理解分布式事务的原理和实现方式。

    分布式事务JTA之实践:Spring+ATOMIKOS

    通过深入理解Spring的事务管理机制和Atomikos的工作原理,开发者可以在复杂的企业级应用中有效地处理分布式事务,确保系统的稳定性和数据的一致性。同时,熟悉JTA规范也有助于更好地理解和适配其他JTA实现,比如...

    jta使用手册,jta帮助文档jta使用手册,jta帮助文档

    ### Java Transaction API...对于构建大型、分布式的企业级应用而言,理解和掌握JTA的基本原理和实践至关重要。无论是作为开发者还是架构师,熟悉JTA的接口、服务以及其实现考虑都将极大提升项目的技术深度和性能表现。

    事务处理--介绍事务原理和事务实现.docx

    在IT领域,事务处理是数据库管理系统中的核心概念,它确保了数据的一致性和完整...理解事务的概念、原理和实现方式,能够帮助开发者在设计和实现高可用、高性能的应用时,有效地管理数据的变更,防止数据不一致和丢失。

Global site tag (gtag.js) - Google Analytics