离开Spring事务上下文时,即使处理了异常,也不会返回结果

时间:2016-06-16 07:14:58

标签: java spring spring-transactions

假设我们有以下情况:

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。问题为什么仍然存在。

0 个答案:

没有答案