【问题标题】:How to use transaction advisors with annotations?如何使用带有注释的事务顾问?
【发布时间】:2010-11-28 01:30:47
【问题描述】:

假设我有以下示例:

@Transactional(propagation=Propagation.SUPPORTS, readOnly=true)
public class MyServiceImpl implements MyService {

    ...

    @Transactional(propagation=Propagation.REQUIRED, readOnly=false)
    public TransactionResponse addMyEntity(MyEntity e) throws SQLException{
        ...
    }

    ...
}

在我的应用上下文中:

<tx:annotation-driven transaction-manager="txManager" />

好的,现在如果抛出 SQLException,我想在事务回滚后添加一个拦截器。我该怎么做?

提前致谢

编辑

我将尝试澄清我正在尝试做的事情:

我有一个 WS,它将一些信息保存在数据库中并返回响应(如果出现问题,则返回一个 isOk 布尔值和一个 errorMessage)

每当出现异常时,我需要:

  • 回滚交易
  • 使用错误消息构建响应并将其返回给客户端。

这就像 Spring 的事务代理的 try/catch

【问题讨论】:

  • 我已经解决了向 WS 端点添加 try/catch 的问题。我忘记了在我的服务之上还有一层。端点不在事务中,所以我可以(现在我知道我必须)管理端点中的响应。不过我想知道是否有办法做我以前想做的事情。
  • 你能说明你是如何定义你的附加方面的吗? (xml和java代码)

标签: spring interceptor transactionmanager


【解决方案1】:

使用tx:annotation-driven 的order 属性,以及您将使用的拦截器。因此,您可以指定哪个在另一个之前运行。请参阅AOP AspectJ advice ordering 部分

【讨论】:

  • 感谢@Bozho,但我不明白如何定义连接点来做我需要做的事情。请阅读编辑更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2013-09-22
相关资源
最近更新 更多