`

三种不同实现方式的事务

阅读更多

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

 

 

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

 

一、什么是Java事务

 

  通常的观念认为,事务仅与数据库相关。

 

    ISO是一个组织的英语简称。其全称是International Organization for Standardization,翻译成中文就是“国际化标准组织”。成立于1947年2月23日。ISO负责除电工、电子领域和军工、石油、船舶制造之外的很多重要领域的标准化活动。

    IEC是国际电工委员会标准(International Electro technical Commission)的简称,IEC负责有关电工、电子领域的国际标准化工作。

 

  事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。

 

二、为什么需要事务

 

  事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。举一个简单例子:比如银行转帐业务,账户A要将自己账户上的1000元转到B账户下面,A账户余额首先要减去1000元,然后B账户要增加1000元。假如在中间网络出现了问题,A账户减去1000元已经结束,B因为网络中断而操作失败,那么整个业务失败,必须做出控制,要求A账户转帐业务撤销。这才能保证业务的正确性,完成这个操走就需要事务,将A账户资金减少和B账户资金增加方到一个事务里面,要么全部执行成功,要么操作全部撤销,这样就保持了数据的安全性。

 

三、Java事务的类型

 

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

 

1、JDBC事务

 

  JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。 java.sql.Connection 提供了以下控制事务的方法:

 

  public void setAutoCommit(boolean)

 

  public boolean getAutoCommit()

 

  public void commit()

 

  public void rollback()

 

  使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。

 

2、JTA(Java Transaction API)事务

 

  JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。

 

JTA允许应用程序执行分布式事务处理,在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。

 

  如果计划用 JTA 界定事务,那么就需要有一个实现(XA相关接口) javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection 是参与 JTA 事务的 JDBC 连接。您将需要用应用服务器的管理工具设置 XADataSource 。从应用服务器和 JDBC 驱动程序的文档中可以了解到相关的指导。

 

  J2EE 应用程序用 JNDI 查询数据源。一旦应用程序找到了数据源对象,它就调用 javax.sql.DataSource.getConnection() 以获得到数据库的连接。

 

XA 连接与非 XA 连接不同。一定要记住 XA 连接参与了 JTA 事务。这意味着 XA 连接不支持 JDBC 的自动提交功能。同时,应用程序一定不要对 XA 连接调用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() 。相反,应用程序应该使用 UserTransaction.begin()、 UserTransaction.commit() 和 UserTransaction.rollback() 。

 

3、容器事务

 

  容器事务主要是J2EE应用服务器(比如Weblogic、JBOSS、WebSphere)提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。相对编码实现JTA事务管理,我们可以通过EJB容器提供的容器事务管理机制(CMT)完成同一个功能,这项功能由J2EE应用服务器提供。这使得我们可以简单的指定将哪个方法加入事务,一旦指定,容器将负责事务管理任务。这是我们普遍的解决方式,因为通过这种方式我们可以将事务代码排除在逻辑编码之外,同时将所有困难交给J2EE容器去解决。使用EJB CMT的另外一个好处就是程序员无需关心JTA API的编码,不过,理论上我们必须使用EJB。

 

四、三种事务差异

 

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

 

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

 

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

 

五、总结

 

  事务控制是构建J2EE应用不可缺少的一部分,合理选择应用何种事务对整个应用系统来说至关重要。一般说来,在单个JDBC连接的情况下可以选择JDBC事务,在跨多个连接或者数据库情况下,需要选择使用JTA事务,如果用到了EJB,则可以考虑使用EJB容器事务。

  • 大小: 22.3 KB
分享到:
评论

相关推荐

    【分布式事务----LCN】LCN原理及使用方式.docx

    LCN模式是通过代理Connection的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作,该代理的连接将由LCN连接池管理。 该模式的特点: - 该模式对代码...

    XXXX大学智慧校园智慧服务业务构建数据管理中心规划方案783页.doc

    围绕校园用户的信息需求、办事需求、成长需求、决策需求和交流需求,将散落在校园网、互联网、物联网不同应用中的信息资源进行聚合与重组,形成个人事务全覆盖、展现内容可定制、交互方式一体化的智慧型服务中心。...

    TCP-IP详解卷(一协议,二实现,三事务合集

    TCP/IP协议圣经级著作,主要讲述TCP/IP协议,结合大量实例讲述TCP/IP协议族的定义原因,以及在各种不同的操作系统中的应用及工作方式。第2版在保留Stevens卓越的知识体系和写作风格的基础上,新加入的作者KevinR.Fall...

    TCP-IP详解三卷合一高清版

    与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量实例讲述了TCP/IP协议包的定义原因及在各种不同的操作系统中(如Sunos4.1.3、Soloris2.2、AIX3.2.2)的应用与工作方式,这样可以以...

    TCP-IP详解(三卷齐)

    与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量实例讲述了TCP/IP协议包的定义原因及在各种不同的操作系统中(如Sunos4.1.3、Soloris2.2、AIX3.2.2)的应用与工作方式,这样可以以...

    TCP/IP详解(三卷)

    与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量实例讲述了TCP/IP协议包的定义原因及在各种不同的操作系统中(如Sunos4.1.3、Soloris2.2、AIX3.2.2)的应用与工作方式,这样可以以...

    Bucode Enterprise Solution(BES) Beta1.0

    利用Bucode Server你可以快速架设自己的应用服务器, 根据宿主的不同,分为三种: 简易的控制台方式。 Windows服务方式, 该方式使得应用程序服务可以像SqlServer一样做为系统后台服务运行。 IIS方式,通过你的...

    SQL Server 2008数据库设计与实现

     5.2.5 决定域的实现方式  5.2.6 设置模式  5.2.7 评审“最终的”实现模型  5.3 实现设计  5.3.1 创建基本表结构  5.3.2 添加唯一性约束  5.3.3 构建默认约束  5.3.4 添加关系(外键)  5.3.5 ...

    BI智能分析方案.docx

    在这种结构下,用户工作界面是通过浏览器访问来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。以目前的技术看,局域网建立B/S结构的网络应用,...

    NC5系列Portal单点登录及系统集成红皮书

    NC-Portal的单点登录方案,就是SSO技术的一种实现方式。 NC-Portal的SSO方案是基于凭证的思想设计。对于NC-Portal集成的每个第三方系统都有一个制作凭证的页面,该页面用于当前登录的portal用户输入对应的第三方...

    二十三种设计模式【PDF版】

    可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于 和...

    java面试宝典

    75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private ...

    MySQL数据库三种常用存储引擎特性对比

    MySQL 的存储引擎可能是所有关系型数据库产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系。 由于各存储引擎功能特性差异较大,这篇文章主要是...

    网上数字签名系统的实现

    一种完善的签名应满足以下三个条件:签名者事后不能抵赖自己的签名;任何其他人不能伪造签名;如果当事人双方关于签名的真伪发生争执,能够在公正的仲裁者面前通过验证来确认其真伪。 在传统的书面文件为基础的事务...

    spring源码详解

    一、什么是AOP 二、AOP相关概念 (1)切面 (Aspect) 交叉业务,也就是通用的...三、AOP实现方式 依据织入方式的不同,分为 1、编译期织入 2、类加载器织入 3、动态代理织入 AspectJ:1,2 Spring AOP:3

    本科毕业设计开题报告(成绩管理系统的设计与实现V3)

    同时,因特网的出现和发展,使信息交流进入到一个崭新的历史时期,它打破了时空的障碍,使生活在不同国度的人们可共享网络信息资源,进而极大地促进全球经济的发展。 随着学生人数的增加,对于学生的信息管理也...

    TCP-IP详解

    与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量实例讲述了TCP/IP协议包的定义原因及在各种不同的操作系统中(如Sunos4.1.3、Soloris2.2、AIX3.2.2)的应用与工作方式,这样可以以...

    本科毕业设计开题报告(计算机协会信息管理系统的设计与实现V5)

    本课题会开发一个计算机协会社团信息管理系统,从而实现计算机协会社团信息管理系统内部各种繁琐事务的管理。追求低碳生活,摆脱以前纸质化的办公模式,节约人力物力从而达到提高办事效率的目的。随着计算机技术的...

    动软.Net代码生成器

    •可以生成3种不同类型数据层: 基于SQL字符串方式,基于Parameter方式和基于存储过程方式的数据层 数据库服务器管理 类似SQLServer2005的管理界面,方便平常在代码编辑的时候想查看数据库的信息,并且可以很...

Global site tag (gtag.js) - Google Analytics