- 浏览: 219615 次
- 来自: ...
文章分类
- 全部博客 (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 1012启动mysql 报错: ERROR 2002 (HY0 ... -
PLSQL 查询不出中文问题
2012-06-14 14:17 2737我的操作系统是英文版的,oracle是中文版的,在PL ... -
inux系统上安装MySQL 5.5prm
2012-06-09 22:47 848http://www.cnblogs.com/sunson/a ... -
mysql优化配置参数
2012-05-31 11:04 861http://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 1047Common Dbutils是操作数据库的组件,对传统操作数据 ... -
Mysql数据库服务器性能配置优化一 -- 硬件配置及优化,RAID优化
2012-05-18 17:46 2077近期公司采购了 ... -
RAID 5 and MySQL is NOT recommended
2012-05-18 17:37 937http://www.razzed.com/2009/01/1 ... -
临时表作用
2012-05-04 15:45 10031.事务处理的中间数据,回滚 2.分析数据中间数据 3.复 ... -
临时表在不同数据库设计中的作用
2012-05-04 15:35 3246在以前数据库 ... -
Oracle Apex
2012-04-30 10:59 753http://wenku.baidu.com/view/f83 ... -
XA Datasource 与 Non-XA Datasource 区别
2012-04-27 14:29 2512An XA transaction, in the mos ... -
Spring事务的传播行为
2012-04-27 11:34 961在service类前加上@Transa ... -
什么是事务的传播特性?
2012-04-27 11:33 3357我们都知道事务的概 ... -
数据库事务隔离级别与锁
2012-04-27 11:19 1904数据库事务隔离级别 ... -
索引与散列
2012-04-18 22:30 879http://wenku.baidu.com/view/3c8 ... -
数据库集群技术分析和比较
2012-04-18 22:15 760http://www.51cto.com/art/200607 ... -
数据库优化之:MySQL查询优化
2012-04-18 21:32 1069http://zj86.info/?post=133 ... -
横向比较数据库中不同的索引机制
2012-04-18 20:07 993http://database.51cto.com/art/2 ...
相关推荐
JDBC事务和JTA(XA)事务
介绍了Spring的事务机制、事物抽象、内部事务和外部事物,以及常用的几种事务管理的实现,包括DataSource、JPA、JMS、JTA都通过实例进行说明。还有XA以及两阶段提交,并通过实例演示了使用JTA,通过两阶段提交,实现...
l 为XA和非XA提供内置的JDBC适配器 注释:XA:XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。目前,Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的...
分布式HornetQ持久JTA演示一个具有单个发布者和订阅者的演示JMS实现,每个实现都通过JTA强制JMS操作和相应的JDBC操作之间的事务性。用户注册网站演示发布者网络应用。 通过将用户的个人资料信息保存到数据库来向系统...
JTA/XA 事务管理 —— 提供事务管理和连接池不需要应用服务器 —— TransactionEssentials可以在任何Java EE应用服务器中运行,也就是不依赖于任何应用服务器开源 —— TransactionEssentials是遵守Apache版本2许可...
4.2 事务和JTA 191 4.2.1 事务的基本概念 191 4.2.2 分布式事务处理、XA规范和 2PC协议 192 4.2.3 使用JTA全局事务保证多 数据库的一致性 193 4.3 事务隔离、传播属性的设置 198 4.3.1 并发访问和隔离 198 4.3.2 ...
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
Quartz Scheduler包含许多企业级功能,例如对JTA事务和集群的支持。 Quartz是免费使用的,并根据Apache 2.0许可获得许可。 Quartz作业调度的示例用法: 1、推动流程工作流程:最初下达新订单时,安排一个Job在正好2...
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的? SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建...
混合XA和non-XA的JMS连接 v. 32.5. 支持可替代的内嵌事务管理器 xii. 33. Spring集成 xiii. 34. 基于JMX的监控和管理 xiv. 35. 测试 Spring Boot参考指南 4 i. 35.1. 测试作用域依赖 ii. 35.2. 测试Spring应用 iii....