エンティティをデータベースに永続化するためのステートレス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にかなり慣れていないので、何か重要なことを見逃した可能性がありますか?