[hibernate-issues] [Hibernate-JIRA] Commented: (JPA-4) PersistenceUtil.isLoaded() fails with a ClassCastException in Websphere 7

Adam Finlayson (JIRA) noreply at atlassian.com
Sun Feb 19 21:28:10 EST 2012


    [ https://hibernate.onjira.com/browse/JPA-4?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=45550#comment-45550 ] 

Adam Finlayson commented on JPA-4:
----------------------------------

I'm also getting this problem using weblogic 10.3.5.
The issue looks like was reported in issue HV-380 too.
It's not actually possible to remove all the other JPA implementations off the weblogic classpath as weblogic uses the kodo provider for some of it's internals.
This means we can't upgrade our application to use the JPA 2 api from the hibernate implementation at present unless can find some other workaround.


> PersistenceUtil.isLoaded() fails with a ClassCastException in Websphere 7
> -------------------------------------------------------------------------
>
>                 Key: JPA-4
>                 URL: https://hibernate.onjira.com/browse/JPA-4
>             Project: Java Persistence API
>          Issue Type: Bug
>    Affects Versions: 1.0.0
>         Environment: Websphere 7 Hibernate 3.5
>            Reporter: Mike Youngstrom
>
> To duplicate deploy a .war with hibernate 3.5 to Websphere with the contextlistener below.  You need to set the classloader to "parent last" so that your application will use Hibernate's JPA 2 API instead of Webspheres JPA 1 API.
> package test;
> import javax.persistence.Persistence;
> import javax.servlet.ServletContextEvent;
> import javax.servlet.ServletContextListener;
> public class TestListener implements ServletContextListener {
> 	@Override
> 	public void contextDestroyed(ServletContextEvent arg0) {
> 	}
> 	@Override
> 	public void contextInitialized(ServletContextEvent arg0) {
> 		System.out.println("Result of isLoaded: "+Persistence.getPersistenceUtil().isLoaded(new Object()));
> 	}
> }
> Throws the exception below.
> It appears the problem is that PersistenceProviderResolverHolder.PersistenceProviderResolverPerClassLoader scans all of the classloader levels to find PersistenceProviders.  This is finding Websphere's OpenJPA provider in a different classloader than the application and hence with a different JPA API.  Although this example happens in Websphere 7 it would in theory also happen anytime Websphere is used in an app server with another JPA implementation that cannot be removed from the server.
>                                  java.lang.ClassCastException: com.ibm.websphere.persistence.PersistenceProviderImpl incompatible with javax.persistence.spi.PersistenceProvider
> 	at javax.persistence.Persistence$1.isLoaded(Persistence.java:92)
> 	at test.TestListener.contextInitialized(TestListener.java:20)
> 	at com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:1681)
> 	at com.ibm.ws.webcontainer.webapp.WebApp.commonInitializationFinish(WebApp.java:374)
> 	at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:299)
> 	at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:100)
> 	at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:166)
> 	at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:731)
> 	at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:616)
> 	at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:376)
> 	at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:668)
> 	at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1122)
> 	at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1315)
> 	at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:623)
> 	at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:940)
> 	at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:725)
> 	at com.ibm.ws.runtime.component.ApplicationMgrImpl$1.run(ApplicationMgrImpl.java:1266)
> 	at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:4509)
> 	at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:4687)
> 	at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:255)
> 	at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplicationDynamically(ApplicationMgrImpl.java:1271)
> 	at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2043)
> 	at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:439)
> 	at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123)
> 	at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:382)
> 	at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCompositionUnit(CompositionUnitMgrImpl.java:653)
> 	at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCompositionUnit(CompositionUnitMgrImpl.java:615)
> 	at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:1177)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:600)
> 	at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:37)
> 	at sun.reflect.GeneratedMethodAccessor35.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:600)
> 	at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244)
> 	at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1086)
> 	at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:967)
> 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:848)
> 	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:773)
> 	at com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1320)
> 	at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
> 	at com.ibm.ws.management.AdminServiceImpl.invoke(AdminServiceImpl.java:1213)
> 	at com.ibm.ws.management.application.sync.StartDeploymentTask.startDeployment(StartDeploymentTask.java:236)
> 	at com.ibm.ws.management.application.sync.StartDeploymentTask.fullAppUpdate(StartDeploymentTask.java:113)
> 	at com.ibm.ws.management.application.sync.StartDeploymentTask.performTask(StartDeploymentTask.java:101)
> 	at com.ibm.ws.management.application.sync.AppBinaryProcessor$ExpandApp.expand(AppBinaryProcessor.java:1556)
> 	at com.ibm.ws.management.application.sync.AppBinaryProcessor.postProcessSynchronousExt(AppBinaryProcessor.java:654)
> 	at com.ibm.ws.management.bla.sync.BLABinaryProcessor.postProcess(BLABinaryProcessor.java:569)
> 	at com.ibm.ws.management.bla.sync.BLABinaryProcessor.onChangeCompletion(BLABinaryProcessor.java:451)
> 	at com.ibm.ws.management.repository.FileRepository.postNotify(FileRepository.java:1915)
> 	at com.ibm.ws.management.repository.FileRepository.update(FileRepository.java:1424)
> 	at com.ibm.ws.management.repository.client.LocalConfigRepositoryClient.update(LocalConfigRepositoryClient.java:189)
> 	at com.ibm.ws.sm.workspace.impl.WorkSpaceMasterRepositoryAdapter.update(WorkSpaceMasterRepositoryAdapter.java:655)
> 	at com.ibm.ws.sm.workspace.impl.RepositoryContextImpl.update(RepositoryContextImpl.java:1954)
> 	at com.ibm.ws.sm.workspace.impl.RepositoryContextImpl.synch(RepositoryContextImpl.java:1902)
> 	at com.ibm.ws.sm.workspace.impl.WorkSpaceImpl.synch(WorkSpaceImpl.java:511)
> 	at com.ibm.ws.management.configservice.ConfigServiceImpl.save(ConfigServiceImpl.java:703)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:600)
> 	at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:37)
> 	at sun.reflect.GeneratedMethodAccessor35.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:600)
> 	at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244)
> 	at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1086)
> 	at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:967)
> 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:848)
> 	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:773)
> 	at com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1320)
> 	at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
> 	at com.ibm.ws.management.AdminServiceImpl.invoke(AdminServiceImpl.java:1213)
> 	at com.ibm.ws.management.connector.AdminServiceDelegator.invoke(AdminServiceDelegator.java:181)
> 	at com.ibm.ws.management.connector.rmi.RMIConnectorService.invoke(RMIConnectorService.java:282)
> 	at com.ibm.ws.management.connector.rmi._RMIConnectorService_Tie.invoke(_RMIConnectorService_Tie.java:395)
> 	at com.ibm.ws.management.connector.rmi._RMIConnectorService_Tie._invoke(_RMIConnectorService_Tie.java:160)
> 	at com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:622)
> 	at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:475)
> 	at com.ibm.rmi.iiop.ORB.process(ORB.java:513)
> 	at com.ibm.CORBA.iiop.ORB.process(ORB.java:1574)
> 	at com.ibm.rmi.iiop.Connection.respondTo(Connection.java:2841)
> 	at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2714)
> 	at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:63)
> 	at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:118)
> 	at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550)

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list