0

在 Glassfish 上使用带有内置 DataCache 的 openjpa 1.2.0,启用查询缓存并固定一些命名的 queires,我们看到以下异常:org.apache.openjpa.persistence.PersistenceException: java.lang.String cannot be cast to org. apache.openjpa.datacache.QueryKey

有人有什么想法吗?

完整异常转储:[#|2011-05-01T11:43:05.728-0500|WARNING|sun-appserver9.1|javax.enterprise.system.core.transaction|_ThreadID=30;_ThreadName=httpSSLWorkerThread-20393-0;_RequestID =3ce3425f-cd4b-42b9-a305-570c5745add7;|JTS5054: 完成 org.apache.openjpa.persistence.PersistenceException 后发生意外错误:java.lang.Object 无法在 org.apache.openjpa.datacache.QueryKey 中强制转换.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1870) 在 com.sun.jts.jta.SynchronizationImpl.after_completion(SynchronizationImpl.java:154) 在 com.sun.jts.CosTransactions.RegisteredSyncs.distributeAfter(RegisteredSyncs .java:210) 在 com.sun.jts.CosTransactions.TopCoordinator.afterCompletion(TopCoordinator.java:2585) 在 com.sun.jts.CosTransactions.CoordinatorTerm.commit(CoordinatorTerm.java:433) 在 com.sun.jts.CosTransactions.TerminatorImpl.commit(TerminatorImpl.java:249) 在 com.sun.jts.CosTransactions.CurrentImpl.commit(CurrentImpl.java:623) 在 com.sun.jts.jta.TransactionManagerImpl .commit(TransactionManagerImpl.java:309) 在 com.sun.enterprise.distributedtx.J2EETransactionManagerImpl.commit(J2EETransactionManagerImpl.java:1030) 在 com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.commit(J2EETransactionManagerOpt.java:397) 在 com。 sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3792) 在 com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3571) 在 com.sun.ejb.containers.WebServiceInvocationHandler.invoke(WebServiceInvocationHandler. java:200) 在 sun.reflect 的 $Proxy973.transfer(Unknown Source)。NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method. java:597) 在 com.sun.enterprise.webservice.InvokerImpl.invoke(InvokerImpl.java:81) 在 com.sun.enterprise.webservice.EjbInvokerImpl.invoke(EjbInvokerImpl.java:82) 在 com.sun.xml.ws .server.InvokerTube$2.invoke(InvokerTube.java:146) 在 com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257) 在 com.sun.xml.ws.server.sei。 SEIInvokerTube.processRequest(SEIInvokerTube.java:93) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595) 在 com.sun.xml.ws.api.pipe.Fiber。在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java: 25) 的 invoke0(Native Method)第597章) .InvokerTube$2.invoke(InvokerTube.java:146) 在 com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257) 在 com.sun.xml.ws.server.sei.SEIInvokerTube。 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595) 在 com.sun.xml.ws.api.pipe.Fiber 的 processRequest(SEIInvokerTube.java:93)。在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java: 25) 的 invoke0(Native Method)第597章) .InvokerTube$2.invoke(InvokerTube.java:146) 在 com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257) 在 com.sun.xml.ws.server.sei.SEIInvokerTube。 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595) 在 com.sun.xml.ws.api.pipe.Fiber 的 processRequest(SEIInvokerTube.java:93)。在 com.sun.enterprise.webservice.InvokerImpl 在 java.lang.reflect.Method.invoke(Method.java:597) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 调用(NativeMethodAccessorImpl.java:39) .invoke(InvokerImpl.java:81) 在 com.sun.enterprise.webservice.EjbInvokerImpl.invoke(EjbInvokerImpl.java:82) 在 com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146)在 com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257) 在 com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:93) 在 com.sun .xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595) 在 com.sun.xml.ws.api.pipe.Fiber。在 com.sun.enterprise.webservice.InvokerImpl 在 java.lang.reflect.Method.invoke(Method.java:597) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 调用(NativeMethodAccessorImpl.java:39) .invoke(InvokerImpl.java:81) 在 com.sun.enterprise.webservice.EjbInvokerImpl.invoke(EjbInvokerImpl.java:82) 在 com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146)在 com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257) 在 com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:93) 在 com.sun .xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595) 在 com.sun.xml.ws.api.pipe.Fiber。invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.sun.enterprise.webservice.InvokerImpl.invoke(InvokerImpl.java:81) at com.sun.enterprise .webservice.EjbInvokerImpl.invoke(EjbInvokerImpl.java:82) 在 com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146) 在 com.sun.xml.ws.server.sei.EndpointMethodHandler。在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber. java:595) 在 com.sun.xml.ws.api.pipe.Fiber。invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.sun.enterprise.webservice.InvokerImpl.invoke(InvokerImpl.java:81) at com.sun.enterprise .webservice.EjbInvokerImpl.invoke(EjbInvokerImpl.java:82) 在 com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146) 在 com.sun.xml.ws.server.sei.EndpointMethodHandler。在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber. java:595) 在 com.sun.xml.ws.api.pipe.Fiber。在 com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146) 在 com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java) 调用(EjbInvokerImpl.java:82) :257) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595) 在 com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:93) 在com.sun.xml.ws.api.pipe.Fiber。在 com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146) 在 com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java) 调用(EjbInvokerImpl.java:82) :257) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595) 在 com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:93) 在com.sun.xml.ws.api.pipe.Fiber。doRun(Fiber.java:554) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber. java:436) 在 com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:106) 在 com.sun.enterprise.webservice.MonitoringPipe.process(MonitoringPipe.java:147) 在 com .sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115) 在 com.sun.xml.ws.api.pipe.Fiber。_doRun(Fiber.java:595) 在 com.sun.xml.ws.api.pipe.Fiber。doRun(Fiber.java:554) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber. java:436) 在 com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:106) 在 com.sun.xml.ws.tx.service.TxServerPipe.process(TxServerPipe.java: 317) 在 com.sun.enterprise.webservice.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:218) 在 com.sun.enterprise.webservice.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:129) 在 com.sun.xml.ws.api .pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115) 在 com.sun.xml.ws.api.pipe.Fiber。_doRun(Fiber.java:595) 在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:554) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber. java:539) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:436) 在 com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:243) 在com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:444) 在 com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244) 在 com。 sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135) 在 com.sun.enterprise.webservice.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:113) 在 com.sun.enterprise.webservice。 com.sun.enterprise.webservice.EjbWebServiceServlet 上的 Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87)。dispatchToEjbEndpoint(EjbWebServiceServlet.java:226) at com.sun.enterprise.webservice.EjbWebServiceServlet.service(EjbWebServiceServlet.java:155) at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) at com.sun.enterprise .web.AdHocContextValve.invoke(AdHocContextValve.java:114) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) ) 在 org.apache.catalina.core.StandardHostValve 的 com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:87) 的 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)。在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) 在 org.apache 调用(StandardHostValve.java:206)。catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java: 1080) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) 在 org.apache.catalina.core.StandardPipeline 的 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150) .doInvoke(StandardPipeline.java:577) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) 在 org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) 在 org. com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask 上的 apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)。在 com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568) 在 com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask. java:813) 在 com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341) 在 com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)在 com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214) 在 com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265) 在 com.sun .enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106) 原因:java.lang.ClassCastException:java.lang.Object 无法转换为 org。org.apache.openjpa.datacache.DataCacheStoreManager.updateCaches(DataCacheStoreManager.java:252) 中 org.apache.openjpa.datacache.DataCacheStoreManager.updateCaches(DataCacheStoreManager.java:252) 中 org.apache.openjpa.datacache.AbstractQueryCache.onTypesChanged(AbstractQueryCache.java:85) 中的 apache.openjpa.datacache.QueryKey。 openjpa.datacache.DataCacheStoreManager.commit(DataCacheStoreManager.java:90) 在 org.apache.openjpa.kernel.DelegatingStoreManager.commit(DelegatingStoreManager.java:94) 在 org.apache.openjpa.kernel.BrokerImpl.endStoreManagerTransaction(BrokerImpl.java: 1308) 在 org.apache.openjpa.kernel.BrokerImpl.endTransaction(BrokerImpl.java:2177) 在 org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1846) ... 还有 75 个 |#]85) 在 org.apache.openjpa.datacache.DataCacheStoreManager.updateCaches(DataCacheStoreManager.java:252) 在 org.apache.openjpa.datacache.DataCacheStoreManager.commit(DataCacheStoreManager.java:90) 在 org.apache.openjpa.kernel.DelegatingStoreManager .commit(DelegatingStoreManager.java:94) 在 org.apache.openjpa.kernel.BrokerImpl.endStoreManagerTransaction(BrokerImpl.java:1308) 在 org.apache.openjpa.kernel.BrokerImpl.endTransaction(BrokerImpl.java:2177) 在 org. apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1846) ... 75 更多 |#]85) 在 org.apache.openjpa.datacache.DataCacheStoreManager.updateCaches(DataCacheStoreManager.java:252) 在 org.apache.openjpa.datacache.DataCacheStoreManager.commit(DataCacheStoreManager.java:90) 在 org.apache.openjpa.kernel.DelegatingStoreManager .commit(DelegatingStoreManager.java:94) 在 org.apache.openjpa.kernel.BrokerImpl.endStoreManagerTransaction(BrokerImpl.java:1308) 在 org.apache.openjpa.kernel.BrokerImpl.endTransaction(BrokerImpl.java:2177) 在 org. apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1846) ... 75 更多 |#]DelegatingStoreManager.commit(DelegatingStoreManager.java:94) at org.apache.openjpa.kernel.BrokerImpl.endStoreManagerTransaction(BrokerImpl.java:1308) at org.apache.openjpa.kernel.BrokerImpl.endTransaction(BrokerImpl.java:2177) at org .apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1846) ... 75 更多 |#]DelegatingStoreManager.commit(DelegatingStoreManager.java:94) at org.apache.openjpa.kernel.BrokerImpl.endStoreManagerTransaction(BrokerImpl.java:1308) at org.apache.openjpa.kernel.BrokerImpl.endTransaction(BrokerImpl.java:2177) at org .apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1846) ... 75 更多 |#]

4

1 回答 1

0

在做了一些调试之后,我意识到生成的查询键是空的,因为命名查询中使用的实体没有启用数据缓存。

于 2011-10-04T12:08:42.527 回答