事务是企业应用开发中的重要概念,对于部分 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 的事务,如果有必要的话,呵呵。
分享到:
相关推荐
8. **Java EE容器**:如Tomcat、Glassfish或WildFly等,它们提供了运行Java EE应用程序的环境,处理了线程管理、依赖注入等底层细节。 9. **整合应用**:将上述技术综合运用,实现模块化、可扩展的应用程序。例如,...
本文主要研究了Java EE应用中的数据库系统安装部署复杂的问题,介绍了内存数据库产品SQLite的技术特点,并着重研究了Java语言与SQLite之间的接口,实现了Hibernate组件通过JDBC访问SQLite数据库,以解决数据库安装...
这四个关键组件共同构建了现代Java EE应用程序的基础架构,下面将对这些技术逐一进行详细介绍。 JSF(JavaServer Faces)是Java平台上用于构建用户界面的标准框架,它简化了UI组件的创建和管理。JSF采用MVC(Model-...
JAVA EE应用通常被打包成WAR(Web Application Archive)或EAR(Enterprise Application Archive)文件进行部署。WAR包含Web组件,而EAR则可以包含整个企业级应用,包括EJB和Web组件。应用服务器如Tomcat、Glassfish...
《精通Java EE:精通Java EE 整合应用案例》是一本深入探讨Java企业级开发的专著,其第五章的源代码着重展示了如何在实际项目中整合和运用Java EE技术。这一章节的内容涵盖了多种Java EE核心组件的实战应用,旨在...
7. **JTA (Java Transaction API)**: 事务管理是Java EE应用中不可或缺的一部分。JTA用于管理分布式事务,确保数据的一致性和完整性。你需要知道ACID属性,并理解如何配置和使用JTA进行事务控制。 8. **JPA (Java ...
Java EE应用运行在Web容器或应用服务器中,如Tomcat、Jetty、GlassFish和WildFly。这些服务器提供运行环境,处理应用的部署、生命周期管理和资源管理。郑阿奇的教程将介绍如何配置和管理这些服务器。 八、安全与...
4. 应用服务器配置:指导开发者如何在不同的Java EE应用服务器上部署和配置Java EE 7应用程序。 5. 企业级服务开发:涉及消息服务、事务管理、安全性等高级主题,这是企业级应用开发中不可或缺的部分。 6. 最佳...
本教程将深入探讨这三个框架的核心原理,以及如何遵循良好的代码规范来实现高效、可维护的Java EE应用。 **Spring框架**是Java EE开发的核心,它提供了一个全面的编程和配置模型,用于简化企业级应用的复杂性。...
Java EE企业级应用开发教程(SSM)源码是一个涵盖了使用Java开发企业级应用程序的实践示例。SSM是Spring、Spring MVC和MyBatis这三大框架的简称,它们是Java EE开发中常用的技术栈。这个教程源码将帮助开发者深入...
Spring框架是Java EE开发中的核心组件,它提供了一个全面的基础设施,支持创建企业级Java应用程序。Spring的核心特性包括依赖注入(DI)和面向切面编程(AOP),使得代码更加模块化,易于测试和维护。Spring MVC是...
这本书的光盘文件包含了书中前三个章节的示例代码,这些代码是学习和理解Java EE应用程序开发的关键实践。 首先,我们来关注"Java EE"这一核心概念。Java EE(Java Platform, Enterprise Edition),也被称为Java ...
2. CDI:是Java EE中用于依赖注入和上下文管理的规范,它负责管理Java EE应用程序中的对象生命周期和依赖关系。 3. EJB:作为Java EE规范的核心组件,EJB允许开发者创建可重用的商业逻辑组件,能够简化事务管理、...
《精通Java EE:精通Java EE 整合应用案例\源代码第三章》是关于Java企业级应用开发的深度学习资源,主要聚焦于实际项目中的整合应用。本章内容可能涵盖多个Java EE技术的综合运用,如Servlet、JSP、EJB、JPA、JSF、...
现代Java EE应用中,主要关注无状态会话bean(Stateless Session Beans)和消息驱动bean(Message-driven Beans)。 4. **JPA(Java Persistence API)与Hibernate**:JPA是Java EE提供的ORM(对象关系映射)标准,...
此外,作者李刚在Java EE应用开发领域拥有超过10年的经验,其著作不仅覆盖了企业级Java应用开发的基础知识和进阶技能,还包括了作者在多年实际工作中积累的宝贵经验。李刚老师曾经担任过LITEON公司J2EE技术主管,...
Spring框架是Java EE开发中的核心组件,它是一个全面的后端应用程序框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等多种功能。Spring的IoC容器使得开发者能够轻松管理和配置对象,而AOP则允许我们编写...
通过这些内容的学习,读者可以掌握构建轻量级Java EE应用的基本技能,理解各组件间的协同工作原理,从而提升企业级应用开发能力。对于初学者而言,这是一条了解和实践现代Java EE开发的宝贵途径。
《轻量级Java EE企业应用实战(第4版)》这本书深入探讨了Struts 2、Spring 4和Hibernate这三大框架的整合开发,旨在帮助读者掌握如何在实际项目中高效构建Java EE应用。SSH(Struts 2、Spring、Hibernate)是Java ...