我正在将现有的应用程序从WAS 8.0
迁移到WAS Liberty Profile
。
该应用程序是一个EJB Web应用程序,由JSF 2.2,EJB 3,JPA-Eclipselink 2.5.1组成。
我创建server.xml
并尝试在WAS Liberty Profile
上运行此应用程序。我遇到以下错误:
Application Error
SRVE0777E: Exception thrown by application class 'javax.faces.webapp.FacesServlet.service:230'
javax.servlet.ServletException: See nested exception; nested exception is: javax.persistence.PersistenceException: java.lang.VerifyError: Bad return type Exception Details: Location: org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform.getConversionManager()Lorg/eclipse/persistence/internal/core/helper/CoreConversionManager; @4: areturn Reason: Type 'org/eclipse/persistence/internal/helper/ConversionManager' (current frame, stack[0]) is not assignable to 'org/eclipse/persistence/internal/core/helper/CoreConversionManager' (from method signature) Current Frame: bci: @4 flags: { } locals: { 'org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform' } stack: { 'org/eclipse/persistence/internal/helper/ConversionManager' } Bytecode: 0x0000000: 2ab6 02a7 b0
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:230)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1290)
at [internal classes]
Caused by: javax.ejb.EJBException: See nested exception; nested exception is: javax.persistence.PersistenceException: java.lang.VerifyError: Bad return type Exception Details: Location: org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform.getConversionManager()Lorg/eclipse/persistence/internal/core/helper/CoreConversionManager; @4: areturn Reason: Type 'org/eclipse/persistence/internal/helper/ConversionManager' (current frame, stack[0]) is not assignable to 'org/eclipse/persistence/internal/core/helper/CoreConversionManager' (from method signature) Current Frame: bci: @4 flags: { } locals: { 'org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform' } stack: { 'org/eclipse/persistence/internal/helper/ConversionManager' } Bytecode: 0x0000000: 2ab6 02a7 b0
at com.ibm.ejs.container.util.ExceptionUtil.EJBException(ExceptionUtil.java:461)
at [internal classes]
at net.umbrella.svc.doc.myapp.service.EJSLocal0SLUserServiceBean_0f29535e.findUserByCdsId(EJSLocal0SLUserServiceBean_0f29535e.java:-1)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-2)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:433)
at [internal classes]
at net.umbrella.svc.doc.myapp.service.Serializable$UserService$1566937387$Proxy$_$$_Weld$EnterpriseProxy$.findUserByCdsId
at net.umbrella.svc.doc.myapp.web.myapp.LoginCheckPhaseListener.afterPhase(LoginCheckPhaseListener.java:52)
at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersAfter(PhaseListenerManager.java:117)
... 1 more
Caused by: javax.persistence.PersistenceException: java.lang.VerifyError: Bad return type Exception Details: Location: org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform.getConversionManager()Lorg/eclipse/persistence/internal/core/helper/CoreConversionManager; @4: areturn Reason: Type 'org/eclipse/persistence/internal/helper/ConversionManager' (current frame, stack[0]) is not assignable to 'org/eclipse/persistence/internal/core/helper/CoreConversionManager' (from method signature) Current Frame: bci: @4 flags: { } locals: { 'org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform' } stack: { 'org/eclipse/persistence/internal/helper/ConversionManager' } Bytecode: 0x0000000: 2ab6 02a7 b0
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:837)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:207)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:307)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:337)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:318)
at com.ibm.ws.jpa.container.v21.internal.JPA21Runtime.createEntityManagerInstance(JPA21Runtime.java:111)
at [internal classes]
at net.umbrella.svc.doc.myapp.web.tool.jpa.TimingDecoratedEntityManager.createNamedQuery(TimingDecoratedEntityManager.java:58)
at net.umbrella.svc.doc.myapp.service.UserServiceBean.findUserByCdsId(UserServiceBean.java:75)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-2)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.ibm.ejs.container.EJSContainer.invokeProceed(EJSContainer.java:5317)
... 12 more
Caused by: java.lang.VerifyError: Bad return type Exception Details: Location: org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform.getConversionManager()Lorg/eclipse/persistence/internal/core/helper/CoreConversionManager; @4: areturn Reason: Type 'org/eclipse/persistence/internal/helper/ConversionManager' (current frame, stack[0]) is not assignable to 'org/eclipse/persistence/internal/core/helper/CoreConversionManager' (from method signature) Current Frame: bci: @4 flags: { } locals: { 'org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform' } stack: { 'org/eclipse/persistence/internal/helper/ConversionManager' } Bytecode: 0x0000000: 2ab6 02a7 b0
at java.lang.Class.getDeclaredConstructors0(Class.java:-2)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
at java.lang.Class.newInstance(Class.java:412)
at org.eclipse.persistence.internal.security.PrivilegedAccessHelper.newInstanceFromClass(PrivilegedAccessHelper.java:516)
at org.eclipse.persistence.sessions.DatasourceLogin.setPlatformClassName(DatasourceLogin.java:541)
at [internal classes]
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateLogins(EntityManagerSetupImpl.java:2358)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateSession(EntityManagerSetupImpl.java:2744)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:732)
... 25 more
有没有人遇到过这种错误? 我的配置中是否遗漏了任何内容?
请告诉我。
答案 0 :(得分:3)
应用程序中的EclipseLink与Liberty中的内置EclipseLink冲突。要在没有内置JPA提供程序的Liberty中使用JPA,请在服务器配置中指定jpaContainer-2.1功能而不是jpa-2.1功能。