应用程序重启后JPA实体上的ClassCastException

时间:2017-02-02 12:09:45

标签: jpa websphere websphere-traditional

我们现在正在使用WebSphere 9,而某些应用程序的行为与WebSphere 8.5.5中的行为不同。 每次我们重新启动应用程序(而不是服务器)时,它们都会停止正常工作,日志会显示与此类似的异常:

java.lang.ClassCastException: pt.sibs.epms.persistence.entity.EpmsDebugParameters incompatible with pt.sibs.epms.persistence.entity.EpmsDebugParameters

它只发生在JPA实体上,我检查了类路径,以确保Jar只被引用一次(我已经为应用程序导出了类加载器信息)。 我已确认申请停止时EntityManagerFactory已被关闭(contextDestroyed上的ServletContextListener)。

如前所述,这只发生在WebSphere 9上,它在WebSphere 8.5.5和GlassFish 4.1上运行良好。

有什么想法吗?

编辑#1

我正在使用WebSphere Full Profile,它被抛出的例外是:

java.lang.ClassCastException: pt.sibs.epms.persistence.entity.EpmsDebugParameters cannot be cast to pt.sibs.epms.persistence.entity.EpmsDebugParameters
             at pt.sibs.epms.util.logging.LoggerConfiguration.<clinit>(LoggerConfiguration.java:40)
             at pt.sibs.epms.util.logging.LoggerConfiguration.<clinit>(LoggerConfiguration.java)
             at pt.sibs.epms.suppdata.EpmsSuppData.<init>(EpmsSuppData.java:55)
             at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
             at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:88)
             at sun.reflect.DelegatingConstructorAccessorImpl.__newInstance(DelegatingConstructorAccessorImpl.java:57)
             at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java)
             at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java)
             at java.lang.reflect.Constructor.newInstance(Constructor.java:437)
             at com.ibm.ws.managedobject.internal.ManagedObjectFactoryImpl.createManagedObject(ManagedObjectFactoryImpl.java:65)
             at com.ibm.ws.websvcs.server.WSServiceInstanceFactory.createManagedObject(WSServiceInstanceFactory.java:276)
             at com.ibm.ws.websvcs.server.WSServiceInstanceFactory.createServiceInstance(WSServiceInstanceFactory.java:131)
             at org.apache.axis2.jaxws.server.EndpointController.handleRequest(EndpointController.java:272)
             at org.apache.axis2.jaxws.server.EndpointController.invoke(EndpointController.java:103)
             at org.apache.axis2.jaxws.server.JAXWSMessageReceiver.receive(JAXWSMessageReceiver.java:161)
             at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:212)
             at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172)
             at com.ibm.ws.websvcs.transport.http.WASAxis2Servlet.doPost(WASAxis2Servlet.java:1633)
             at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
             at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
             at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1235)
             at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
             at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
             at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
             at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1124)
             at com.ibm.ws.webcontainer.webapp.WebApp.__handleRequest(WebApp.java:4144)
             at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java)
             at com.ibm.ws.webcontainer.webapp.WebAppImpl.handleRequest(WebAppImpl.java:2208)
             at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
             at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1030)
             at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817)
             at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:382)
             at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)
             at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:532)
             at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:318)
             at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:289)
             at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.determineNextChannel(SSLConnectionLink.java:1084)
             at com.ibm.ws.ssl.channel.impl.SSLConnectionLink$MyReadCompletedCallback.complete(SSLConnectionLink.java:658)
             at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1820)
             at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
             at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
             at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
             at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
             at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
             at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
             at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
             at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1892)

1 个答案:

答案 0 :(得分:0)

WebSphere 8.5.5使用WSJPA(基于OpenJPA构建)作为默认的JPA提供程序。但是,启动WebSphere 9时,默认的JPA提供程序已切换到EclipseLink。如果您在WebSphere 8.5.5上使用EclipseLink,那意味着您为WebSphere 8.5.5提供了自己的EclipseLink库,因为WebSphere没有附带EclipseLink。

当您切换到WebSphere 9时,您应该删除WebSphere 8.5.5中允许您使用自己的EclipseLink的Eclipselink库/配置。您发布的错误可能是因为您的应用程序可以看到两个EclipseLink jar(一个来自您的应用程序/库,一个来自WebSphere)。