【问题标题】:How to send the exception message when a transaction is rolled back in spring?spring 事务回滚时如何发送异常消息?
【发布时间】:2012-11-05 11:38:47
【问题描述】:

我有一个 Spring Web 服务,其中我有一个带有一个方法 add() 的 DAO,该方法用 @Transactional 进行注释,如下所示:

class MyDAOClass {

    @Transactional(rollbackFor = Exception.class)
    add(){
        doAdd1();
        doAdd2();
        doAdd3();
    }

    ...

    doAdd2() throws MyException {
        throw new MyException ("My Exception Message");
    }

    ...

}

服务层:

现在当我调用 webservice 时,服务层内部调用了这个类的 add() 方法。服务层捕获 MyException e 并获取消息并将响应对象放入编组并发送回客户端。但是,当 doAdd2() 方法抛出异常时,事务被回滚,而不是 "My Exception Message" ,我在客户端收到以下错误消息:

<SOAP-ENV:Body>
  <SOAP-ENV:Fault>
     <faultcode>SOAP-ENV:Server</faultcode>
     <faultstring xml:lang="en">Transaction rolled back because it has been marked as rollback-only</faultstring>
  </SOAP-ENV:Fault>

【问题讨论】:

  • 我认为一个好的设计是让service方法应该是事务性的,而不是dao方法
  • @SubinS 如果我必须在 add() 之后执行一些其他方法,即使 add() 回滚也应该执行,如果我对服务方法使用事务性,这可能吗?
  • 在这种情况下,让它们成为单独的服务方法

标签: java web-services spring jakarta-ee transactions


【解决方案1】:

没关系。我发现了这个问题。我的服务类也用@Transactional 注释。删除此注释后问题解决。我只是为那些可能想知道为什么会收到此消息的人保留它。

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2013-10-16
    • 2019-03-06
    • 1970-01-01
    相关资源
    最近更新 更多