2016-12-04 10 views
0

Tomcat 8 throught接続プールを使用するアプリケーションで作業しています。 @Versionフィールドでオプティミスティック例外を制御し、ThreadLocalで隔離されたEntitymanagersとのトランザクションを制御します。EclipseLink - ConcurrencyException - signalAttemptedBeforeWait

ただし、アプリケーションでは並行処理の例外が発生し、他のプロセスやリクエスタがハングしてサーバーを再起動することがあります。

例外は次のように常にある:

Caused by: Exception [EclipseLink-2004] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): 
org.eclipse.persistence.exceptions.ConcurrencyException 
Exception Description: A signal was attempted before wait() on ConcurrencyManager. This normally means that an attempt was made to commit or rollback a transaction before it was started, or to rollback a transaction twice. 
at org.eclipse.persistence.exceptions.ConcurrencyException.signalAttemptedBeforeWait(ConcurrencyException.java:84) 
at org.eclipse.persistence.internal.helper.ConcurrencyManager.releaseReadLock(ConcurrencyManager.java:468) 
at org.eclipse.persistence.internal.identitymaps.CacheKey.releaseReadLock(CacheKey.java:475) 

私たちは、この問題を解決するため、あるいは全く結果と、このエラーに関する特定の情報を検索しようとしてきました。我々はさらにhttps://wiki.eclipse.org/EclipseLink/FAQ/JPA#How_to_diagnose_and_resolve_hangs_and_deadlocks.3Fの指示に従った。

キャッシュを無効にすると、問題が解決するように見えますが、パフォーマンスが必要なためにキャッシュを使用しないようにすることはできません。

ご協力いただければ幸いです。 ありがとう

+0

スタックの詳細を表示すると、そのトリガーと呼ばれるものが重要です。あなたはまた、別のスレッドでシングルスレッドリソース(EMとそれから読み込まれたエンティティ)を使用していないことを確認したいでしょう – Chris

+0

こんにちは@Chrisあなたの答えに感謝します。私はいくつかの非フェッチ= "LAZY" OneToManyコレクションを持っていることに気付きました。そのオプションを追加することで、問題の一部が解決されました。私が実現したもう一つのことは、expurion言語を使ったJSPファイルからのクエリーもConcurrencyExceptionをスローすることができるため、クエリーをJavaコントローラークラスに移動し始めたことです。それは事例の99%を解決するようだった。しかし、私はまだ時々間違いがあります。 – vrivon

答えて

0

最後に、6ヶ月の頭痛の後、私は問題を解決することができました。

一般的なエラーはでした.EclipseLink-2004です。 Eclipselinkのエラー参照: Eclipse link error reference pageを確認すると、「アプリケーションのトランザクションを確認する」と表示されます。

私はアプリケーション管理エンティティマネージャを使用しています。トランザクションは、シングルスレッドであったことを制御するには、私はこのManagerHelperクラスを使用:

EntityManagerHelper

問題は、私はセッション属性内の管理対象オブジェクトを入れていたということでした。私は内部のプロセスを実際には理解していませんが、クエリに使用された場合、何らかの形でメイントランザクション外で新しいトランザクションを作成しました。オブジェクトを要求に移動すると、問題が解決しました。

私はこれが将来誰かに役立つことを願っています。

お礼