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の指示に従った。
キャッシュを無効にすると、問題が解決するように見えますが、パフォーマンスが必要なためにキャッシュを使用しないようにすることはできません。
ご協力いただければ幸いです。 ありがとう
スタックの詳細を表示すると、そのトリガーと呼ばれるものが重要です。あなたはまた、別のスレッドでシングルスレッドリソース(EMとそれから読み込まれたエンティティ)を使用していないことを確認したいでしょう – Chris
こんにちは@Chrisあなたの答えに感謝します。私はいくつかの非フェッチ= "LAZY" OneToManyコレクションを持っていることに気付きました。そのオプションを追加することで、問題の一部が解決されました。私が実現したもう一つのことは、expurion言語を使ったJSPファイルからのクエリーもConcurrencyExceptionをスローすることができるため、クエリーをJavaコントローラークラスに移動し始めたことです。それは事例の99%を解決するようだった。しかし、私はまだ時々間違いがあります。 – vrivon