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

j2ee中的事务浅谈(转)

    博客分类:
  • j2SE
阅读更多

事务是企业应用开发中的重要概念,对于部分 Web 应用,事务也是非常重要的(试想一下,如果没有事务,ATM 和网银的操作将会使多么的危险)。下面我就对 Java EE 应用中各种事务技术做一个简介。

数据库: 
       无论 Java EE 中采用了何种的事务技术,归根结底都是基于数据库的事务。不论是本地事务,还是分布式事务,都必须有数据库的支持才行。各种 Java EE 事务技术也都调用了数据库的事务功能。提到事务,必然要提到事务的四个基本特性:原子性、一致性、隔离性和持久性。Java EE 应用中的各种事务技术直接的或间接的都要保证这四个特性的实现。作为最底层的技术,数据库系统毫无疑问要保证这四个特性被完整的实现。

       数据库提供的事务功能是 Java EE 应用中事务的根本。数据库系统一般采用重执行日志保证事务的原子性、一致性和持久性。重执行日志记录了数据库变化的每一个动作,数据库系统会根据重执行日 志,在发生错误的时候撤销已执行的操作;或者在数据库重启时,将尚未持久化的数据重新执行操作。

      对于事务的隔离性,数据库系统采用锁机制来实现,这和 Java 采用的对象锁机制实现线程同步类似,只有持有锁的事务才能操作数据。数据库系统为用户提供了手工操作锁机制的功能,用户在执行 DML 操作和 SELECT FOR UPDATE 时都会获得行锁定,用户也可以进行表锁定。但是手工的操作锁必然是很麻烦的,也容易出现错误,所以数据库系统也提供了自动锁机制,这就引出了数据库的事务 隔离级别。只要用户指定会话的事务隔离级别,数据库就会自动的为事务操作加上适当的锁,并维护这些锁。SQL 92 标准定义了4个等级的事务隔离级别,不同的隔离级别对各种事务并发问题的解决能力是不同的。

JDBC: 
      JDBC 是大家最为熟悉的技术之一,它是通过数据库系统来实现事务的,所以这里对它的介绍不多。只要调用相应的 API 就可以了,只要了解数据库系统的事务,理解 JDBC 的事务就非常容易了。使用 JDBC 需要数据库的支持,主流的数据库系统都支持单机的事务(相对分布式事务)。当然像一些内存数据库、文件数据库就不好说了。需要说明的是,JDBC 的事务只能在一个 Connection 内实现。

JTS 和 JTA: 
      JTS 规定了 App Server 如何为应用程序提供容器级的事务支持。JTA 规定了 App Server 可以向用户提供哪些 API 用于控制事务。

      JTS/JTA 事务与 JDBC 的事务之间对大的不同是前者可以提供跨越多个数据库连接,而后者只能在单个数据库连接中实现事务。所以 JTS/JTA 事务对于企业级应用来说是非常重要的,也导致了大部分开发者对其不是很了解。

Hibernate: 
      Hibernate 是最常用和最流行的 ORM 框架。Hibernate 也提供了基于 JDBC 和 JTA 的事务功能,这也是将 JTS/JTA 事务放在 Hibernate 前面的原因。
     
      因为 Hibernate 的事务是基于 JDBC 和 JTA 的,也可以使用容器管理事务,所以很多特性和 JDBC 和 JTA 等并无二异。需要特别提到的是 Hibernate 悲观锁和乐观锁这两个概念。Hibernate 的悲观锁利用的是数据库的行锁机制。使用悲观锁不仅可以保证本应用内的并发事务行,也可以保证使用相同数据库的其它应用不会访问或修改不应该的数据。但 是,悲观锁会影响到应用的并发访问性能。所以,在不是必须使用悲观锁的情况下可以使用乐观锁机制。乐观锁最常见的实现方式是使用 Version 字段,这也是 Hibernate 所推荐的方式。乐观锁可以保证事务和并发性能的兼得,但缺点是事务仅限于同一应用。关于悲观锁和乐观锁的详情很容易在书籍和网络上找到,这里我就不再拗 述。

