`
usenrong
  • 浏览: 515059 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

深入Java事务的原理与应用

    博客分类:
  • J2EE
阅读更多

  一、什么是JAVA事务

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

  事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。

  通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。
  既然事务的概念从数据库而来,那Java事务是什么?之间有什么联系?

  实际上,一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务

  二、为什么需要Java事务

  事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。举一个简单例子:比如银行转帐业务,账户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 界定事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection s 是参与 JTA 事务的 JDBC 连接。

  您将需要用应用服务器的管理工具设置 XADataSource .从应用服务器和 JDBC 驱动程序的文档中可以了解到相关的指导。

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

分享到:
评论
2 楼 usenrong 2011-04-02  
JTA
Java事务API(JTA;Java Transaction API)和它的同胞Java事务服务(JTS;Java Transaction Service),为J2EE平台提供了分布式事务服务。一个分布式事务(distributed transaction)包括一个事务管理器(transaction manager)和一个或多个资源管理器(resource manager)。一个资源管理器(resource manager)是任意类型的持久化数据存储。事务管理器(transaction manager)承担着所有事务参与单元者的相互通讯的责任。下图显示了事务管理器和资源管理的间的关系。


JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中:
JDBC连接


    

JDO PersistenceManager 对象    

JMS 队列    

JMS 主题    

企业JavaBeans(EJB)    

一个用J2EE Connector Architecture 规范编译的资源分配器。



DAO
DAO是Data Access Object数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。对数据库进行CURD(增删查改操作)。
在核心模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。


英文全称是:Java Naming and Directory Interface
JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。集群JNDI实现了高可靠性JNDI[8],通过服务器的集群,保证了JNDI的负载平衡和错误恢复。在全局共享的方式下,集群中的一个应用服务器保证本地JNDI树的独立性,并拥有全局的JNDI树。每个应用服务器在把部署的服务对象绑定到自己本地的JNDI树的同时,还绑定到一个共享的全局JNDI树,实现全局JNDI和自身JNDI的联系。
  简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。
JDBC
有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。






JNDI


术语解释:一组帮助做多个命名和目录服务接口的API。
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时,JDBC也是个商标名。
JDO(Java Data Object )是一个JAVA用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运行。JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。
JDOJNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种
1 楼 usenrong 2011-04-02  
XA 连接与非 XA 连接不同。一定要记住 XA 连接参与了 JTA 事务。这意味着 XA 连接不支持 JDBC 的自动提交功能。同时,应用程序一定不要对 XA 连接调用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() .

  相反,应用程序应该使用 UserTransaction.begin()、 UserTransaction.commit() 和 serTransaction.rollback() .

  3、容器事务

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

  四、三种Java事务差异

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

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

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

  五、总结

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

相关推荐

    深入理解Java事务的原理与应用

    一、什么是JAVA事务 通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。事务的...

    java事务处理总结

    #### 三、Java事务的实现原理 Java事务的实现主要依赖于底层数据库的支持。不同的数据库管理系统(DBMS)对事务的支持程度不同,但大多数现代关系型数据库都支持ACID事务。 - **原子性**:由数据库引擎实现,确保...

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

    本文将深入探讨事务的原理和实现方法。 1. **什么是事务** 事务是一系列数据库操作的逻辑单元,这些操作要么全部成功执行,要么全部不执行。在事务中,每个操作都是原子性的,即不可分割,要么全部完成,要么全部...

    tomcat,spring 源码分析及深入java虚拟机

    《深入JAVA虚拟机第二版》这本书通常会详细讲解JVM的工作原理,如栈帧结构、对象生命周期、JIT编译以及内存区域划分。熟悉这些内容能帮助我们编写出更高效、更稳定的代码,并有效地诊断和解决问题。 综合这三个主题...

    电子书-深入浅出Mybatis技术原理与实战

    这本书主要面向Java开发者,特别是对Mybatis有一定基础但渴望深入了解其工作原理和实际应用的人群。 在3.4版本中,Mybatis已经相当成熟,提供了一系列优化和改进。书中会涵盖以下几个核心知识点: 1. **Mybatis...

    Java深入微服务原理改造房产销售平台

    根据提供的文件信息,我们可以推断出本课程主要围绕“Java深入微服务原理改造房产销售平台”这一主题展开,旨在通过视频教程、代码示例及配套资料帮助学习者掌握利用Java技术进行微服务架构设计与应用的具体方法。...

    数据库原理与应用及java文档

    总的来说,"数据库原理与应用及Java文档"涵盖的内容广泛,从基础的数据库理论到实际的Java编程技术,再到数据库的高级主题,这些都是开发人员必须掌握的关键技能。通过深入学习和实践,我们可以构建出高效、可靠的...

    java offer来了原理篇.pdf

    第七部分涵盖了数据库及分布式事务原理,包括数据库存储引擎、并发操作和锁、分布式事务等内容。数据库是现代软件系统的基石,了解其内部原理和分布式事务处理是成长为高级Java开发者不可或缺的一部分。 第八部分...

    Spring技术内幕:深入解析Spring架构与设计原理.pdf

    Spring技术内幕:深入解析Spring架构与设计原理 Spring技术内幕 Spring是一个基于Java的开源框架,旨在简化Java企业应用的开发。Spring的目标是提供一个简洁、灵活、可扩展的框架,以帮助开发者快速构建企业级...

    Spring技术内幕:深入解析Spring架构与设计原理

    《Spring技术内幕:深入解析Spring架构与设计原理》是一本由计文柯编著的书籍,专注于揭示Spring框架的核心机制和设计理念。这本书是为那些希望深入理解Spring如何工作,以及为何如此高效和灵活的开发者而准备的。...

    嵌入式数据库原理与应用

    嵌入式数据库是一种轻量级、无需单独服务器进程的数据库系统,主要用于小型设备或应用程序中,如...通过阅读“嵌入式数据库原理与应用@www.java1234.com.pdf”这份资料,可以进一步深入了解相关知识并掌握实际应用。

    百度云下载--《深入分析Java Web技术内幕》修订版 许令波著 PDF扫描版[92M]

    本书主要针对Java Web开发人员和技术爱好者,旨在深入剖析Java Web技术的核心原理及应用技巧。接下来,我们将从几个关键方面对这本书可能涉及的重要知识点进行归纳总结。 ### Java Web技术概述 Java Web技术是一种...

    深入分析Java Web技术内幕 完整修订版本

    《深入分析Java Web技术内幕 完整修订版本》是一本专为Java Web开发人员精心编写的书籍,旨在全面解析Java Web技术的核心概念、原理及实际应用。书中通过淘宝实例,将理论与实践相结合,帮助读者深入理解并掌握相关...

    深入浅出MyBatis技术原理与实战

    《深入浅出MyBatis技术原理与实战》这本书旨在帮助读者全面理解MyBatis这一流行的Java持久层框架,深入解析其工作原理,并提供实战指导。MyBatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者将SQL语句与...

    spring技术内幕第2版深入解析spring架构与设计原理

    在深入解析Spring技术内幕第2版中,会详细探讨Spring框架的核心架构与设计原理,Spring作为一个轻量级的Java平台,提供了全面的编程和配置模型,是企业级Java应用程序开发中广泛使用的技术之一。 Spring的核心特性...

    分布式Java应用基础与实践源码.zip

    分布式Java应用基础与实践源码分析 在当前的互联网时代,分布式系统已经成为企业级应用的主流架构。Java作为广泛使用的编程语言,其在分布式领域的应用非常广泛。本篇将深入探讨分布式Java应用的基础知识和实践要点...

    深入浅出MyBatis技术原理与实战.pdf.7z

    《深入浅出MyBatis技术原理与实战》是一本针对Java开发者深度解析MyBatis框架的书籍,旨在帮助读者理解MyBatis的核心概念、工作原理,并通过实战演练提升其在实际项目中的应用能力。该书内容涵盖了MyBatis与Spring、...

    深入浅出MyBatis技术原理与实战(高清带书签)

    《深入浅出MyBatis技术原理与实战》是一本针对Java开发者深度解析MyBatis框架的专业书籍。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,旨在简化Java开发中的数据库操作。这本书通过理论...

Global site tag (gtag.js) - Google Analytics