Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EclipseLink分布式缓存导致主键为空,什么?_Java_Jakarta Ee_Caching_Jpa_Eclipselink - Fatal编程技术网

Java EclipseLink分布式缓存导致主键为空,什么?

Java EclipseLink分布式缓存导致主键为空,什么?,java,jakarta-ee,caching,jpa,eclipselink,Java,Jakarta Ee,Caching,Jpa,Eclipselink,好的,这会很长,这是tl;dr:当启用分布式缓存协调时,其中一个应用程序的完整性开始缓慢下降,并引发一个非常奇怪的异常。“修复”是禁用缓存。真糟糕。请帮助我们在EclipseLink中找到问题,以便我们可以修补它 日食2.5.1 我们有以下实体: @映射超类 可识别的公共抽象类实现可序列化{ 私有静态最终长serialVersionUID=1L; @身份证 @列(name=“id”,nullable=false,updateable=false) @GeneratedValue(策略=Gene

好的,这会很长,这是
tl;dr
:当启用分布式缓存协调时,其中一个应用程序的完整性开始缓慢下降,并引发一个非常奇怪的异常。“修复”是禁用缓存。真糟糕。请帮助我们在EclipseLink中找到问题,以便我们可以修补它

日食2.5.1

我们有以下实体:


@映射超类
可识别的公共抽象类实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@列(name=“id”,nullable=false,updateable=false)
@GeneratedValue(策略=GenerationType.IDENTITY)
公共整数id;
@版本
@列(name=“meta\u版本”)
私有整数版本;
}


@实体
@表(name=“customers”,Index={@Index(columnList=“phone\u number”),@Index(columnList=“email\u address”)}
@可缓存
公共类客户扩展{
私有静态最终长serialVersionUID=1L;
@列(name=“last_name”)
公共字符串lastName;
@列(name=“first_name”)
公共字符串名;
....
}


@实体
@表(name=“notes”,Index={@Index(columnList=“customer\u id,is\u cleared”)})
@可缓存
公开课笔记{
私有静态最终长serialVersionUID=1L;
@许多酮
@JoinColumn(name=“客户id”)
公众客户;
@许多酮
@JoinColumn(name=“agent\u id”)
公共代理;
@尺寸(最小值=1,最大值=32767)
@列(name=“text”,长度=32767)
公共字符串文本;
@列(name=“已清除”)
公共布尔值被清除;
}


一定是一只虫子埋在日食的深处。。。禁用另一个优化修复了该问题:

 <property
         name="eclipselink.weaving.internal"
         value="false" />


糟糕。

默认情况下,Eclipselink会进行分布式更新。尝试@Cache(coordinationType=CacheCoordinationType.INVALIDATE_CHANGED_OBJECTS)取而代之

尝试缩小问题范围的两件事是将ID从mappedSupperClass移动到实体,并检查是否在持久化单元之间共享实体。一些内部编织优化可能会干扰这两个持久性单元——特别是检查如何读入有问题的客户实例。明白了。我们刚刚删除了@MappedSuperclass,并将所有代码复制到实体中。我们每个应用程序只有一个持久性单元。同一个jar在不同JVM中的多个应用程序中使用。让它运行一天,看看它是否会腐蚀自己,这仍然是个问题。我们正在恢复更改。。。但是谢谢。我们意识到,虽然eclipselink默认情况下会“更新对象”,所以我们将
@Cache(coordinationType=CacheCoordinationType.INVALIDATE\u CHANGED\u objects)
添加到所有内容中,并运行它。这是一个怎样的答案?这解决了问题吗?因为对我来说,添加此coordinationType=CacheCoordinationType.INVALIDATE_CHANGED_对象后,同样的错误开始出现
[http-apr-8080-exec-1] ERROR c.mycompany.notes.restapi.RestExceptionMapper - toResponse() unexpected exception
javax.transaction.RollbackException: Unable to commit: transaction marked for rollback
at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:272) ~[geronimo-transaction-3.1.1.jar:3.1.1]
at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:252) ~[geronimo-transaction-3.1.1.jar:3.1.1]
at org.apache.openejb.core.transaction.JtaTransactionPolicy.completeTransaction(JtaTransactionPolicy.java:328) ~[openejb-core-4.6.0.1.jar:4.6.0.1]
at org.apache.openejb.core.transaction.TxRequired.commit(TxRequired.java:75) ~[openejb-core-4.6.0.1.jar:4.6.0.1]
at org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke(EjbTransactionUtil.java:76) ~[openejb-core-4.6.0.1.jar:4.6.0.1]
at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:231) ~[openejb-core-4.6.0.1.jar:4.6.0.1]
at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:181) ~[openejb-core-4.6.0.1.jar:4.6.0.1]
at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:268) ~[openejb-core-4.6.0.1.jar:4.6.0.1]
at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:263) ~[openejb-core-4.6.0.1.jar:4.6.0.1]
at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:86) ~[openejb-core-4.6.0.1.jar:4.6.0.1]
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:303) ~[openejb-core-4.6.0.1.jar:4.6.0.1]
at com.sun.proxy.$Proxy108.getNotes(Unknown Source) ~[na:na]
at com.mycompany.notes.restapi.NoteTakerController.getNotes(NoteTakerController.java:68) ~[NoteTakerController.class:na]
at com.mycompany.notes.restapi.NoteTakerController$$OwbNormalScopeProxy0.getNotes(com/mycompany/notes/restapi/NoteTakerController.java) ~[na:na]
at sun.reflect.GeneratedMethodAccessor70.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_60]
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_60]
at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180) ~[cxf-api-2.6.9.jar:2.6.9]
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) ~[cxf-api-2.6.9.jar:2.6.9]
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:165) [cxf-rt-frontend-jaxrs-2.6.9.jar:2.6.9]
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:89) [cxf-rt-frontend-jaxrs-2.6.9.jar:2.6.9]
at org.apache.openejb.server.cxf.rs.AutoJAXRSInvoker.invoke(AutoJAXRSInvoker.java:66) [openejb-cxf-rs-4.6.0.1.jar:4.6.0.1]
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:57) [cxf-api-2.6.9.jar:2.6.9]
at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:93) [cxf-api-2.6.9.jar:2.6.9]
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262) [cxf-api-2.6.9.jar:2.6.9]
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) [cxf-api-2.6.9.jar:2.6.9]
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:237) [cxf-rt-transports-http-2.6.9.jar:2.6.9]
at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.onMessage(CxfRsHttpListener.java:170) [openejb-cxf-rs-4.6.0.1.jar:4.6.0.1]
at org.apache.openejb.server.rest.RsServlet.service(RsServlet.java:53) [openejb-rest-4.6.0.1.jar:4.6.0.1]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) [servlet-api.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [catalina.jar:7.0.53]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.53]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat7-websocket.jar:7.0.53]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.53]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.53]
at com.mycompany.notes.restapi.security.HMACSecurityFilter.doFilter(HMACSecurityFilter.java:79) [HMACSecurityFilter.class:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.53]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.53]
at com.mycompany.cdi.RequestBufferingFilter.doFilter(RequestBufferingFilter.java:50) [java-common-1.0.10.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.53]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.53]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [catalina.jar:7.0.53]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [catalina.jar:7.0.53]
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45) [tomee-catalina-1.6.0.1.jar:1.6.0.1]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) [catalina.jar:7.0.53]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) [catalina.jar:7.0.53]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) [catalina.jar:7.0.53]
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) [catalina.jar:7.0.53]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [catalina.jar:7.0.53]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) [catalina.jar:7.0.53]
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) [tomcat-coyote.jar:7.0.53]
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) [tomcat-coyote.jar:7.0.53]
at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:2378) [tomcat-coyote.jar:7.0.53]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_60]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_60]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_60]
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-7197] (Eclipse Persistence Services - 2.5.2.v20131113-a7346c6): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Null or zero primary key encountered in unit of work clone [Customer[agent=Agent[agentName=Api User,id=1,version=1],address=Address[streetAddress=somewhere road,city=KANSAS CITY,zipcode=66210,state=State[postalAbbreviation=KS,id=38,version=1],id=298219,version=1],leadStatus=LeadStatus[name=New,id=1,version=1],leadSource=LeadSource[name=IRMS,id=9,version=1],project=Project[campaignName=Outbound59734,id=2,version=1],version=7]], primary key [null]. Set descriptors IdValidation or the "eclipselink.id-validation" property.
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl$1.handleException(EntityManagerSetupImpl.java:696) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
at org.eclipse.persistence.transaction.AbstractSynchronizationListener.handleException(AbstractSynchronizationListener.java:275) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:170) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
at org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion(JTASynchronizationListener.java:68) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
at org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:527) ~[geronimo-transaction-3.1.1.jar:3.1.1]
at org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:511) ~[geronimo-transaction-3.1.1.jar:3.1.1]
at org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:413) ~[geronimo-transaction-3.1.1.jar:3.1.1]
at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:262) ~[geronimo-transaction-3.1.1.jar:3.1.1]
... 55 common frames omitted
Caused by: org.eclipse.persistence.exceptions.ValidationException: 
Exception Description: Null or zero primary key encountered in unit of work clone [Customer[agent=Agent[agentName=Api User,id=1,version=1],address=Address[streetAddress=somewhere road,city=KANSAS CITY,zipcode=66210,state=State[postalAbbreviation=KS,id=38,version=1],id=298219,version=1],leadStatus=LeadStatus[name=New,id=1,version=1],leadSource=LeadSource[name=IRMS,id=9,version=1],project=Project[campaignName=Outbound59734,id=2,version=1],version=7]], primary key [null]. Set descriptors IdValidation or the "eclipselink.id-validation" property.
at org.eclipse.persistence.exceptions.ValidationException.nullPrimaryKeyInUnitOfWorkClone(ValidationException.java:1469) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
at org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.calculateChanges(DeferredChangeDetectionPolicy.java:109) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
at org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.calculateChangesForExistingObject(DeferredChangeDetectionPolicy.java:56) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(UnitOfWorkImpl.java:664) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1516) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.issueSQLbeforeCompletion(UnitOfWorkImpl.java:3168) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.issueSQLbeforeCompletion(RepeatableWriteUnitOfWork.java:352) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:158) ~[eclipselink-2.5.2-M1.jar:2.5.2.v20131113-a7346c6]
... 60 common frames omitted
 <property
         name="eclipselink.weaving.internal"
         value="false" />