ClassCastException на объектах JPA после перезапуска приложения

Сейчас мы используем 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, и исключение:

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 ответ

WebSphere 8.5.5 использовал WSJPA (основанный на OpenJPA) в качестве поставщика JPA по умолчанию. Однако начиная с WebSphere 9 поставщик JPA по умолчанию был переключен на EclipseLink. Если вы использовали EclipseLink в WebSphere 8.5.5, это означает, что вы предоставили свою собственную библиотеку EclipseLink для WebSphere 8.5.5, поскольку WebSphere не поставлялся с EclipseLink.

Когда вы переключаетесь на WebSphere 9, вы должны удалить библиотеки / конфигурацию Eclipselink, которые у вас были в WebSphere 8.5.5, которые позволяли вам использовать свой собственный EclipseLink. Ошибка, которую вы опубликовали, может быть вызвана тем, что в вашем приложении будут видны две банки EclipseLink (одна из вашего приложения / библиотеки и одна из WebSphere).

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