朝花夕拾 之 J2EE中的事务处理

(最全)Apache Jakarta Commons 工具集及其API 网上找不全,官网资源又太分散,自己动手,丰衣足食,这是我挨个下载的Apache jakarta commons,有windows与linux两版本(全都有源码),甚至分离出去的HttpClient都在其中,愿更多的人了解并使用Apache,这是一个大神的聚集地 立即下载

事务简介

  一般情况下,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事务
* <p>@author javer QQ:84831612</p>
* @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:事务回滚失败!<br />");}
out.println("catch:" + e.getClass() + ";" + e.getMessage()+"<br />");
}finally{
if(conn!=null)
try{conn.close();}catch(Exception e1){out.println("finally:关闭数据库连接失败!<br />");}
}
  毕竟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事务
* <p>@author javer QQ:84831612</p>
* @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 + "行记录!<br />");
if(true)throw new Exception("故意抛出的异常!");
int num = statement.executeUpdate("delete testtable");
out.println("删除了" + num + "行记录!<br />");
tx.commit();
} catch (Exception e) {
if(tx!=null)
try{tx.rollback();}catch(Exception e1){out.println("catch:事务回滚失败!<br />");}
out.println("catch:" + e.getClass() + ";" + e.getMessage()+"<br />");
}finally{
if(conn!=null)
try{conn.close();}catch(Exception e1){out.println("finally:关闭数据库连接失败!<br />");}
}

