Проблема с кешем запросов openjpa в glassfish + форма исключения приведения класса QueryKey

Используя openjpa 1.2.0 со встроенным DataCache на Glassfish, включив кеширование запросов и закрепляя некоторые именованные очереди, мы видим следующее исключение: 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.QgeryKey.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1870) в com.sun.jts.jta.SynchronizationImpl.after_completion(SynchronizationImpl.java:154) в com.sun.jts.CosTransactions.RegisteredSyncscs.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.J2agerEoTransform.mit.MaseTransaction.ManagerTomentMaction.sun..java:200) в $Proxy973.transfer(Неизвестный источник) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39l_force.jpg). 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) at 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.sun.x.x).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.un.serser.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87) на com.sun.enterprise.webservice.EjbWebServiceServlet.dispatchToEjbEndpoint (EjbWebServiceServlet.java:15.erj.jer.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 (StandardPipe77.g).apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) на com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:87) на org.apache.catalina.core.StandardHostValve.invoke(StandardH.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(StandardEngavaV1.50) в 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.doProork.jpg 568) на com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813) на com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:34).sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) в com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214) в com.sun.enterpr..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(AbstractQueryC). в org.apache.openjpa.datacache.DataCacheStoreManager.updateCaches(DataCacheStoreManager.java:252) в org.apache.openjpa.datacache.DataCacheStoreManager.commit(DataCacheStoreManager.java:90) в org.epaatingStore. (DelegatingStoreManager.java:94) в org.apache.openjpa.kernel.BrokerImpl.endStoreManagerTransaction(BrokerImpl.java:1308) в org.apache.openjpa.kernel.BrokerImpl.endTransaction(BrokerImpl.jap.77): 21 openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1846) ... еще 75 |#]

1 ответ

После некоторой отладки я понял, что сгенерированный ключ запроса является нулевым, потому что сущности, используемые в именованном запросе, не включают кеш данных.

Другие вопросы по тегам