java程序回滚之后在哪看_Java在触发事务回滚之后为什么会再一次回到Servlet开始的地方重新走一次流程?...
代码流程
前台点击"提交订单"进入BaseServlet.class
BaseServlet.class分发至子类OrderServlet.class的submitOrder()方法
submitOrder()调用Service层的submitOrder()方法.
关键是Service层submitOrder()中使用了事务回滚. 这里调用了Dao层两个方法: fun01()和fun02(), 其中fun01执行成功, fun02()执行时抛出异常.
catch到异常后, 执行回滚. 然后关闭连接.
然后, 异常诡异的是, 程序并没有在回滚、关闭连接后结束,而是再一次进入BaseServlet。
再一次执行一次上述流程,而这一次,由于第一次已经将线程绑定的连接关闭了。所以自然出现异常:不能操作已经关闭的连接。
我的疑惑是:为什么它走了两次这个流程?是因为我调用了个dao层的插入数据的方法吗?
还是或事物回滚就是从头在执行要一遍流程呢?
这个异常, 导致回滚技术无法实现呀.
代码片段(图片)
代码片段源码
Servlet层
public String submitOrder(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
...
Debug.log("进入方法:submitOrder..."); // 打印信息
boolean flag = false;
// 调用service层方法
flag = orderService.submitOrder( pids, checkeds, quantitys, user );
// 提交成功 --> order_info.jsp页面 失败 --> info.jsp
if( flag ) {
return goOrderInfoUI(req, resp);
}else {
req.setAttribute("error", "提交订单失败!");
return "/info.jsp";
}
}
service层
...
// 获得*线程绑定的连接*
Connection conn = null;
try {
conn = C3P0Util.getConnection();
Debug.log("连接=="+conn);
// 开启事务
// 由于插入要么都成功, 要么都失败, 所以需要用事务操作
Debug.log("进入try");
conn.setAutoCommit(false);
Debug.log("开启事务");
// 调用dao插入数据库
// 插入订单
orderDao.insertOrder(order);
Debug.log("order插入走完");
// 插入订单项
orderDao.insertOrderItmes( orderItems );
// 提交事务
conn.commit();
// 方法返回值为true
Debug.log("事务已提交");
flag = true;
}catch(Exception e) {
Debug.log("进入外层catch");
// 回滚事务
try {
conn.rollback();
Debug.log("事务已回滚");
} catch (SQLException e1) {
// TODO Auto-generated catch block
Debug.log("进入内存catch");
e1.printStackTrace();
}
}finally {
// 关闭连接
try {
Debug.log("关闭连接");
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Debug.log("service走完");
return flag;
...
注:Debug.log()是自定义方法用来打印信息.
java程序回滚之后在哪看_Java在触发事务回滚之后为什么会再一次回到Servlet开始的地方重新走一次流程?...相关推荐
- Java程序员的专属社区 |【Java程序员大本营】新人必看玩转攻略
"一个人走的快,一群人走的远" 这是Java程序员专属社区创立的初衷. [Java程序员大本营]是面向工作1-3年,希望提升专业技术能力的Java 开发者建立, 致力于Java知识 ...
- java: 程序包com.alibaba.fastjson不存在_Java开发中的异常
NO.1 Java.alng.NullPointerException 这个异常大家肯定都经常遇到,异常的解释是 "程序遇上了空指针 ",简单地说就是调用了未经初始化的对象或者是不 ...
- java程序员从笨鸟到菜鸟_Java程序员从笨鸟到菜鸟之(十四)Html基础积累总结(上)...
[新朋友]点击标题下面(↑)蓝色字"Java那些事"关注 [老朋友]点击右上角,转发或分享本页面内容 这是我以前写的<java程序员由笨鸟到菜鸟>系列博客,每天更新一篇 ...
- java程序语言设计第三章答案_java语言程序设计课后习题解答张思民第三章
java语言程序设计课后习题解答张思民第三章 1 第3章 面向对象程序设计基础 [1]什么是 Java 程序使用的类?什么是类库? [解答]:Java 程序的基本单位是类.对象是对事物的抽象,而类是对 ...
- java程序员要去学c 吗_java程序员是否要学c++
如题,我觉得其实有这个必要.可以从几个方面来看,首先我们不说java与c++语言本身的特性.从历史上来看,java和c++就有着比较密切的关系.很多人认为java就是简化版的带虚拟机的c++.这样我们 ...
- java程序中的图片与数值关联_Java从图片中读取图片的元数据Exif信息
一般情况下是java程序读取不到gps等扩展信息的.如果想要解析到里面的信息需要下载一个jar包,metadata-extractor-2.6.4.jar(下载地址: http://code.goog ...
- java程序的运行结果依赖操作系统吗_java模拟试卷及答案及解析4
复习题4 一.选择题 1.在面向对象的方法中,一个对象请求另一个对象为其服务的方式是通过发送( D ) A.调用语句 B.命令 C.口令 D.消息 2.Java语言具有许多优点和特点,下列选项中,哪个 ...
- java程序员面试怎么难为面试官_Java程序员面试这些多线程问题你知道吗?
在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.所以你应该准备很多关于多线程的问题.在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的.他们会问面试者很 ...
- java程序中可以有几个构造方法_java中多个构造方法可以相互引用么?
这个程序是创造一个矩形并输出它的对角点importjava.awt.Point;classMyRect{intx1=0;intx2=0;inty1=0;inty2=0;MyRect(intx1,int ...
最新文章
- 中国出版业,九死一生
- UVa - 12617 - How Lader
- ubuntu+VsCode+Cmake+eigen 开发eigen应用
- CentOS 6.5下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器
- Atitit.病毒木马程序的感染 传播扩散 原理
- 优秀程序员是怎样提高敲代码的效率?有这些工具就够了!
- C 语言经典面试题 —— 宏
- 实战build-react(二)-------引入Ant Design(增加)
- ARTIF:实时威胁智能识别框架
- Python快速转换numpy数组中Nan和Inf的方法
- android usb 摄像头 驱动开发,自制USB摄像头硬件的驱动编写_修改UVC
- hive drop表恢复手册
- 网络抖动多少ms算正常_【求助】acrh17 ping结果最高延时多少ms?算正常
- 瑞盟485/422接口电路MS2576完全替代AM26C31
- flstudio软件怎么设置中文语言切换?
- 解决docker启动错误 error creating overlay mount to /var/lib/docker/overlay2
- codeforces 1238
- java页面正文提取_Crux 是一个 HTML 正文内容提取库,并确定一篇文章的关键内容...
- Loopback 录屏和录音频(Mac录屏教程/录视频教程/Loopback 教程)
- 解决报错dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
热门文章
- 机器学习和人工智能的初学指南
- 赠书 | IoT 的真正目标是什么
- SOA为什么不“香”了? | 大咖说中台
- 建议看 | 计算机网络核心概念
- 前端性能——数据持久化
- 请结合计算机硬件论述指令执行的过程,【计算机组成原理】计算机软硬件组成...
- python学习list_python学习之list
- 阿里云大学python_阿里云大学「学习路线」,一站式从入门到高手——Python、Java、前端、运维、数据库、云原生……...
- 计算机模拟数学实验动画,计算机图形学实验-简单动画的实现、三维图形变换.docx...
- android获取版本号报错,Android开发:获取安卓App版本号的方法步骤