使用VMware Converter将物理机转换为虚拟机时,目标虚拟机的converter-helper不启动的问题解决方法 摘要:在使用VMware Converter将Linux物理机转换为虚拟机时,遇到转换进度卡在1%且无法连接helper server的问题。主要原因是未给helper server配置与源主机互通的IP地址,以及目标虚拟机未正确加载helper server镜像文件或未设置光驱为第一启动项。解决方法包括:1)在转换配置中手动设置helper server的IP地址;2)检查并手动上传helper server镜像文件到目标虚拟机;3)确保虚拟机的光驱设置为第一启动项。正确配置后,转换进程即可正常进行。(1 阅读详情

相关推荐

Hodgkin-Huxley Model

介绍了经典的动力学模型:HH Model

weixin_73557167的博客 2474

Java Transaction API概述

引言   JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力。   本文的目的是要提供一个关于的Java事务处理API(JTA)的高级的概述,以及与分布式事务相关的内容。一个事务处理定义了一个工作逻辑单元,要么彻底成功要么不产生任何结果。 一个分布式事务处...

小头猪 485

保姆级教程:在SIwave 2024 R2中搞定TDR仿真,手把手教你分析USB 3.0差分线阻抗

本文提供了一份详细的SIwave 2024 R2 TDR仿真教程,重点讲解如何分析USB 3.0差分线阻抗。从项目准备、参数配置到结果分析,逐步指导工程师完成完整的仿真流程,并分享实战经验和高级技巧,帮助提升信号完整性分析能力。

weixin_33670786的博客 497

Jakarta项目介绍

升级到Spring 6或Spring Boot 3遇到的问题;IDEA强大功能;;升级javax到jakarta,及两者区别;Jakarta EE;jakarta依赖;jakarta项目;单独项目;

lonelymanontheway的博客 4946

VS Code下载安装与使用教程

VSCode下载安装与使用教程

weixin_46713695的博客 4万+

时间序列预测 | Python实现LSTM时间序列数据预测

目录LSTM神经网络LSTM原理LSTM数据下载LSTM程序设计导入Python包时序数据处理LSTM模块定义模型训练模型评估参数设定运行结果参考资料致谢 LSTM神经网络 长短期记忆网络——通常简称为“LSTM”——是一种特殊的 RNN,能够学习长期依赖关系。它们由Hochreiter & Schmidhuber (1997)引入,并在后续工作中被许多人提炼和推广。1它们在处理各种各样的问题时效果非常好,现在被广泛使用。LSTM 被明确设计为避免长期依赖问题。长时间记住信息实际上是他们的默认行为

前程算法屋的博客 3911

Java 分布式事务之JTA事务从入门到精通

最近回顾 事务相关的设计与实现,发现 Spring 事务设计的最初目的是为了统一 Java 中 JDBC、JTA 与 JPA 事务的使用方式,并且其实现参考了 JTA 规范。大多数人对 JDBC 都比较熟悉,而 JTA 和 JPA 由于使用较少,很多人对其比较陌生,尤其是 JTA。接下来会跟大家说明其他事务 像JDBC 事务 Hibernate 事务EJB 事务都会和大家一一介绍。

林在闪闪发光的博客 2252

如何在 Ubuntu 22.04 上安装和配置 VNC 服务器?

VNC(Virtual Network Computing)是一种图形桌面共享系统,通过网络允许用户控制另一台计算机的桌面环境。无论你是系统管理员还是开发人员,VNC 都可以在远程访问桌面环境时提供极大的便利。在安装和配置 VNC 服务器之前,我们需要确保系统是最新的,并安装一些基本工具。这些命令将更新你的软件包列表并升级所有已安装的软件包,以确保你拥有最新的安全修复和功能更新。

网络技术联盟站 4003

SSM框架-Spring(三)

比如:这里最后一条DML语句之后的睡眠20秒不算进超时时间里。放到insert之前才算。

weixin_46051964的博客 1423

【WRF安装】完整自动化 WRF-ARW/WRF-Chem 安装脚本(多服务器测试)

【WRF安装】完整自动化 WRF-ARW/WRF-Chem 安装脚本(多服务器测试)

WW、forever的博客 285

光学防抖OIS介绍与标定

前言:先看一下有无ois系统的效果。 1. OIS系统的作用就是消除镜头的抖动。 Gyro感受方向,Hall感受位移,Actuator驱动马达来矫正抖动方向和位移。 2.ois系统的结构构成 从上面来看ois系统主要有Hall,...

camerall 1万+

Java 分布式事务规范 JTA 从入门到精通

最近回顾 Spring 事务相关的设计与实现,发现 Spring 事务设计的最初目的是为了统一 Java 中 JDBC、JTA 与 JPA 事务的使用方式,并且其实现参考了 JTA 规范。 网上 JTA 的相关文章,要么参照规范照本宣科的把原理简单介绍,要么就直接上 Spring Boot 整合 JTA 框架的代码,由于知识跨度比较大,增加了对 JTA 理解的难度。经过几天的不懈努力,查阅相关资料,我也对 JTA 有了一定的理解,这里将知识结构以循序渐进的方式进行介绍,也避免小伙伴们多走弯路。...

大鹏的博客 1万+

Machine Unlearning: A Survey

机器学习已经引起了广泛的关注,并发展成为一种使能技术,用于广泛的高度成功的应用,如智能计算机视觉、语音识别、医疗诊断等。然而,由于隐私、可用性和/或被遗忘权,一些特定样本的信息需要从称为机器遗忘的模型中删除,这就产生了一种特殊的需求。这项新兴技术因其创新性和实用性而引起了学术界和工业界的极大兴趣。与此同时,这个雄心勃勃的问题导致了许多旨在应对其挑战的研究工作。据我们所知,没有任何研究分析过这一复杂的主题,也没有比较过现有的遗忘解决方案在不同场景下的可行性。因此,通过这项调查,我们旨在了解遗忘技术的关键概念。

c_cpp_csharp的专栏 1159

朝花夕拾——JAVAday0

为了毕业、为了就业、为了生活,朝花夕拾,重拾java

weixin_47599354的博客 184

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java ee vs spring_springVS javaee

https://stackoverflow.com/questions/4490682/difference-between-java-ee-and-spring-frameworkhttps://stackoverflow.com/questions/19079798/spring-vs-java-ee-7/19080312#19080312http://stackoverflow.com/qu...

weixin_33925615的博客 254

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

朝花夕拾——Groovy & Grails - 蛟龍居 - BlogJava

朝花夕拾——Groovy & Grails - 蛟龍居 - BlogJava 朝花夕拾——Groovy & Grails - 蛟龍居 - BlogJava朝花夕拾——Groovy & Grails 公告 目前Groovy最新版本:Groovy...

243

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

powerdesigner 之朝花夕拾

以前作过两年delphi的数据库开发,转j2ee后自觉剩下的积累不多,例如sql语法,存储过程,痛心呀,以前咋就那么甘于当一个coder呢,幸好当年跟着数据库设计师学过一两个月的Powerdesiger,现在重拾,备觉轻松。对于cdm pdm都还记得,就是需要看一下新项目是否用得上odm了。       从网上copy过来备忘一下:   概念数据模型(CDM)    信息系统的概念设计工具,即

青之六号 1694

java基础梳理--朝花夕拾(一)

简介: Java是一种撰写跨平台应用软件的面向对象语言,1995年由Sun Microsystems公司推出。 2009年04月20日,甲骨文74亿美元收购Sun,取得java的版权。 2011年7月28日,甲骨文发布java7.0的正式版。 2014年3月19日,甲骨文公司发布java8.0的正式版。 Java组成部分: (1)Java编程语言 (2)Java文件格式 (3)Java...

weixin_30555753的博客 131

【转载】Groovy & Grails系列文章——朝花夕拾

朝花夕拾——Groovy & Grails 公告 目前Groovy最新版本:Groovy1.8.1,Grails 最新版本:Grails1.3.7 GroovyHelp最新版本:GroovyHelp v3.2.0 GA (GroovyHelp releases) 在Grails0.6+中,数据源配置和log4j的配置以及Spring的配置分别在grails -a

咖啡加醋 891

Groovy & Grails系列目录

朝花夕拾——Groovy & Grails 公告 目前Groovy最新版本:Groovy1.8.1,Grails 最新版本:Grails1.3.7 GroovyHelp最新版本:GroovyHelp v3.2.0 GA (GroovyHelp releases) 在Grails0.6+中,数据源配置和log4j的配置以及Spring的配置分别在grails -app\co

cactusz的博客 393

ejb2.0 HelloWord[转]

ejb2.0 HelloWord http://8366.iteye.com/blog/247315 关键字: ejb    中国电信网上营业厅项目是使用ejb2.0开发的,在项目中已有的框架中修修补补,也没写过一个HelloWorld的例子,今天朝花夕拾,写一个例子   步骤:   1.在eclipse下新建一个java项目.命名叫 ejb2test 2.在项目的根目录下建立...

liyankun_private的博客 197

ejb2.0 HelloWord

中国电信网上营业厅项目是使用ejb2.0开发的,在项目中已有的框架中修修补补,也没写过一个HelloWorld的例子,今天朝花夕拾,写一个例子 步骤: 1.在eclipse下新建一个java项目.命名叫 ejb2test 2.在项目的根目录下建立  META-INF 文件夹,主要是为了存放ejb-jar.xml, jboss.xml 3.在src文件夹下建立 两个包 cn.com.xinl

zuo_qin_bo的专栏 670

hello world

  中国电信网上营业厅项目是使用ejb2.0开发的,在项目中已有的框架中修修补补,也没写过一个HelloWorld的例子,今天朝花夕拾,写一个例子 步骤: 1.在eclipse下新建一个java项目.命名叫 ejb2test2.在项目的根目录下建立  META-INF 文件夹,主要是为了存放ejb-jar.xml, jboss.xml 3.在src文件夹下建立 两个包 cn

zw2mba的专栏 374

Groovy & Grails系列目录

  朝花夕拾——Groovy &amp; Grails 公告 目前Groovy最新版本:Groovy1.8.1,Grails 最新版本:Grails1.3.7 GroovyHelp最新版本:GroovyHelp v3.2.0 GA (GroovyHelp releases) 在Grails0.6+中,数据源配置和log4j的配置以及Sprin...

不积跬步 无以至千里 不积小流 无以成江海 281

我的友情链接

51CTO博客开发高安定的51CTO博客51CTO博客管家 邵程程小虎嘚吧嘚鹤楼如约凡人世界综合布线工作组Reinember醉梦无的博客cisco network菜鸟网管的学习博客明诚阁song8575卢松松在51CTO孟子万空星阁西蒙[爱生活,爱学习]天涯的小窝我的微软随笔博客!毛豆的博客隐龙阁sally炫舞Kirin的茶水间小麦路途拾遗-小侠唐在飞王春海的博客关注互联网老...

weixin_34198583的博客 82

推荐Java程序员阅读的书籍

作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。 Java编程入门类:《Java编程思想》、《Agile Java》中文版; Java编程进阶类:《重构 改善既有代码的设计》、《测试驱动开发 by Example》

朝花夕拾 613
上一篇: 朝花夕拾 之 Java+JavaScript构建自己的超级树
下一篇: 事务服务浅析
java008
博客等级 码龄23年 6粉丝 31原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值