EJBException
s触发当前JTA事务的回滚,无论您是否捕获它们。对的呼叫
ProductsFacade#edit()
启动一个事务(除非一个事务被传播到它,这里似乎不是这样),因为它是对SessionBean的“外部”调用。如果您不希望事务在这些场景中回滚,那么在给出损坏的消息之前,您必须以某种方式验证用户/客户端输入
Entity
到
EntityManager
。
为了避免这种情况,这里有几个怪癖和需要做的事情。例如,您可以
ProductsFacade
处理事务:
@TransactionManagement(TransactionManagementType.BEAN)
但是,这将剥夺使用EJB的大部分意义。我确实认为这种默认行为是应该的。如果你不想在日志中进行回滚,你可以配置日志级别等-但我确实认为EJB分层事务回滚属于日志,它在开发过程中肯定会这样做。