【问题标题】:problem with openjpa query cache in glassfish + class cast exception form QueryKeyglassfish + class cast异常表单QueryKey中的openjpa查询缓存问题
【发布时间】:2011-05-02 04:51:27
【问题描述】:

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

有人有什么想法吗?

完整的异常转储: [#|2011-05-01T11:43:05.728-0500|警告|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 在 org.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) 在 $Proxy973.transfer(未知来源) 在 sun.reflect.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.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.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87) 在 com.sun.enterprise.webservice.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:226) 在 com.sun.enterprise.webservice.EjbWebServiceServlet.service(EjbWebServiceServlet.java:155) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:831) 在 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.StandardPipeline.invoke(StandardPipeline.java:571) 在 com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:87) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) 在 org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) 在 org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) 在 org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272) 在 com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637) 在 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.apache.openjpa.datacache.QueryKey 在 org.apache.openjpa.datacache.AbstractQueryCache.onTypesChanged(AbstractQueryCache.java: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 更多 |#]

【问题讨论】:

    标签: glassfish openjpa query-cache


    【解决方案1】:

    经过一些调试,我意识到生成的查询键为空,因为命名查询中使用的实体未启用数据缓存。

    【讨论】:

      猜你喜欢
      • 2021-08-03
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2018-05-14
      • 2011-09-10
      相关资源
      最近更新 更多