1

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

4

1 に答える 1

0

私はそれを解決するために多くのことを試みました、そして約16時間かそこら後にそれは働いているようです。何がうまくいったのか正確にはわかりませんが、Glassfish2.1へのアップグレードである可能性があります。

ついに夜も眠れるようになりました!

于 2009-03-23T20:56:20.073 に答える