Websphere java.lang.ClassCastException:com.ibm.ws.jpa.management.JPATxEntityManager

Websphere java.lang.ClassCastException:com.ibm.ws.jpa.management.JPATxEntityManager,websphere,websphere-7,Websphere,Websphere 7,我有一个restful Web服务,使用eclipselink2.0作为JPA提供者部署在WAS7.0.00.19和OSGI以及JPA2.0功能包上。 我已经为应用程序创建了一个共享库,指向这些jar文件的位置: c:\bacpext\eclipseelink-javax.persistence-2.0.jar c:\bacpext\eclipselink-2.0.2.jar 试图访问资源uri时引发以下异常 [10/11/11 15:53:18:151 CEST] FFDC Exc

我有一个restful Web服务,使用eclipselink2.0作为JPA提供者部署在WAS7.0.00.19和OSGI以及JPA2.0功能包上。 我已经为应用程序创建了一个共享库,指向这些jar文件的位置:

  • c:\bacpext\eclipseelink-javax.persistence-2.0.jar
  • c:\bacpext\eclipselink-2.0.2.jar
试图访问资源uri时引发以下异常

[10/11/11 15:53:18:151 CEST]     FFDC Exception:java.lang.ClassCastException SourceId:com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch ProbeId:448 Reporter:com.ibm.ws.webcontainer.servlet.ServletWrapperImpl@2f412f41
java.lang.ClassCastException: com.ibm.ws.jpa.management.JPATxEntityManager incompatible with javax.persistence.EntityManager
    at com.tavia.service.PersistenceService.<init>(PersistenceService.java:39)
    at com.tavia.service.PersistenceService.<init>(PersistenceService.java:19)
    at com.tavia.service.PersistenceService$1.initialValue(PersistenceService.java:29)
    at com.tavia.service.PersistenceService$1.initialValue(PersistenceService.java:26)
    at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:152)
    at java.lang.ThreadLocal.get(ThreadLocal.java:142)
    at com.tavia.service.PersistenceService.getInstance(PersistenceService.java:52)
    at com.tavia.service.GltmMisCodesResource.get(GltmMisCodesResource.java:64)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:611)
    at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:149)
    at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
    at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:259)
    at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:83)
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133)
    at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:71)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:990)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:941)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:932)
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:384)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:179)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3935)
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:931)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:276)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
    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:1604)
[10/11/11 15:53:18:151 CEST]FFDC异常:java.lang.ClassCastException SourceId:com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch ProbeId:448 Reporter:com.ibm.ws.webcontainer.servlet。ServletWrapperImpl@2f412f41
java.lang.ClassCastException:com.ibm.ws.jpa.management.JPATxEntityManager与javax.persistence.EntityManager不兼容
位于com.tavia.service.PersistenceService。(PersistenceService.java:39)
位于com.tavia.service.PersistenceService。(PersistenceService.java:19)
位于com.tavia.service.PersistenceService$1.initialValue(PersistenceService.java:29)
位于com.tavia.service.PersistenceService$1.initialValue(PersistenceService.java:26)
位于java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:152)
位于java.lang.ThreadLocal.get(ThreadLocal.java:142)
位于com.tavia.service.PersistenceService.getInstance(PersistenceService.java:52)
位于com.tavia.service.GltmMisCodesResource.get(GltmMisCodesResource.java:64)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)中
位于java.lang.reflect.Method.invoke(Method.java:611)
位于com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutingVoker.\u dispatch(AbstractResourceMethodDispatchProvider.java:149)
位于com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
位于com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:259)
位于com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:83)
位于com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133)
在com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:71)上
位于com.sun.jersey.server.impl.application.WebApplicationImpl.\u handleRequest(WebApplicationImpl.java:990)
位于com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:941)
位于com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:932)
位于com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:384)
位于com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451)
位于com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
位于com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657)
位于com.ibm.ws.webcontainer.servlet.ServletWrapper.HandlerRequest(ServletWrapper.java:939)
位于com.ibm.ws.webcontainer.servlet.ServletWrapper.HandlerRequest(ServletWrapper.java:502)
位于com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.HandlerRequest(ServletWrapperImpl.java:179)
位于com.ibm.ws.webcontainer.webapp.webapp.handleRequest(webapp.java:3935)
位于com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
位于com.ibm.ws.webcontainer.webcontainer.handleRequest(webcontainer.java:931)
位于com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
位于com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)
位于com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
位于com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
在com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)上
位于com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:276)
位于com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
位于com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
在com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted上(AioReadCompletionListener.java:165)
位于com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
位于com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
位于com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
位于com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
位于com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
位于com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
位于com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1604)

有什么问题吗?

看来PersistenceService已经获取了对was运行时(JPATxEntityManager)创建的EM代理的引用,但它正试图将其转换为已被eclipselink-javax.persistence-2.0.jar覆盖的javax.persistence.EntityManager。在不知道您要做什么的情况下,其中一个问题是:

  • 您不应该包括eclipselink-javax.persistence-2.0.jar来覆盖javax.persistence;您应该使用WebSphere已经提供的持久性API类
  • …或者您确实希望出于某种原因覆盖持久性API类。在这种情况下,您应该更改获取EM的方式,以确保它不使用注入或java:comp查找,这将