在Struts 2操作中使用和控制Spring事务

Fed*_*res 5 java spring jpa transactions struts2

嘿伙计们,我已经在一个项目上工作了一段时间,其中包含以下组件:

  • Struts2.1.8.1,
  • Spring 3.0.3
  • JPA 2.0,
  • Hibernate 3

我正在使用Spring的EntityManager魔术......但是我在处理我的动作中的事务时遇到了问题.例如,我在我的类中的几个方法中设置持久化对象的值,并且我希望能够rollbackvalidate方法找到验证错误时,否则commit这些更改.我已经花了很长时间阅读一半的互联网进行全面的解释.不幸的是,没有完整的例子(至少类似于我的堆栈).

我在邮件列表上偶然发现了这个帖子:Struts2 Action中的@Transactional Spring Annotation不起作用.我正在链接的消息似乎有一个非常简单和直接的解决方案,使用一个TransactionInterceptor将要做的技巧似乎...问题是我没有找到关于这个拦截器的有用信息.

这里的任何人都有使用这项技术的经验,并且可以在Struts2操作中如何使用Spring事务来提供一些提示和一两个链接?

谢谢!

- 编辑1 -

如果您有兴趣,我已经设置了一个测试项目,只需下载文件并试用(或检查它).谢谢!

Boz*_*zho 4

一般来说,控制器/操作/支持 bean 等不处理事务。操作是后端代码的 Web 部分 - 它们应该只关心收集请求数据和发送响应数据。逻辑本身(包括数据库访问)应该在另一层完成。例如服务层。因此,您创建另一个 bean,将其注入到操作中,并让它完成工作 - userService.register(user)。那么在服务层上配置事务应该是微不足道的,因为它在 spring 文档和无数示例中都有:

<tx:annotation-driven />(顺便说@Transactional一句,请确保您<tx:..>现在拥有,它可能会导致问题。即使它有效,这也不会使我关于服务层的建议无效)