Java开发中支持三种类型的事务管理。即:JDBC事务,JTA(Java Transaction API)事务,容器管理事务。
最好不要在程序中同时使用上述三种事务类型;并且,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用。
简单来说jdbc只能针对单个Connection。而JTA是能跨多个Connection,甚至可以是其它的连接,容器事务是基于JTA之上的封装实现。
如果应用的每个事务都是在单个数据库单次连接,那就使用JDBC事务,如果要跨越多个连接或者多个数据库那就使用JTA。容器事务一般是管理EJB的应用中会用到。
jdbc事务:
public String delete(String id) ...{
String ID = id;
db = new getConnection();
Connection con = db.getConnection();
try{
con.setAutoCommit(false);
db.executeUpdate("delete from helloworld where ID=" + ID); //更新操作1
db.executeUpdate("delete from helloworld _book where ID=" + ID); //更新操作2
db.executeUpdate("delete from helloworld _user where ID=" + ID); //更新操作3
con.commit();//提交JDBC事务
con.setAutoCommit(true);
db.close();
return “success”;
}catch (Exception e){
con.rollBack();//回滚JDBC事务
e.printStackTrace();
db.close();
return “fail”;
}
}
如上例:更新操作1,2,3只有当三步操作都成功完成才进行提交,否则回滚已经进行的操作。这样,保证了数据的完整性,不会因为突然断电等特殊情况导致的数据错误。
使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。
JTA事务:
JTA是J2EE事务服务的解决方案、描述了J2EE模型事务接口。JTA具有三个主要的接口:UserTransaction、TransactionManager、Transaction接口。这些接口共享公共的事务操作,如:commit()、rollback()。同时各自也有自己的操作。举例说明:
Java代码
public String delete(String id){
String ID = id;
db = new getConnection();
db.getConnection();
UserTransaction transaction = sessionContext.getUserTransaction();//获得JTA事务
try{
transaction.begin(); //开始JTA事务
db.executeUpdate("delete from helloworld where ID=" + ID);
db.executeUpdate("delete from helloworld _book where ID=" + ID);
db.executeUpdate("delete from helloworld _user where ID=" + ID);
transaction.commit(); //提交JTA事务
db.close();
return”success”;
}
catch (Exception e){
try{
transaction.rollback();//事务回滚
}
catch (Exception e){
e.printStackTrace();
}
exc.printStackTrace();
db.close();
return “fail”;
}
}
JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。
JTA允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。
容器事务:
容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。相对编码实现JTA事务管理,我们可以通过EJB容器提供的容器事务管理机制(CMT)完成同一个功能,这项功能由J2EE应用服务器提供。这使得我们可以简单的指定将哪个方法加入事务,一旦指定,容器将负责事务管理任务。这是我们土建的解决方式,因为通过这种方式我们可以将事务代码排除在逻辑编码之外,同时将所有困难交给 J2EE容器去解决。使用EJB CMT的另外一个好处就是程序员无需关心JTA API的编码,不过,理论上我们必须使用EJB。
3种事务管理的差别:
1、JDBC事务控制的局限性在一个数据库连接内,但是其使用简单。
2、JTA事务的功能强大,事务可以跨越多个数据库或多个DAO,使用也比较复杂。
3、容器事务,主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用使用。
事务控制是构建J2EE应用不可缺少的一部分,合理选择应用何种事务对整个应用系统来说至关重要。一般说来,在单个JDBC 连接连接的情况下可以选择JDBC事务,在跨多个连接或者数据库情况下,需要选择使用JTA事务,如果用到了EJB,则可以考虑使用EJB容器事务。
分享到:
相关推荐
Java Web项目企业事务管理系统源码,详细的代码注释 本系统的开发工具具体如下。 ● 系统开发平台:MyEclipse 6.5。 ● 数据库管理系统软件:MySQL 5.0。 ● 运行平台:Windows 2000/Windows XP/Windows 2003/...
管理员管理首页轮播图、管理事务所新闻、管理客户、律师、历史案件 律师可以查看客户向我发出的咨询,并且可以选择是否接单;律师可以查看用户给我的留言、律师可以给用户会消息 客户:可以向律师咨询、私发消息给...
教学事务管理系统 java 源代码很经典的系统
5.2.2 基于Annotation方式的声明式事务 基于Annotation方式的声明式事务 1 在...接下来的两个小节中,将对这两种声明式事务管理方式进行详细讲解。 基于XML方式的声明式事务是在配置文件中通过元素配置事务规则来实现
采用java技术构建的一个管理系统。整个开发过程首先对系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计...
班级事务-班级事务系统-班级事务系统源码-班级事务管理系统-班级事务管理系统java代码-班级事务系统设计与实现-基于ssm的班级事务系统-基于Web的班级事务系统设计与实现-班级事务网站-班级事务网站代码-班级事务平台...
基于java的开发源码-开源事务管理器 JOTM.zip
java代码-使用java解决数据库事务处理的源代码 ——学习参考资料:仅用于个人学习使用!
JDBC事务管理及SavePoint示例Java开发Java经验技巧共12页.pdf.zip
java代码-使用java解决事务追踪管理系统的源代码 ——学习参考资料:仅用于个人学习使用!
5.1 Spring事务管理概述 在实际开发中,操作数据库时都会涉及到事务管理问题,为此Spring提供了专门用于事务处理的API。Spring的事务管理简化了传统的事务管理流程,并且在一定程度上减少了开发者的工作量。 5.1.1 ...
持久化层使用Mybatis,项目管理Maven3, 1.前后端分离项目,前端使用vue框架 2.后端使用Java编程语言的Springboot框架 3.项目中登录模块用到token 详细情况查看我个人博客https://blog.csdn.net/yibo2022
这个项目是企业日常事务管理系统,里面的业务逻辑比较简单,对于学习项目开发的人员来说,可以用来练手,其中里面少了一个jstl包,希望到时候使用的时候能够下载
班级事务-班级事务系统-班级事务系统源码-班级事务管理系统-班级事务管理系统java代码-班级事务系统设计与实现-基于ssm的班级事务系统-基于Web的班级事务系统设计与实现-班级事务网站-班级事务网站代码-班级事务平台...
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...
000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA...050101_〖开发实例〗_Java开发实例讲解(人员管理)笔记.pdf
本系统使用数据库Mysql数据库,基于Tomcat开发,使用java版本jdk8
JAVA SSM班级事务管理系统 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器:...