spring 3.2
mysql InnoDB引擎
cxf 2.7
一开始是这么写的,如下所示,当通过soapUI调用saveOrder方法后,运行到Bservice.inser(obj);报错,
但是Aservice.inser(obj);插入的数据并没有回滚掉
@WebService(serviceName = "orderService", portName = "orderServicePort", targetNamespace = "orderService.XXX") @Service("orderServiceImplBean") public class ApiOrderServiceImpl implements ApiOrderService { @WebResult(name = "apiSaveOrderDTO") @Transactional //加了声明事务的注解也不行 public ApiResSaveOrderDTO saveOrder(){ Aservice.inser(obj); //1,普通service 方法,声明的时候也加了@Transactional注解 Bservice.inser(obj); //2,普通service 方法,声明的时候也加了@Transactional注解,出错了 } }
后来我将上面的代码做了如下的调整,
@WebService(serviceName = "orderService", portName = "orderServicePort", targetNamespace = "orderService.XXX") @Service("orderServiceImplBean") public class ApiOrderServiceImpl implements ApiOrderService { @WebResult(name = "apiSaveOrderDTO") //去掉了事务的注解 public ApiResSaveOrderDTO saveOrder(){ Cservice.inser(obj); //1,普通service 方法,声明的时候也加了@Transactional注解 } }
Cservice类的insert方法,将Aservice和Bservice的insert抽取到了里边
@Transactional Cservice.inser(obj){ Aservice.inser(obj); //普通service 方法,声明的时候也加了@Transactional注解 Bservice.inser(obj);//普通service 方法,声明的时候也加了@Transactional注解 }
请问为啥先前直接在webservice里写的调用两个service的方法不会回滚,而抽取到一个service中就可以回滚呢?
你得去研究这两个方法的事务,而不是去研究webservice回复<aclass='referer'target='_blank'>@martintree:没玩过,哎!但是大体的上网看了一下@Transactional的用法,觉得好像你这边是存在问题的,具体的你去看一下呢http://my.oschina.net/guanzhenxing/blog/214228直接看这个博客把,看完你估计就知道是为啥了现象是在webservice方法里边调用加了@Transactional的service方法就是不行,而如果普通的service方法里边调用都可以回滚先看自己的事务配置检查一下是否有事务嵌套<divclass='ref'>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。