0

私たちのアプリケーションは、Guice-PersistとGuice-Servletを広範囲に使用するJava-GWTアプリケーションです。Warp-persistが最初に使用したものと同様のGuice-Persistのsession-per-HTTPRequest機能の使用で問題が発生したことはありません。

ドキュメントに従って、PersistFilterクラスを介してWebアプリをフィルタリングしています。ここのGuiceドキュメントによると、persistence.xmlファイルにはtransaction-type="RESOURCE_LOCAL"があります。

奇妙な理由で、PROD環境にエラーが表示されています

「このスレッドでの作業はすでに開始されています。その間にend()をバランスよく呼び出すことなく、UnitOfWork.begin()を2回呼び出したようです。」

ここに画像の説明を入力してください

ネストされた作業単位がGuice-Persistでサポートされていないという問題があるようです。リンク

また、最近、休止状態の3.6.3.Finalから4.1.4.Finalに移行しました。彼がguiceと何らかの非互換性を持っているかどうかはわかりません...

この時点で、なぜこれが起こるのかについて、私たちは完全に暗闇の中にいます。

4

2 に答える 2

3

@Transactionアノテーションを最も外側の論理トランザクション中括弧に追加するのを忘れたため、トランザクションがHibernateによって暗黙的に開かれたときにその症状が発生していました。

問題を特定するには、データベースレイヤー、begin()、end()にブレークポイントを設定して、既存のトランザクションなしで永続性(読み取りまたは書き込みは関係ありません)が発生するケースを特定します。

于 2012-06-12T17:57:30.847 に答える
1

これは、GoogleのGuiceWebサイトで報告されています。

問題597:永続的な拡張:UnitOfWork.begin()は、複数回呼び出されるとIllegalStateExceptionをスローします

于 2012-09-28T11:10:02.060 に答える