我有一个无状态 bean 负责将实体持久化到数据库中。这个无状态 bean 由消息 bean 的 onMessage 方法调用。连线的事情是,在第一条消息上一切正常,但在下一条消息上,负责持久化的方法在事务外部调用,即使该方法使用 REQUIRES_NEW 注释。
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public StateChange persistChange(long deviceId, ...) {
...
StateChange change = new StateChange(...);
em.persist(change);
em.refresh(change); // To provoke the error
return change;
}
调用 refresh 会触发以下异常:
引起:javax.persistence.TransactionRequiredException:没有事务正在进行
有任何想法吗?我对 JTA 还很陌生,所以我可能错过了一些重要的事情?