开发者社区> 问答> 正文

webservice 方法中调用的service 方法不会回滚?报错

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注解

}



这个时候当代码执行到 Bservice. insert(obj)方法出错后,Aservice.inser(obj)产生的数据就会回滚掉。

请问为啥先前直接在webservice里写的调用两个service的方法不会回滚,而抽取到一个service中就可以回滚呢?

展开
收起
爱吃鱼的程序员 2020-06-12 15:41:24 818 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你得去研究这两个方法的事务,而不是去研究webservice回复<aclass='referer'target='_blank'>@martintree:没玩过,哎!但是大体的上网看了一下@Transactional的用法,觉得好像你这边是存在问题的,具体的你去看一下呢http://my.oschina.net/guanzhenxing/blog/214228直接看这个博客把,看完你估计就知道是为啥了现象是在webservice方法里边调用加了@Transactional的service方法就是不行,而如果普通的service方法里边调用都可以回滚先看自己的事务配置检查一下是否有事务嵌套<divclass='ref'>

    引用来自“斯武丶风晴”的评论

    检查一下是否有事务嵌套

    2020-06-12 15:41:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《基于 Service Worker 实现在线代理》 立即下载
开源广进-用Service Catalog构造K8S服务能力 立即下载
Data as a Service - 数据即服务 立即下载