2
回答
为什么我加了事务控制,Service层发出的Exception在Action层中就没有作用了呢?
注册华为云得mate10,2.9折抢先购!>>>   
我在spring.xml中是这样配置事务控制的,save方法的事务控制是"REQUIRED",其他读取操作是read-only。

<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="save*" propagation="REQUIRED" />
        <tx:method name="*" propagation="REQUIRED" read-only="true" />
    </tx:attributes>
</tx:advice>
<aop:config>
    <aop:pointcut id="transactionPointcut" expression="execution(* rml.service..*Impl.*(..))" />
    <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />
</aop:config>

在Service层中,执行了save方法,我希望不能增加admin,所以user是admin的话就throw异常。
public void save(User user) {
    if(!("admin".equals(user.getName()))){
        this.saveUserRole(user);
    }else{
        throw new RuntimeException("can not add admin");
    }
}

在Action层中,如果user是admin,save方法会throw异常,就会被catch到,然后返回带有“add unsuccessfully”的JSON对象。
public void add() {
    Json j = new Json();
    try {
        userService.save(user);
        j.setMsg("Add successfully");
    } catch (Exception e) {
        j.setMsg("Add unsuccessfully");
    }
    super.writeJson(j);
}

以前我不加事务控制,执行是正常的,但是加上了事务控制,RuntimeException("can not add admin")是抛出了,但是在Action层异常没有被catch,返回的信息还是"Add successfully",请问这是怎么一回事?
举报
文心雕码
发帖于4年前 2回/369阅
顶部