`
andymu1117
  • 浏览: 37969 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

(转)浅谈JDBC事务和JTA (XA)事务

    博客分类:
  • java
阅读更多

事务简介

  一般情况下,J2EE应用服务器支持JDBC事务、JTAJava Transaction API)事务(一般由容器来进行管理)。通常,最好不要在程序中同时使用上述三种事务类型,比如在JTA事务中嵌套JDBC事务。第二方面,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用(事务的嵌套要求更加良好的设计)。

JDBC事务

  在JDBC中怎样将多个SQL语句组合成一个事务呢?在JDBC中,打开一个连接对象Connection时,缺省是auto-commit模式,每个SQL语句都被当作一个事务,即每次执行一个语句,都会自动的得到事务确认。为了能将多个SQL语句组合成一个事务,要将auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之后,如果不调用commit()方法,SQL语句不会得到事务确认。在最近一次commit()方法调用之后的所有SQL会在方法commit()调用时得到确认。例如下面的代码:

/**

* 测试Jboss中的JDBC事务

*

*/

jjava.sql.Connection conn = null;

try{

javax.sql.DataSource ds = (javax.sql.DataSource) context.lookup("java:/OracleDS");

conn = ds.getConnection();

conn.setAutoCommit(false);

java.sql.Statement statement = conn.createStatement();

/**

*

* 数据库操作

*

*/

conn.commit();

} catch (Exception e) {

if(conn!=null)

try{conn.rollback();}catch(Exception e1){out.println("catch:事务回滚失败!

");}

out.println("catch:" + e.getClass() + ";" + e.getMessage()+"

");

}finally{

if(conn!=null)

try{conn.close();}catch(Exception e1){out.println("finally:关闭数据库连接失败!

");}

}

  毕竟JDBC事务大多数程序员可能经常使用,而且比较相对简单,就不作过多的描述了

 

JTA XA)事务

  Java 事务 API(JTA) 及其同门兄弟 Java 事务服务(Java Transaction Service JTS) J2EE 平台提供了分布式事务服务。一个分布式的事务涉及一个事务管理器和一个或者多个资源管理器。一个资源管理器是任何类型的持久性的数据存储。事务管理器负责协调所有事务参与者之间的通信。

  与本地事务相比,XA 协议的系统开销相当大,因而应当慎重考虑是否确实需要分布式事务。只有支持 XA 协议的资源才能参与分布式事务。如果事务须登记一个以上的资源,则需要实现和配置所涉及的资源(适配器、JMS JDBC 连接池)以支持 XA

JTA事务工作流程

  WEB服务器(比如:WebLogic Server)将根据以下条件返回不同种类的包装器:

 

 

    2、是从 DataSource 还是从 TxDataSource 获得连接

    3、调用 getConnection() 时是否在事务内运行

    4、是否通过 RMI 从远程获得连接

 

 

 

 

JTA实例代码

/**

* 测试Jboss中的JTA事务

*

*/

javax.transaction.UserTransaction tx = null;

java.sql.Connection conn = null;

try{

tx = (javax.transaction.UserTransaction) context.lookup("java:comp/UserTransaction");  //取得JTA事务,本例中是由Jboss容器管理

javax.sql.DataSource ds = (javax.sql.DataSource) context.lookup("java:/XAOracleDS");  //取得数据库连接池,必须有支持XA的数据库、驱动程序

tx.begin();

conn = ds.getConnection();

//conn.setAutoCommit(false);

java.sql.Statement statement = conn.createStatement();

String sql = "insert into testtable (cell1,cell2,cell3,cell4) values('"+System.currentTimeMillis()+"','','','')";

int insert = statement.executeUpdate(sql);

//conn.commit();  //JTA事务中不要嵌套JDBC事务啦!!!重要,切记,否则会抛出异常!!!

out.println("插入了" + insert + "行记录!

");

if(true)throw new Exception("故意抛出的异常!");

int num = statement.executeUpdate("delete testtable");

out.println("删除了" + num + "行记录!

");

tx.commit();

} catch (Exception e) {

if(tx!=null)

try{tx.rollback();}catch(Exception e1){out.println("catch:事务回滚失败!

");}

out.println("catch:" + e.getClass() + ";" + e.getMessage()+"

");

}finally{

if(conn!=null)

try{conn.close();}catch(Exception e1){out.println("finally:关闭数据库连接失败!

");}

} 浅谈JDBC事务和JTA (XA)事务

 

  决定返回哪种包装器的算法的工作方式如下:

    1、所使用的 JDBC 驱动程序类是否支持 XA

分享到:
评论

相关推荐

    JDBC事务和JTA(XA)事务

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

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

    本文将重点探讨JDBC事务和JTA分布式事务的区别和应用场景。 首先,JDBC事务是基于数据库连接(Connection)进行管理的。在Java程序中,我们可以通过Connection对象的setAutoCommit、commit和rollback方法来控制事务...

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

    在Java编程中,处理事务主要涉及JDBC(Java Database Connectivity)和JTA(Java Transaction API)。理解这些概念对于开发可靠的、高性能的数据库应用至关重要。 首先,让我们从事务的四大特性说起: 1. **原子性...

    JDBC-JTA.rar_jdbc_jta_jta JDBC

    **JDBC(Java Database Connectivity)**是Java编程语言中...学习并实践这些示例,可以帮助开发者深入理解JDBC和JTA的使用,如何在Java应用中进行数据库访问和事务管理,这对于开发企业级的、高可用性的系统至关重要。

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

    分布式事务(DistributedTransaction)包括事务管理器(TransactionManager)和一个或多个支持 XA 协议的资源管理器 ( Resource Manager )。 资源管理器是任意类型的持久化数据存储容器,例如在开发中常用的关系型...

    JDBC事务处理机制探秘

    JDBC(Java Database Connectivity)提供了对事务处理的基本支持,而JTA(Java Transaction API)则提供了更高级的事务管理功能,特别是对于分布式事务的处理。 首先,我们来看JavaBean中如何使用JDBC进行事务处理...

    Springboot+Atomikos+Jpa+Mysql实现JTA分布式事务

    本文将详细讲解如何利用Spring Boot、Atomikos、JPA(Java Persistence API)以及MySQL来实现JTA(Java Transaction API)分布式事务。 首先,Spring Boot是一个轻量级的框架,它简化了基于Spring的应用程序开发...

    spring+jotm+ibatis+mysql实现JTA分布式事务

    在JTA分布式事务的场景下,iBATIS作为数据访问层,参与到事务处理中,其执行的SQL操作会受到JTA的控制,确保在事务中的所有数据库操作要么全部成功,要么全部回滚。 MySQL是广泛使用的开源关系型数据库管理系统,它...

    多数据源事务jta测试

    - **XA事务**:JTA使用的两阶段提交(2PC)协议,保证所有参与的资源在同一时间提交或回滚。 - **异常处理**:在事务处理中,异常处理是非常重要的,因为任何异常都可能导致事务回滚。 - **Spring框架的支持**:...

    使用JTA实现跨库事务

    本文将深入探讨如何使用JTA来实现跨库事务,确保数据的一致性和完整性。 首先,我们需要理解JTA的核心概念。JTA提供了一个统一的API,使得应用程序可以透明地处理分布式事务,而无需关心底层的事务管理细节。它定义...

    Springboot 动态多数据源 jta分布式事务

    本资源针对的是Spring Boot动态多数据源和JTA(Java Transaction API)分布式事务的实现,对于初学者来说非常实用。下面我们将深入探讨这些知识点。 首先,让我们了解一下Spring Boot的多数据源。在许多业务场景下...

    事务处理:JTA事务

    JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。  要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。

    JTA分布式事务使用示例代码

    JTA定义了两个主要组件:Transaction Manager(事务管理器)和XAResource(事务资源)。事务管理器负责控制事务的生命周期,包括开始、提交、回滚等操作;而XAResource则代表可以参与事务的资源,如数据库连接、消息...

    JTA事务源码示例

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

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

    本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java Open Transaction Manager (JOTM) 来实现这样的分布式事务管理。 首先,我们来了解一下JTA。JTA是Java平台的标准事务API,它允许应用程序...

    多数据源事务之解决方案jta+atomikos

    UserTransaction用于启动和终止事务,TransactionManager负责事务的管理,包括提交、回滚、保存点以及资源的注册和同步,而XAResource则是数据源提供的接口,用于与事务管理器交互,参与到全局事务中。 Atomikos则...

    Spring配置JTA事务管理

    本篇文章将深入探讨如何在Spring中配置JTA事务管理,以实现跨数据库和资源的事务一致性。 首先,让我们了解JTA的基本概念。JTA是一个规范,它定义了接口和API,使得应用程序可以控制跨越多个数据存储(如数据库、...

    分布式事务JTA之实践:Spring+ATOMIKOS

    Atomikos包含了事务协调器(Transaction Manager)和资源管理器(如XAResource),可以处理跨数据库、JMS和其他JTA兼容资源的事务。Atomikos的使用使得在不依赖特定数据库厂商API的情况下,能够在不同资源之间实现两...

    springboot整合jta实现多数据源事务管理

    在Spring Boot应用中,整合JTA(Java Transaction API)实现多数据源事务管理是一个常见的需求,特别是在分布式系统中,为了确保数据的一致性和完整性。本文将深入探讨如何配置和使用Spring Boot与JTA来管理多个...

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

    它包括三个主要组件:JTAS(Java Transaction Service,事务服务)、XAResource(可扩展的资源接口)和TM(Transaction Manager,事务管理器)。在分布式系统中,TM负责协调参与事务的各个资源,确保事务的ACID...

Global site tag (gtag.js) - Google Analytics