【发布时间】:2012-10-12 13:19:27
【问题描述】:
春季 2.5,休眠。
我们的应用程序架构为具有服务层和管理器层。服务层提供所有只读服务并将结果传达给 UI。对于需要更改数据库的服务,服务层执行所有初始只读功能,然后调用管理器层。
我们围绕我们的管理层设置了一个事务建议,以捕获来自管理层的所有异常并回滚这些事务。这在大多数情况下都非常有效。
问题在于我们让一位经理调用另一位经理来执行某些功能的情况。此功能会引发异常,这是从 UI 调用时真正的异常,但在客户端管理器内部处理并返回成功结果。事务管理器看到抛出了异常并回滚事务,即使异常已成功处理。
这是导致我们悲伤的交易属性。
<tx:method name="*" propagation="REQUIRED" rollback-for="Throwable" no-rollback-for="OverridableException"/>
有没有办法可以指定深度?我想说的是,只回滚最高管理者层调用中的异常,而不是对同一事务的后续调用中的异常。
谢谢!
【问题讨论】: