一、了解事务源
我在面试中经常会问到这样的一个问题,假如有一个全局变量,在一个事务中修改了这个变量的值,而后这个事务因为别的原因回滚了,那这个变量的值会回滚到更改之前的值么?
其实事务只能对它所管理的资源进行提交和回滚,这些资源就是事务源,它通常包括数据库连接资源,JMS队列资源等。
事务的ACID(原子性,一致性,隔离性,持久性)属性也是针对它所管理的资源而言的。前面问题中的一个全局变量,可以说是内存中的一块存储空间,那么内存中的数据如何能具备事务属性中的持久性呢?很显然它不在事务的管辖范围之内,也就不会跟着事务的回滚而回滚了。
二、何时回滚事务
在JDBC事务和EJB的Bean管理事务中,我们通常会按下面这种方式控制事务的回滚。在出现某种的异常情况下,我们可以控制让事务回滚,当然也可以提交这个事务。
Connection cn = 。。。
cn。setAutoCommit(false);
Statement stmt = cn。
createStatement();
try{
stmt。executeUpdate(update Order。。。);
cn。commit();
}catch(Exception e) {
cn。rollback(); //出现异常,回滚当前事务
}finally{
stmt。
close();
cn。close();
}
但是对于EJB的容器管理事务或者Spring的声明式事务,就不大一样了。
- 上一篇: 关于新东方网络课程的几个问题
- 下一篇: 返回列表