Java中的事务总结(第一节)

事务分类

从开发角度看事务分为数据库事务Java事务

 

.二者联系

实际上,一个Java应用系统,如果要操作数据库,则通过JDBC来实现。增删改查都通过相应方法间接实现,事务控制也相应转移到Java程序代码中。

因此,数据库操作的事务习惯上就称为Java事务

 

Java事务分类

Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务

1. JDBC 事务是用 Connection 对象控制的。

2. JTA 事务的JDBC 连接是XAConnection

3. 容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。

 

四、三种事务差异

  1JDBC事务控制的局限性在一个数据库连接内,但是其使用简单。

  2JTA事务的功能强大,事务可以跨越多个数据库或多个DAO,使用也比较复杂。

3、容器事务,主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用使用。

 

 

--------------------------------------------这里我们着重看分布式事务------------------------------------

 

五、XA

XA是由X/Open组织提出的分布式事务规范

XA规范定义了事务管理器资源管理器之间的接口(如图1)

XA是一个双向接口(如图1) 

 

 

                                                                               1

XA模型组成

XA 模型由资源管理器资源适配器事务管理器组成。

 

那么什么是资源管理器、资源适配器呢?

首先,要明确资源就是数据

其次,如下

资源管理器à数据管理器如:数据库、JMS、文件系统

资源适配器(实现XA相关接口的驱动)à数据库驱动如:mysql.jar

事务管理器à J2EE容器所提供的JTA实现(JBOSS)、独立的JTA实现(如:JOTMAtomikos)

备注:要支持多数据源的事务,只能用JTA事务管理,而且应用服务器还不能是Tomcat

tomcat没有提供容器JTA实现,必须用独立的JTA实现来支持分布式事务。

 

 

XA模型之间关系

资源适配器允许事务管理器协调该资源管理器和其他资源管理器之间的分布式事务。

通俗点讲就是:可以配置资源适配器(jar) 以指明资源管理器(JMS或数据库) 提供者是否支持 XA

再通俗点就是:在资源适配器中添加对xa的支持就是添加数据源对xa的支持也就是说添加connnectionxa的支持。

 

XA出现的目的

XA是为了支持二阶段提交协议,但是它也支持一阶段提交协议。

本地事务只支持一阶段提交。

分布式事务默认采用的是二阶段提交,如果在分布式事务中非得使用一阶段提交协议,那么只要数据源多余一个就会抛出异常,如果只有一个数据源则正确执行。

 

XA的使用时机

当多个资源必须在同一个事务范畴内被协调时,才有必要用到XA

由于XA支持只读优化,当把一个只读数据源引入XA事务时,您可能并不会看到任何的性能损失。      

 

 

Spring中的分布式事务

spring不支持分布式事务,只能用JtaTransactionManager 提供对分布式事务管理的支持,并将事务管理委托给Java EE应用服务器事务管理器, Tomcat作为容器则它本身不支持JTA事物,所以需要用到第三方库(jotmatomikos)

     

猜你喜欢

转载自zf772835869.iteye.com/blog/2325439
今日推荐