首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

transaction begin,commit, rollback的有关问题

2012-03-17 
transaction begin,commit, rollback的问题有两个类A和B,B是已经实现好的,现在的逻辑是这样的Java codeA.m

transaction begin,commit, rollback的问题
有两个类A和B,B是已经实现好的,现在的逻辑是这样的

Java code
A.method1(){  beginTransaction();  try{      //business      B.business();      commitTransaction();  }catch(Exception e){   rollback();  }}

结果发现B.business()里面也有类似的逻辑(beginTransaction,commitTransaction)
这样上面的代码就有错误,因为逻辑上就变为
begin
  begin
  commit
commit

把代码改为
Java code
A.method1(){  beginTransaction();  try{      //business      commitTransaction();      B.business();//放到commit下面  }catch(Exception e){   rollback();  }}

编译上是没有问题,但是在catch里面,rollback的时候是rollback了哪个transaction呢?能保证出错后A和B所作的操作都rollback吗?

[解决办法]
到群里来吧!你这问题不好解决,

建议你干脆就不要使用外面的事务了,比如
A.method1(){
 B.business();
}

这样不就行了,你何必再自己封装一个呢!?

[解决办法]
因为事务不能直接嵌套

如果在catch里回滚的话,应该是回滚try块里的

如果想A和B同时回滚的话用一个事务套住A和B的操作,应该可以o(∩_∩)o...


[解决办法]
事务嵌套了吧

里面事务不依赖于外面的 就不会rollback
[解决办法]
个人觉得那个transaction有异常就rollback那个transaction.

=================================

哇这里的人除了星星,就是星星的马甲
[解决办法]
SomeManager.business(){
try{
A.method(){...}//这里有自己的begin, commit, 没有rollback
}catch(Exception e){
rollback();
throw e; //A出错,B就不会被执行到
}


B.method(){...}//有rollback
}
还是有问题
如果B有错误回滚了,但是A的操作已经commit了
[解决办法]
如果A.method1除了调用B.business方法外,再没有其他的业务逻辑,干脆不使用外面的事务

就这样
A.method1(){ 
B.business(); 

热点排行