`

本地事务和全局事务

 
阅读更多

Java事务从事务的实现角度分为:JDBC事务、JTA(Java Transaction API)事务、容器事务。从事务管理的角度,可以把Java中用到的事务分为本地事务和全局事务。

 

 

本地事务不用事务的编程框架来管理事务,直接使用资源管理器来控制事务。典型的就是java.sql.Connection中的setAutoCommit、commit、rollback方法。

 


全局事务是由资源管理器管理和协调的事务,它可以跨越多个数据库和进程,是一个标准的分布式事务。全局事务是一个DTP模型的事务,所谓DTP模型指的是X/Open DTP(X/Open Distributed Transaction Processing Reference Model),是X/Open这个组织定义的一套分布式事务的标准,也就是了定义了规范和API接口,由各个厂商进行具体的实现。

 

 

X/Open DTP 定义了三个组件:AP、RM、TM,两个协议:XA、TX

AP(Application Program):也就是应用程序,可以理解为使用DTP的程序

RM(Resource Manager):资源管理器,这里可以理解为一个DBMS系统,或者消息服务器管理系统,应用程序通过资源管理器对资源进行控制。

TM(Transaction Manager):事务管理器,负责协调和管理事务,提供给AP应用程序编程接口以及管理资源管理器。

XA协议:应用或应用服务器与事务管理之前通信的接口

TX协议:全局事务管理器与资源管理器之间通信的接口

 

事务管理器(TM)控制着全局事务,管理事务生命周期,并协调资源。资源管理器负责控制和管理实际资源。

这里还要提到一个点,就是2PC(两阶段提交),在全局事务中,为了保证所有的操作可以一次性要么全提交,要么全失败。事务管理器和资源管理器之间的事务操作的控制是采用2PC来进行的。2PC本身是存在同步阻塞问题,这就会导致效率变低,所以,采用2PC进行事务控制的全局事务也必然存在效率低的问题。这也是全局事务最致命的缺点,在提倡微服务的今天,这是不能容忍的。

 

J2EE中全局事务的实现

Java自身提供了一些API可以用来实现全局事务,JTA事务就是用来实现J2EE中的全局事务。

 

 

JTA

JTA(Java Transaction API):面向应用、应用服务器与资源管理器的高层事务接口。

JTS(Java Transaction Service):JTA事务管理器的实现标 准,向上支持JTA,向下通过CORBA OTS实现跨事务域的互操作性。

 

EJB:基于组件的应用编程模型,通过声明式事务管理进一步 简化事务应用的编程。

 

全局事务的优缺点

优:全局事务,作为一种标准的分布式事务解决方案,他解决了本地事务无法满足分布式场景中数据的ACID的要求。

缺:2PC,同步阻塞,同时占用多个资源导致效率低。

 

总结

本文主要介绍了本地事务和全局事务,本地事务很简单,在Java中可以使用JDBC来实现本地事务,全局事务是一种基本的分布式事务解决方案,是符合DTP模型的事务管理机制。

 

目前,越来越多的web开发要涉及到分布式事务,尤其是微服务架构最近越来越火,在微服务架构中,分布式事务是必然存在的。对于分布式事务的处理,本文主要介绍了一个典型的方案:全局事务。但是实际上,低效率的全局事务并不是很适合用来解决大型网站的分布式事务问题。在业内,主要用来解决分布式事务的方案是使用柔性事务。柔性事务包括几种类型:两阶段型、补偿型、异步确保型和最大努力通知型。

 

(番外篇)事务涉及的对象:

1,资源:应用程序存储和获取数据的地方,可以是数据库,文件,也可以是内存。如果是应用程序的事务块代码中涉及到的数据库,文件,内存,那这些资源就称为事务型资源。

2,资源管理器:在事务模型中,应用不是直接访问资源,而是通过中间介访问资源,这个中间介就叫资源管理器。资源分为可持久化资源(对应了持久化资源管理),易失资源(对应了易失资源管理器)。

3,事务管理器:实现事务的开始,提交,回滚。

  • 大小: 201.3 KB
  • 大小: 97.1 KB
  • 大小: 104.7 KB
分享到:
评论

相关推荐

    JAVA事务配置总结

    在本地事务和全局事务中,动态数据源都能提供灵活的数据访问策略。 结合以上元素,我们有以下三种组合: 1. “本地事务+动态数据源+单sessionFactory”:适用于需要在多个数据源间切换但无需跨库操作的场景。通过...

    阿里云 专有云企业版 V3.6.1 全局事务服务GTS 产品简介 - 20181105.pdf

    GTS采用了两阶段提交(2PC)和补偿事务(TCC)等分布式事务处理模式,结合本地事务和全局事务日志,实现事务的协调和回滚。同时,GTS还引入了事务超时、幂等性等机制来增强系统的稳定性和安全性。 5. **操作指南与...

    Ofbiz框架中的事务解析.pdf

    Java的事务分为本地事务和全局事务。本地事务是通过设置JDBC连接的`setAutoCommit(false)`来手动开启的,所有在这个连接上的操作都将被包含在一个事务中,以确保ACID(原子性、一致性、隔离性和持久性)属性。全局...

    Java分布式相关面试题汇总

    下面我们将详细介绍分布式事务的概念、ACID特性、本地事务、全局事务、TX协议、XA协议、两阶段提交协议、BASE理论和CAP定理等关键概念。 一、事务的概念 事务是由一组操作构成的可靠的单元,事务具备ACID的特性,...

    my-seata.rar

    Seata 提供了 Java 客户端,名为 `seata-client`,它与 Seata Server 通信,管理本地事务和全局事务。客户端通过 Data Access Object(DAO)层的 AOP(面向切面编程)代理,自动参与到全局事务中。 4. 数据源配置 ...

    sw.zip_BizTalk_orchestration

    BizTalk Orchestration支持两种类型的事务:本地事务和全局事务(也称为分布式事务)。本地事务局限于单个服务或操作,而全局事务跨越多个服务和操作,通常涉及不同系统间的交互。BizTalk Server支持WS-...

    关于WebLogic JDBC的基本配置知识以及常见问题的解

    - **事务处理**:WebLogic支持JTA(Java Transaction API),可以管理本地事务和全局事务。全局事务(Global Transaction)通过XA接口协调跨多个资源管理器的事务,如跨不同数据库的事务。 5. **分布式事务**...

    JTS资料大全

    2. **事务管理**:包括本地事务和全局事务的概念,以及如何通过JTS来协调这些事务。 3. **JTS与JTA的关系**:JTA是定义事务接口的标准,而JTS是其具体实现,两者结合使用能实现分布式事务。 4. **OTI规范**:解释了...

    WTC开发指南(CHM版)

    2. **事务管理**:理解WTC提供的事务模型,如本地事务和全局事务,以及如何通过编程或配置来控制事务行为。 3. **资源管理**:配置和使用不同的资源管理器,如数据库连接池,以及如何进行事务恢复。 4. **编程接口**...

    jotm 2.1.4 source dist

    - 提供本地事务和全局事务管理,能够协调不同资源管理器(如数据库、JMS队列等)的事务。 - 支持XA事务,能够处理跨多个资源的复杂事务操作。 - 提供事务恢复机制,确保事务的原子性和持久性。 - 高度可配置,可以...

    geronimo-jta_1.1_spec-1.1.1.jar

    JTA提供了一种统一的方式来处理不同类型的事务管理,包括本地事务和全局事务,使得开发者可以编写无感知于具体事务系统的代码,增强了代码的可移植性和可维护性。 `geronimo-jta_1.1_spec-1.1.1.jar`包含了JTA 1.1...

    JPA实体bean配置,jpa增删改api,jpasql增删改.pdf

    本地事务适用于单个数据库的操作,而全局事务(如JTA)则适用于跨多个数据库的复杂操作,如银行转账。事务控制可以通过编程式(手动开启和提交)或声明式(使用`@Transactional`注解)来实现。 对于复杂数据类型,...

    基于J2EE在分布式环境下的底层结构(外文翻译+文献综述).zip

    5. **事务管理**:J2EE提供了强大的事务管理能力,包括本地事务和全局事务。JTA(Java Transaction API)允许在分布式环境中进行跨资源的事务协调,确保数据一致性。 6. **网络通信**:JMS(Java Message Service)...

    iBATIS开发指南.rar

    6. **事务管理**:学习如何在iBATIS中配置和控制事务,包括本地事务和全局事务,以及事务的隔离级别和回滚规则。 7. **缓存机制**:iBATIS提供了缓存功能,以提高数据访问性能。了解如何配置和使用缓存,包括本地...

    Spring 65道面试题和答案.docx

    6. **事务管理模块**:Spring的事务管理功能可以管理从简单到复杂的事务,包括本地事务和全局事务(JTA)。 7. **Web模块**:包括Web-Servlet和Web-Struts等,提供了一种基于Servlet的Web应用上下文,以及对Struts...

    Spring 70道面试题和答案.docx

    6. Transaction module:提供了一致的事务管理接口,支持本地事务和全局事务(JTA)。 7. Web module,Web-Servlet module,Web-Struts module和Web-Portlet module:这些模块用于构建Web应用,如Web-Servlet模块...

    Spring面试71题(带答案).pdf

    9. **Transaction模块**:Spring提供了事务管理服务,可以处理从简单到复杂的事务需求,支持本地事务和全局事务(JTA)。 10. **Web模块**:包括Web-Servlet和Web-Struts等子模块,提供了适应Web应用的上下文,支持...

Global site tag (gtag.js) - Google Analytics