我有一个无状态bean resposible用于将实体持久化到数据库。这个无状态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很新,所以我可能错过了一些重要的东西?
答案 0 :(得分:0)
我尝试了很多来解决它,大约16个小时左右后,它似乎正在起作用。我不确定究竟是什么技巧,但它可能是对Glassfish 2.1的升级。
终于能够再次入睡!