假设我们有以下情况:
public class Caller {
@Autowired EntryService service;
// will return JSON
@Action
public Result getResut() {
Result result = service.doStuff(a);
// return statement is not reachable in case of exc
return result;
}
}
@Service
@Transactional
public class EntryService {
@Autowired Handler handler;
public Result doStuff(Args a) {
try {
return handler.handle(a);
}
catch(Exception e) {
return Result.errorEntry();
}
}
}
@Service
@Transactional
public class Handler {
public Result handle(Arg a) {
// some stuff
return result
}
}
我有一个奇怪的问题:当处理程序发生异常时,tx被标记为仅回滚,并且在entrySrervice中处理异常 - 应该返回表示处理错误的结果,但它不是!
DoStuff调用者(非tx),它的struts动作,没有收到错误结果,实际上它是完全跳过的,并且在doStuff返回错误结果后调用者根本没有被调用。
我错过了什么?
是不是这样,当我离开spring tx context并且tx被标记为roll-back return子句被丢弃了?
更新 添加了来电者课程。 该问题的解决方法是将REQUIRES_NEW传播应用于Handler。问题为什么仍然存在。