java - EclipseLink - 并发异常 - signalAttemptedBeforeWait

标签 java tomcat transactions eclipselink

我们一直在开发一个通过连接池使用 Tomcat 8 的应用程序。我们通过@Version 字段控制 Optimistic 异常,我们通过 ThreadLocal 隔离的 Entitymanagers 控制事务。

但是,应用程序有时会触发并发异常并挂起其他进程并需要重新启动服务器。

异常总是这样:

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 中的说明进行操作.

禁用缓存似乎可以解决问题,但由于性能需要,我们不能不使用缓存。

如有任何帮助,我们将不胜感激。 谢谢

最佳答案

终于,经过六个月的头痛,我终于解决了这个问题。

一般错误是 EclipseLink-2004。如果检查 Eclipselink 错误引用: Eclipse link error reference page ,它显示“验证应用程序中的交易”。

我一直在使用应用程序管理的实体管理器。为了控制事务是单线程的,我使用了这个 ManagerHelper 类:

EntityManagerHelper

问题是我将托管对象放在 Session 属性中。里面的流程我不是很懂,但是如果用它来查询,不知怎么的,它在主事务之外创建了新的事务。将对象移动到 Request 属性解决了这个问题。

我希望这对以后的人有所帮助。

最好的问候

关于java - EclipseLink - 并发异常 - signalAttemptedBeforeWait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40964893/

相关文章:

java - PDI 勺子步骤中的 HTML 抓取(用户定义的 java 类)

java - 如何将 Multiple 数组转换为 Json 数组并将 Json 添加到 hashmap

java - 如何对 StepVerifier 中的所有剩余元素执行断言?

tomcat - 如何从 "ServletContext.log("Hello World !")"获取日志消息?

linux - Windows KTM 和 Transactional NTFS 是否有 Linux/Unix 等效项?

java - 在 JBoss + Hibernate 中防止事务回滚

java - Spring安全客户端PKCE与Keycloak

eclipse - 有没有办法从 Eclipse 启动/停止/重启 REMOTE Tomcat 服务器?

Apache 服务器 : no listening sockets available

sql-server - 使用 SP_ExecuteSQL 时事务中断