- 浏览: 224995 次
- 来自: ...
文章分类
- 全部博客 (80)
- 设计架构 (9)
- Javascript,Css (2)
- JVM (7)
- Swing,Applet (1)
- 图像处理 (5)
- Java本地方法 (1)
- 项目管理 (6)
- WEB服务器 (5)
- 数据库 (22)
- linux,unix (2)
- Java collection framework (2)
- safe (0)
- WEB (4)
- HTTP长连接 (1)
- Javascript (6)
- Css (5)
- HTML (1)
- Hibernate (2)
- Spring (0)
- Struts (0)
- NOSQL (0)
- Ibatis (0)
- Core Java (1)
- UI (1)
- dhkchkconfig--- (0)
最新评论
-
ietttt:
楼主方便给个QQ吗?遇到紧急问题想请教楼主。
Java操作visio文档 -
davidtps:
学习了
比较一下ArrayList和LinkedList: -
mousepc:
不错的文章,谢谢!
比较一下ArrayList和LinkedList: -
lliiqiang:
相应的jar包呢
Java操作visio文档 -
pangtao:
分析的很到位,谢谢
比较一下ArrayList和LinkedList:
事务简介
一般情况下,J2EE应用服务器支持JDBC事务、JTA(Java Transaction API)事务(一般由容器来进行管理)。通常,最好不要在程序中同时使用上述三种事务类型,比如在JTA事务中嵌套JDBC事务。第二方面,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用(事务的嵌套要求更加良好的设计)。
JDBC事务
在JDBC中怎样将多个SQL语句组合成一个事务呢?在JDBC中,打开一个连接对象Connection时,缺省是auto-commit模式,每个SQL语句都被当作一个事务,即每次执行一个语句,都会自动的得到事务确认。为了能将多个SQL语句组合成一个事务,要将auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之后,如果不调用commit()方法,SQL语句不会得到事务确认。在最近一次commit()方法调用之后的所有SQL会在方法commit()调用时得到确认。例如下面的代码:
/**
* 测试Jboss中的JDBC事务
*
@author javer QQ:84831612
* @date 2005
*/
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)将根据以下条件返回不同种类的包装器:
1、所使用的 JDBC 驱动程序类是否支持 XA
2、是从 DataSource 还是从 TxDataSource 获得连接
3、调用 getConnection() 时是否在事务内运行
4、是否通过 RMI 从远程获得连接
决定返回哪种包装器的算法的工作方式如下:
JTA实例代码
/**
* 测试Jboss中的JTA事务
*
@author javer QQ:84831612
* @date 2005
*/
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:关闭数据库连接失败!
");}
}
发表评论
-
Can’t connect to local MySQL server through socket 解决办法
2012-06-14 20:56 1120启动mysql 报错: ERROR 2002 (HY0 ... -
PLSQL 查询不出中文问题
2012-06-14 14:17 2799我的操作系统是英文版的,oracle是中文版的,在PL ... -
inux系统上安装MySQL 5.5prm
2012-06-09 22:47 954http://www.cnblogs.com/sunson/a ... -
mysql优化配置参数
2012-05-31 11:04 923http://www.jb51.net/article/264 ... -
HBase 云计算的分布式数据库
2012-05-21 10:55 0http://wenku.baidu.com/view/524 ... -
hibernate的坏处
2012-05-20 12:48 0我平常做金融类产品居多,深知这个东西的害处。onecan说的对 ... -
Dbutils
2012-05-20 12:19 1086Common Dbutils是操作数据库的组件,对传统操作数据 ... -
Mysql数据库服务器性能配置优化一 -- 硬件配置及优化,RAID优化
2012-05-18 17:46 2176近期公司采购了 ... -
RAID 5 and MySQL is NOT recommended
2012-05-18 17:37 1004http://www.razzed.com/2009/01/1 ... -
临时表作用
2012-05-04 15:45 11081.事务处理的中间数据,回滚 2.分析数据中间数据 3.复 ... -
临时表在不同数据库设计中的作用
2012-05-04 15:35 3371在以前数据库 ... -
Oracle Apex
2012-04-30 10:59 820http://wenku.baidu.com/view/f83 ... -
XA Datasource 与 Non-XA Datasource 区别
2012-04-27 14:29 2604An XA transaction, in the mos ... -
Spring事务的传播行为
2012-04-27 11:34 1053在service类前加上@Transa ... -
什么是事务的传播特性?
2012-04-27 11:33 3505我们都知道事务的概 ... -
数据库事务隔离级别与锁
2012-04-27 11:19 1977数据库事务隔离级别 ... -
索引与散列
2012-04-18 22:30 935http://wenku.baidu.com/view/3c8 ... -
数据库集群技术分析和比较
2012-04-18 22:15 817http://www.51cto.com/art/200607 ... -
数据库优化之:MySQL查询优化
2012-04-18 21:32 1122http://zj86.info/?post=133 ... -
横向比较数据库中不同的索引机制
2012-04-18 20:07 1038http://database.51cto.com/art/2 ...
相关推荐
JDBC事务和JTA(XA)事务 JDBC事务和JTA(XA)事务是两种常见的数据库事务类型,它们都可以用来管理数据库事务,确保数据库的一致性和可靠性。 JDBC事务 JDBC事务是Java Database Connectivity(JDBC)的事务机制,它...
本文将重点探讨JDBC事务和JTA分布式事务的区别和应用场景。 首先,JDBC事务是基于数据库连接(Connection)进行管理的。在Java程序中,我们可以通过Connection对象的setAutoCommit、commit和rollback方法来控制事务...
**JDBC(Java Database Connectivity)**是Java编程语言中...学习并实践这些示例,可以帮助开发者深入理解JDBC和JTA的使用,如何在Java应用中进行数据库访问和事务管理,这对于开发企业级的、高可用性的系统至关重要。
JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中 2、分布式事务 分布式事务(DistributedTransaction...
本文将深入探讨如何使用JTA来实现跨库事务,确保数据的一致性和完整性。 首先,我们需要理解JTA的核心概念。JTA提供了一个统一的API,使得应用程序可以透明地处理分布式事务,而无需关心底层的事务管理细节。它定义...
本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java Open Transaction Manager (JOTM) 来实现这样的分布式事务管理。 首先,我们来了解一下JTA。JTA是Java平台的标准事务API,它允许应用程序...
Java事务主要分为三种类型:JDBC事务、JTA(Java Transaction API)事务和容器事务。 1. JDBC事务是基于数据库连接(Connection对象)进行控制的。默认情况下,JDBC连接处于自动提交模式,每个SQL语句都默认作为一...
在实际应用中,选择合适的事务类型取决于应用的需求,例如,简单的单数据库应用可能只需要JDBC事务,而复杂的分布式系统可能需要利用JTA进行事务管理。理解这些概念和机制对于构建健壮的、能够处理复杂业务逻辑的...
根据应用场景的不同,可以选择使用JDBC事务、JTA事务或容器事务等不同的事务处理方式。每种方式都有其特定的应用场景和优势,开发者应根据具体需求选择最合适的事务处理机制。通过合理利用这些事务管理技术,可以...
6. **JTA与JDBC/Java Persistence API (JPA)**: 在JDBC连接上启用JTA事务,需要使用`javax.sql.DataSource.getConnection(UserTransaction, ConnectionProperties)`方法,或者在JPA中通过`@Transactional`注解声明...
5. **XADataSource**:这是JDBC驱动的一种扩展,它实现了`XAResource`接口,允许数据库连接参与到JTA事务中。在描述中提到了`mysql-connector-java`,这意味着我们将使用MySQL数据库,并且其JDBC驱动支持JTA。 在...
**标题与描述解析** ...总结,JTA和JBarcode分别代表了Java环境中处理分布式事务和生成条形码的两个重要工具。在开发企业级Java应用,特别是涉及数据库操作和跨系统数据交换时,理解和使用这些技术是非常关键的。
集成JTA到项目中,开发者需要配置事务管理器,例如使用JBoss Transaction Manager或WebLogic的Transaction Service,并确保所有的持久化层(如JPA、JDBC)都支持XAResource。同时,业务逻辑层需要适当地调用...
2. **事务支持**:作为JTA的一部分,XAPool能够参与全局事务,确保数据的一致性和完整性。 3. **故障恢复**:当数据库连接出现问题时,XAPool可以检测到并自动进行故障切换,确保系统的高可用性。 4. **监控和统计**...
在Java中,事务处理主要分为三种类型:JDBC事务、JTA事务和容器事务。 ##### 1. JDBC事务 JDBC事务是最基础的事务处理方式,由`java.sql.Connection`接口提供支持。该接口提供了控制事务的方法: - `...
JTA定义了一套接口和规范,包括UserTransaction、TransactionManager和XAResource等,来协调和控制事务的生命周期。 **2. 事务处理** 事务是保证业务操作完整性的基本单元,遵循ACID原则: - **原子性(Atomicity)...
1. **JDBC事务**:通过`java.sql.Connection`对象进行控制。默认情况下,JDBC连接处于自动提交模式,可通过`setAutoCommit(false)`关闭自动提交,然后手动调用`commit()`或`rollback()`来开始和结束事务。例如,一个...
- **非XA驱动**:通常指的是普通的JDBC驱动,它支持基本的SQL操作和单个数据源的事务管理。这种类型的驱动适用于简单的应用程序,这些应用程序通常只涉及到一个数据库,并且不需要复杂的分布式事务处理。 - **XA...
SQL Server 与 Java 连接操作 SQL Server 是一个 ...JDBC 事务和 JTA 事务都是实现 Java 应用程序与数据库之间的事务处理的重要机制。通过了解这两种事务机制,可以更好地实现 Java 应用程序的可靠性和可扩展性。
在较小规模的应用或者对事务要求不高的场景下,可能更适合使用轻量级的事务管理机制,如JDBC的Connection的commit()和rollback()方法。 总之,JTA-1.0.1B.jar作为Java事务处理的关键组件,提供了强大的事务管理能力...