Jpa 是否需要在没有事务的情况下执行新的带注释的方法?

Jpa 是否需要在没有事务的情况下执行新的带注释的方法?,jpa,ejb-3.0,jta,jboss-mdb,Jpa,Ejb 3.0,Jta,Jboss Mdb,我有一个无状态bean,负责将实体持久化到数据库。这个无状态bean由消息bean的onMessage方法调用。有线的事情是,在第一条消息上,一切正常,但在下一条消息上,负责持久化的方法在事务外部被调用,即使该方法被注释为REQUIRES_NEW @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public StateChange persistChange(long deviceId, ...) { ...

我有一个无状态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;
}
调用刷新会触发以下异常:

原因:javax.persistence.TransactionRequiredException:没有正在进行的事务


有什么想法吗?我是JTA的新手,所以我可能错过了一些重要的事情

我尝试了很多方法来解决这个问题,大约16个小时后,它似乎开始工作了。我不确定到底是什么造成的,但可能是升级到Glassfish 2.1

终于可以晚上再睡觉了