我正在努力解决容器管理事务的自动回滚问题。我知道当抛出异常时,这应该自动发生,但不知何故,这没有发生。
需要明确的是,我有一个 JAX-RS ContainerResponseFilter
,它会抛出某种 RuntimeException (顺便说一句,我不能抛出已检查的异常,因为这意味着我需要指定“抛出”,这是无法在实现方法上完成的)。
当我自己调用 sessionContext.setRollbackOnly()
时,事务确实回滚了,但我真的不想自己处理它。
我尝试将异常标记为 @ApplicationException(rollback=true)
但这没有什么区别。
有什么想法吗? 这是在 JBOSS 7.2 上使用 RestEasy。
最佳答案
我无法确认这是预期的行为,但 ContainerReponseFilter
内的任何手动回滚都为时已晚,因为事务已提交。
为了解决这个问题,我重新设计了我的解决方案,使用 @AroundInvoke
从 Ìntegercepter
中抛出异常。这似乎及时进行了自动回滚,并且允许我避免在 ContainerResponseFilter 中抛出进一步的异常。
关于java - jax-rs ResponseFilter 中抛出的异常不会导致回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61224547/