Spring: 

      Spring 在其它技术的基础上,为开发人员提供了一组统一的易于适用的 API。除了通过编程的方式实现事务外,在 Spring 环境中,也可以使用 XML 或 Annotation 来实现声明式事务。

      PlatformTransactionManager 在 Spring 的事务体系中是非常重要的一部分,它是一个抽象接口。HibernateTransactionManager、 JtaTransactionManager 等都实现了这个接口。这些 TransactionManager 的名字都很好理解,我也不多说了。

      Spring 事务最吸引人的特性是声明式事务。Spring 通过 AOP 技术提供了对声明式事务的支持。随着 Spring 版本的更迭,现在使用 Spring 的事务支持已经变得非常容易了。

     除此以外,Spring 还为 JMS 提供了本地事务功能,不过 JMS 的事务和数据库的事务有一定区别,我了解的也不是很多,所以在这里就不再介绍了。 

     这篇文章简单总结了一下 Java EE 应用中不同技术所提供的事务支持,写的很粗,欢迎大家补充。打算以后再简要介绍一下 Seam 的事务,如果有必要的话,呵呵。 

分享到:
评论

相关推荐

    J2EE SSH事务配置

    J2EE SSH事务配置 J2EE SSH事务配置 J2EE SSH事务配置 J2EE SSH事务配置

    J2EE事务机制

    J2EE事务机制,深入了解j2ee的事务容器、事务管理等概念与技术

    基于J2EE分布式事务的应用技术研究

    廉价的计算能力和不断增加的网络带宽促进了以组件为基础的分布式计算程序的发展。以组件为基础的分布式程序是一个服务架构。它由物理上独立的计算机上的不同的应用组件构成。对用户来说,它们就像是运行在一台机器上...

    j2ee中文帮助文档

    j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档

    J2EE指南(J2EE中文教材)

    它包括了组成J2EE平台的技术以及描述如何开发J2EE组件并部署在J2EE软件开发包上。 这篇指南不是为J2EE服务器及工具供应商准备的,它没有解释如何实现J2EE结构,也没有解释J2EE软件包。J2EE规范描述了J2EE结构并可以...

    浅谈J2EE在企业中的应用

    在今天这样一个电子商务和信息技术飞速发展的社会里, 企业必须缩短销售周期、降低销售成本、抢占更多 市场份额、寻求新的市场机会...J2EE平台技术为企业应用的设计、开发、集成以及部署提供了一条基于组件的实现途径。

    j2ee6 中文规范

    j2ee6中文规范j2ee6中文规范j2ee6中文规范j2ee6中文规范

    J2EE 指南 J2EE中文教材

    J2EE 指南对于广大的Java 程序员来说是一份不可或缺的资料了。这篇导论对于初次碰到J2EE 的程序员来说有着同样的作用。它与Java 指南一样都是一例子为中心。

    浅谈基于Struts和Hibernate的J2EE应用

    浅谈基于Struts和Hibernate的J2EE应用

    J2EE项目开发经验谈

    本文介绍了在J2EE项目开发中遇到的war包中的文件的读取问题,Ant使用中的OutOfMemoryError解决方法。

    j2ee j2ee j2ee j2ee j2ee j2ee

    j2ee j2ee j2ee j2ee j2ee j2ee j2ee j2ee j2ee

    最新j2ee中文API完整版

    最新的中文J2EE中文API 最新的中文J2EE中文API 最新的中文J2EE中文API 最新的中文J2EE中文API 最新的中文J2EE中文API

    J2EE中文问题终极解决之道

    J2EE中文乱码问题终极解决之道 如果看了这个文件之后你还解决不了乱码问题 那就不是我的问题了

    J2EE 5 中文API

    J2EE 5 中文API

    J2ee中的数据存取

    J2ee中的数据存取,一些基础的东西,不过很重要

    J2EE课件J2EE课件J2EE课件J2EE课件

    J2EE课件 J2EE课件 J2EE课件 J2EE课件 J2EE课件 J2EE课件 J2EE课件 J2EE课件 J2EE课件 J2EE课件 J2EE课件 J2EE课件 J2EE课件 J2EE课件 J2EE课件

    j2ee 笔记 j2ee 笔记 j2ee 笔记

    j2ee 笔记 j2ee 笔记 j2ee 笔记 j2ee 笔记

    J2EE中MVC三层架构

    J2EE中MVC三层架构的实现 1、课堂实践内容: JSP+持久层结构存在的问题 解决方法 J2EE的MVC架构(持久层+Jsp+Servlet) 图书列表功能MVC实现 图书修改功能MVC实现

Global site tag (gtag.js) - Google Analytics