`

JDBC事务和JTA事务

阅读更多

一般情况下,J2EE应用服务器支持JDBC事务、JTA事务、容器管理事务。这里讨论JTA和JDBC事务的区别。这2个是常用的DAO模式事务界定方式。
JDBC 事务
 JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。
★ 在jdbc中,事务操作缺省是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回滚。
★ 在jdbc中,可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常;此时就可以在异常捕获时调用rollback()进行回滚。这样做可以保持多次更新操作后,相关数据的一致性。

JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。
JTA事务
JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。
要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。

让我们来关注下面的话:
 “用 JTA 界定事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection s 是参与 JTA 事务的 JDBC 连接。”
要使用JTA事务,必须使用XADataSource来产生数据库连接,产生的连接为一个XA连接。

XA连接(javax.sql.XAConnection)和非XA(java.sql.Connection)连接的区别在于:XA可以参与JTA的事务,而且不支持自动提交。

Note:
Oracle, Sybase, DB2, SQL Server等大型数据库才支持XA, 支持分布事务。
My SQL 连本地都支持不好,更别说分布事务了。
JTA方式的实现过程:
   用XADataSource产生的XAConnection它扩展了一个getXAResource()方法,事务通过这个方法把它加入到事务容器中进行管理.对于调用者来说,根本看不到事务是如果管理的,你只要声明开始事务,告诉容器我下面的操作要求事务参与了,最后告诉事务说到这儿可以提交或回滚了,别的都是黑箱操作。
 在使用JTA之前,你必须首先实现一个Xid类用来标识事务(在普通情况下这将由事务管理程序来处理)。Xid包含三个元素:formatID、gtrid(全局事务标识符)和bqual(分支修饰词标识符)。

选择最好的方式
用 JDBC API 进事务界定来构建 DAO 类的。这些 DAO 类可以总结如下:

事务界定代码嵌入在 DAO 类中。
DAO 类使用 JDBC API 进行事务界定。
调用者不能界定事务。
事务范围局限于单个 JDBC 连接。
JDBC 事务并不总是适合复杂的企业应用程序。如果您的事务要跨越多个 DAO 或者多个数据库,那么下列实现策略也许更合适:

事务用 JTA 界定。
事务界定代码从 DAO 中分离出来。
调用者负责界定事务。
DAO 加入一个全局事务。
JDBC 方式由于其简单性而具有吸引力,JTA 方式提供了更大的灵活性。您所选择的实现将取决于应用程序的特定需求。


分享到:
评论

相关推荐

    JDBC事务和JTA(XA)事务

    JDBC事务和JTA(XA)事务 JDBC事务和JTA(XA)事务是两种常见的数据库事务类型,它们都可以用来管理数据库事务,确保数据库的一致性和可靠性。 JDBC事务 JDBC事务是Java Database Connectivity(JDBC)的事务机制,它...

    Java中JDBC事务与JTA分布式事务总结与区别

    Java中的事务管理是确保数据一致性的重要机制,主要分为三种类型:JDBC事务、JTA(Java Transaction API)...在实际开发中,开发者可以根据项目的规模、技术栈以及对事务管理的要求,来决定使用JDBC事务还是JTA事务。

    JDBC事务 JTA事务 传播特性 隔离级别

    **JDBC事务**主要针对单个数据库连接,由数据库管理系统(DBMS)自身管理事务。JDBC提供了`Connection`对象的`commit()`和`rollback()`方法用于提交和回滚事务。这是简单的单阶段提交,适用于单一数据源的情况。 **...

    JDBC-JTA.rar_jdbc_jta_jta JDBC

    对应的`.class`文件(如`myJDBCUpdateServlet`、`myJTAServlet`、`myJDBCReadServlet`)是这些Servlet的编译后版本,它们可能包含了具体的JDBC数据库操作和JTA事务管理的代码。`www.pudn.com.txt`可能是一个文档,...

    sqlserver与java连接接操作

    SQL Server 与 Java 连接操作 SQL Server 是一个 ...JDBC 事务和 JTA 事务都是实现 Java 应用程序与数据库之间的事务处理的重要机制。通过了解这两种事务机制,可以更好地实现 Java 应用程序的可靠性和可扩展性。

    JDBC事务处理机制探秘

    总结起来,JDBC事务适用于简单的单库操作,而JTA事务则适合处理跨多个数据源的复杂事务场景。在J2EE环境中,容器管理的事务(如SessionBean中的JTA事务)能够提供更高的可伸缩性和可靠性。在实际应用中,根据需求...

    springboot整合JTA组件,多数据源事务管理

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

    使用JTA实现跨库事务

    在提供的"SimpleDemo"示例中,可能包含了一个简单的JTA事务管理的例子,比如如何在Java代码中启动和结束一个事务,以及如何在事务中操作数据库。具体实现细节可能包括使用JPA、JDBC或其他持久化框架与JTA集成的方法...

    spring hibernate整合

    2. 便捷的事务管理:Spring的PlatformTransactionManager接口提供了统一的事务管理,可以轻松地在不同数据源之间切换,支持Hibernate的JDBC事务和JTA事务。 3. AOP集成:Spring的AOP模块可以无缝地与Hibernate结合,...

    JTA事务源码示例

    Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...

    DB事务详解

    事务的实现可以通过多种方式实现,如JDBC事务、JTA事务、IBATIS事务支持等。 4.1、JDBC事务 JDBC事务是Java数据库连接(JDBC)提供的一种事务机制。JDBC事务可以通过 Connection 对象的 setAutoCommit() 方法来...

    spring + JTA + JOTM实现分布式事务

    对于分布式事务,Spring支持JTA事务管理,并且可以无缝集成JOTM。 1. **配置JOTM**:首先,你需要在项目的类路径下添加JOTM的依赖库。然后,在Spring的配置文件中定义JOTM的事务管理器 bean,例如: ```xml ...

    Hibernate事务和并发控制

    事务和并发控制是数据库管理中的核心概念,特别是在使用ORM框架如Hibernate时,理解它们的工作原理至关重要。本文将深入探讨Hibernate中的事务管理和并发控制。 首先,事务是数据库操作的基本单位,它保证了数据的...

    Java事务处理总结[归类].pdf

    Java事务主要分为三种类型:JDBC事务、JTA(Java Transaction API)事务和容器事务。 1. JDBC事务是基于数据库连接(Connection对象)进行控制的。默认情况下,JDBC连接处于自动提交模式,每个SQL语句都默认作为一...

    Spring+iBatis+JOTM实现JTA事务

    通过这样的配置和测试,我们可以验证Spring+iBatis+JOTM的JTA事务管理功能是否正常工作。这种方式特别适用于需要在非J2EE容器中实现分布式事务的场景,为应用提供了强大的事务管理能力。然而,需要注意的是,JTA事务...

    java事务管理和事务分类

    对于JDBC和JTA事务,开发者需要显式地调用`commit()`或`rollback()`来控制事务的结束。而在容器事务中,事务的控制权交给了容器,开发者只需在业务逻辑代码中编写无事务感知的代码,容器会在适当的时候处理事务的...

    Java事务处理总结

    根据应用场景的不同,可以选择使用JDBC事务、JTA事务或容器事务等不同的事务处理方式。每种方式都有其特定的应用场景和优势,开发者应根据具体需求选择最合适的事务处理机制。通过合理利用这些事务管理技术,可以...

    在Spring中使用JTA事务管理

    本文将详细介绍如何在Spring中使用JTA事务管理,包括通过集成JOTM(Java Open Transaction Manager)以及引用Tomcat的JTA事务。 ### 1. 通过集成JOTM,直接在Spring中使用JTA事务 #### 1.1. 添加JOTM类库到类路径...

    跨数据库的事务管理配置jta

    在提供的XML配置示例中,我们可以看到Spring框架是如何配置两个不同的数据源,并为它们设置JTA事务管理器的。 ##### 数据源配置 首先,我们来看数据源的配置部分: ```xml ...

    Jta的jar包

    **标题与描述解析** ...总结,JTA和JBarcode分别代表了Java环境中处理分布式事务和生成条形码的两个重要工具。在开发企业级Java应用,特别是涉及数据库操作和跨系统数据交换时,理解和使用这些技术是非常关键的。

Global site tag (gtag.js) - Google Analytics