NutzCN Logo
问答 如何判断Trans是否执行成功
发布于 2027天前 作者 文涛(wentao) 1887 次浏览 复制 上一个帖子 下一个帖子
标签:

因为Trans.exec是自己捕获了异常的,不知道怎么判断是否执行成功,我按自己的理解写了一个不知道是否合适,代码如下

boolean isOk = false;
isOk = Trans.exec(new Molecule<Boolean>() {
    @Override
    public void run() {
        userService.insert(user);
        productService.insert(product);
        orderService.insert(order);
        ...
        setObj(true);
    }
});
return isOk;

以上应该是在执行成功后会返回true,但如果在orderService.insert语句异常回滚后,setObj是不是就不会执行,那么如何得到isOk = false;呢

4 回复

Trans.exec仅在run抛出异常进行回滚,你catch了异常不抛出来,就不会有回滚操作

run方法内产生了多少异常(任何类型)都没有区别,Trans.exec只认run抛出的异常

run抛出异常,回滚
run不抛出异常,commit

所以我是不是应该这样

boolean isOk = Trans.exec(new Molecule<Boolean>() {
    @Override
    public void run() {
        try {
            userService.insert(user);
            productService.insert(product);
            orderService.insert(order);
            ...
        setObj(true);
        } catch (Exception e) {
            setObj = false;
            throw e;
        }
    }
});
return isOk;

纠正

boolean isOk = Trans.exec(new Molecule<Boolean>() {
    @Override
    public void run() {
        try {
            userService.insert(user);
            productService.insert(product);
            orderService.insert(order);
            ...
        setObj(true);
        } catch (Exception e) {
            setObj(false);
            throw e;
        }
    }
});
return isOk;
try {
     Trans.exec...;
     return true;
}
catch (Throwable e) {
     return false;
}

添加回复
请先登陆
回到顶部