I am trying out a simple EJB3 application on JBoss-5.0 Beta3, Java 1.5. The
application includes a StatelessSessionBean, a few entities and a persistence
unit. The application deploys properly and works as per expectations. However,
when i shutdown JBoss, i see the following exceptions in the logs:
2008-02-12 12:58:34,208 INFO [org.jboss.ejb3.entity.PersistenceUnitDeployment]
Stopping persistence unit
persistence.units:ear=EJB3Persistence.ear,jar=myapp_ejb3.jar,unitName=EJB3Persistence
| 2008-02-12 12:58:37,896 INFO [org.hibernate.impl.SessionFactoryImpl]
closing
| 2008-02-12 12:58:37,896 INFO
[org.hibernate.impl.SessionFactoryObjectFactory] Unbinding factory from JNDI
name:
persistence.units:ear=EJB3Persistence.ear,jar=myapp_ejb3.jar,unitName=EJB3Persistence
| 2008-02-12 12:58:37,896 INFO [org.hibernate.util.NamingHelper] JNDI
InitialContext
properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory,
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
| 2008-02-12 12:59:37,710 ERROR [org.hibernate.util.NamingHelper] Could not
obtain initial context
| javax.naming.NoInitialContextException: Cannot instantiate class:
org.jnp.interfaces.NamingContextFactory [Root exception is
java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
| at
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
| at
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
| at javax.naming.InitialContext.init(InitialContext.java:223)
| at javax.naming.InitialContext.<init>(InitialContext.java:197)
| at
org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:28)
| at
org.hibernate.impl.SessionFactoryObjectFactory.removeInstance(SessionFactoryObjectFactory.java:115)
| at
org.hibernate.impl.SessionFactoryImpl.close(SessionFactoryImpl.java:806)
| at
org.hibernate.ejb.EntityManagerFactoryImpl.close(EntityManagerFactoryImpl.java:43)
| at
org.jboss.ejb3.entity.ManagedEntityManagerFactory.destroy(ManagedEntityManagerFactory.java:95)
| at
org.jboss.ejb3.entity.PersistenceUnitDeployment.stop(PersistenceUnitDeployment.java:292)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at
org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:56)
| at
org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:110)
| at
org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
| at
org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:214)
| at
org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:45)
| at
org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:108)
| at
org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:69)
| at
org.jboss.kernel.plugins.dependency.LifecycleAction.uninstallActionInternal(LifecycleAction.java:249)
| at
org.jboss.kernel.plugins.dependency.KernelControllerContextAction.uninstallAction(KernelControllerContextAction.java:167)
| at
org.jboss.kernel.plugins.dependency.KernelControllerContextAction.uninstallAction(KernelControllerContextAction.java:46)
| at
org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleUninstallAction(SimpleControllerContextAction.java:79)
| at
org.jboss.dependency.plugins.action.AccessControllerContextAction.uninstall(AccessControllerContextAction.java:131)
| at
org.jboss.dependency.plugins.AbstractControllerContextActions.uninstall(AbstractControllerContextActions.java:58)
| at
org.jboss.dependency.plugins.AbstractControllerContext.uninstall(AbstractControllerContext.java:333)
| at
org.jboss.dependency.plugins.AbstractController.uninstall(AbstractController.java:1323)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:1009)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:627)
| at
org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:411)
| at
org.jboss.system.ServiceController.doChange(ServiceController.java:659)
| at org.jboss.system.ServiceController.stop(ServiceController.java:481)
| at
org.jboss.system.deployers.ServiceDeployer.stop(ServiceDeployer.java:156)
| at
org.jboss.system.deployers.ServiceDeployer.undeploy(ServiceDeployer.java:136)
| at
org.jboss.system.deployers.ServiceDeployer.undeploy(ServiceDeployer.java:46)
| at
org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalUndeploy(AbstractSimpleRealDeployer.java:73)
| at
org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.undeploy(AbstractRealDeployer.java:112)
| at
org.jboss.deployers.plugins.deployers.DeployerWrapper.undeploy(DeployerWrapper.java:187)
| at
org.jboss.deployers.plugins.deployers.DeployersImpl.doUninstallParentLast(DeployersImpl.java:1072)
| at
org.jboss.deployers.plugins.deployers.DeployersImpl.doUninstallParentLast(DeployersImpl.java:1065)
| at
org.jboss.deployers.plugins.deployers.DeployersImpl.uninstall(DeployersImpl.java:1027)
| at
org.jboss.dependency.plugins.AbstractControllerContext.uninstall(AbstractControllerContext.java:333)
| at
org.jboss.dependency.plugins.AbstractController.uninstall(AbstractController.java:1323)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:1009)
| at
org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:627)
| at
org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:411)
| at
org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:423)
| at
org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:506)
| at
org.jboss.deployers.plugins.main.MainDeployerImpl.shutdown(MainDeployerImpl.java:543)
| at
org.jboss.system.server.profileservice.ProfileServiceBootstrap.shutdown(ProfileServiceBootstrap.java:151)
| at
org.jboss.bootstrap.AbstractServerImpl.shutdownServer(AbstractServerImpl.java:505)
| at
org.jboss.bootstrap.AbstractServerImpl$ShutdownHook.run(AbstractServerImpl.java:824)
| Caused by: java.lang.ClassNotFoundException:
org.jnp.interfaces.NamingContextFactory
| at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
| at java.security.AccessController.doPrivileged(Native Method)
| at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
| at java.lang.Class.forName0(Native Method)
| at java.lang.Class.forName(Class.java:242)
| at
com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:42)
| at
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
| ... 65 more
| 2008-02-12 12:59:37,726 WARN
[org.hibernate.impl.SessionFactoryObjectFactory] Could not unbind factory from
JNDI
| javax.naming.NoInitialContextException: Cannot instantiate class:
org.jnp.interfaces.NamingContextFactory [Root exception is
java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
| at
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
| at
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
| at javax.naming.InitialContext.init(InitialContext.java:223)
| at javax.naming.InitialContext.<init>(InitialContext.java:197)
| at
org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:28)
| at
org.hibernate.impl.SessionFactoryObjectFactory.removeInstance(SessionFactoryObjectFactory.java:115)
| at
org.hibernate.impl.SessionFactoryImpl.close(SessionFactoryImpl.java:806)
| at
org.hibernate.ejb.EntityManagerFactoryImpl.close(EntityManagerFactoryImpl.java:43)
| at
org.jboss.ejb3.entity.ManagedEntityManagerFactory.destroy(ManagedEntityManagerFactory.java:95)
| at
org.jboss.ejb3.entity.PersistenceUnitDeployment.stop(PersistenceUnitDeployment.java:292)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at
org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:56)
| at
org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:110)
| at
org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
| at
org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:214)
| at
org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:45)
| at
org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:108)
| at
org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:69)
| at
org.jboss.kernel.plugins.dependency.LifecycleAction.uninstallActionInternal(LifecycleAction.java:249)
| at
org.jboss.kernel.plugins.dependency.KernelControllerContextAction.uninstallAction(KernelControllerContextAction.java:167)
| at
org.jboss.kernel.plugins.dependency.KernelControllerContextAction.uninstallAction(KernelControllerContextAction.java:46)
| at
org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleUninstallAction(SimpleControllerContextAction.java:79)
| at
org.jboss.dependency.plugins.action.AccessControllerContextAction.uninstall(AccessControllerContextAction.java:131)
| at
org.jboss.dependency.plugins.AbstractControllerContextActions.uninstall(AbstractControllerContextActions.java:58)
| at
org.jboss.dependency.plugins.AbstractControllerContext.uninstall(AbstractControllerContext.java:333)
| at
org.jboss.dependency.plugins.AbstractController.uninstall(AbstractController.java:1323)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:1009)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:936)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:986)
| at
org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:627)
| at
org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:411)
| at
org.jboss.system.ServiceController.doChange(ServiceController.java:659)
| at org.jboss.system.ServiceController.stop(ServiceController.java:481)
| at
org.jboss.system.deployers.ServiceDeployer.stop(ServiceDeployer.java:156)
| at
org.jboss.system.deployers.ServiceDeployer.undeploy(ServiceDeployer.java:136)
| at
org.jboss.system.deployers.ServiceDeployer.undeploy(ServiceDeployer.java:46)
| at
org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalUndeploy(AbstractSimpleRealDeployer.java:73)
| at
org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.undeploy(AbstractRealDeployer.java:112)
| at
org.jboss.deployers.plugins.deployers.DeployerWrapper.undeploy(DeployerWrapper.java:187)
| at
org.jboss.deployers.plugins.deployers.DeployersImpl.doUninstallParentLast(DeployersImpl.java:1072)
| at
org.jboss.deployers.plugins.deployers.DeployersImpl.doUninstallParentLast(DeployersImpl.java:1065)
| at
org.jboss.deployers.plugins.deployers.DeployersImpl.uninstall(DeployersImpl.java:1027)
| at
org.jboss.dependency.plugins.AbstractControllerContext.uninstall(AbstractControllerContext.java:333)
| at
org.jboss.dependency.plugins.AbstractController.uninstall(AbstractController.java:1323)
| at
org.jboss.dependency.plugins.AbstractController.uninstallContext(AbstractController.java:1009)
| at
org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:627)
| at
org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:411)
| at
org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:423)
| at
org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:506)
| at
org.jboss.deployers.plugins.main.MainDeployerImpl.shutdown(MainDeployerImpl.java:543)
| at
org.jboss.system.server.profileservice.ProfileServiceBootstrap.shutdown(ProfileServiceBootstrap.java:151)
| at
org.jboss.bootstrap.AbstractServerImpl.shutdownServer(AbstractServerImpl.java:505)
| at
org.jboss.bootstrap.AbstractServerImpl$ShutdownHook.run(AbstractServerImpl.java:824)
| Caused by: java.lang.ClassNotFoundException:
org.jnp.interfaces.NamingContextFactory
| at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
| at java.security.AccessController.doPrivileged(Native Method)
| at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
| at java.lang.Class.forName0(Native Method)
| at java.lang.Class.forName(Class.java:242)
| at
com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:42)
| at
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
| ... 65 more
|
|
|
A bit of debugging showed that the Shutdown hook thread which triggers the
close of the EntityManagerFactory sets the context classloader of the thread to
org.jboss.system.NoAnnotationURLClassLoader because of which the
org.jnp.interfaces.NamingContextFactory class is not found by the classloader
or its parent classloader.
Just for the sake of testing, i changed the code in the destroy method of the
org.jboss.ejb3.entity.ManagedEntityManagerFactory to set the context
classloader before invoking the close method of the entitymanager factory as
follows:
public void destroy()
| {
| System.out.println("Classloader of entity manager factory is : " +
entityManagerFactory.getClass().getClassLoader());
|
| ClassLoader origClassloader =
Thread.currentThread().getContextClassLoader();
| try {
| System.out.println("Setting the context classloader of " +
Thread.currentThread() + " to " +
entityManagerFactory.getClass().getClassLoader());
|
Thread.currentThread().setContextClassLoader(entityManagerFactory.getClass().getClassLoader());
| entityManagerFactory.close();
| } finally {
|
Thread.currentThread().setContextClassLoader(origClassloader);
| System.out.println("Reset classloader of thread : " +
Thread.currentThread() + " to " + origClassloader);
| }
| }
|
This worked and i no longer see the exception. Here's the logs on JBoss
shutdown:
2008-02-12 15:38:51,956 INFO [org.jboss.ejb3.entity.PersistenceUnitDeployment]
Stopping persistence unit
persistence.units:ear=EJB3Persistence.ear,jar=myapp_ejb3.jar,unitName=EJB3Persistence
| 2008-02-12 15:38:51,971 INFO [STDOUT] Classloader of entity manager
factory is : [EMAIL PROTECTED]
url=vfsfile:/D:/jboss-5.0.0.Beta3/server/jaikiran/conf/jboss-service.xml
,addedOrder=2}
| 2008-02-12 15:38:51,971 INFO [STDOUT] Setting the context classloader of
Thread[JBoss Shutdown Hook,5,jboss] to [EMAIL PROTECTED]
url=vfsfile:/D:/jboss-5.0.0.Beta3/server/jaikiran/conf/jboss-service.xml
,addedOrder=2}
| 2008-02-12 15:38:51,987 INFO [org.hibernate.impl.SessionFactoryImpl]
closing
| 2008-02-12 15:38:51,987 INFO
[org.hibernate.impl.SessionFactoryObjectFactory] Unbinding factory from JNDI
name:
persistence.units:ear=EJB3Persistence.ear,jar=myapp_ejb3.jar,unitName=EJB3Persistence
| 2008-02-12 15:38:52,003 INFO [org.hibernate.util.NamingHelper] JNDI
InitialContext
properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory,
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
| 2008-02-12 15:38:52,018 INFO
[org.hibernate.impl.SessionFactoryObjectFactory] Unbound factory from JNDI
name:
persistence.units:ear=EJB3Persistence.ear,jar=myapp_ejb3.jar,unitName=EJB3Persistence
| 2008-02-12 15:38:52,018 TRACE [org.jboss.mx.loading.RepositoryClassLoader]
getResourceLocally([EMAIL PROTECTED]
url=vfsfile:/D:/jboss-5.0.0.Beta3/server/jaikiran/deployers/bsh.deployer/
,addedOrder=3}),
name=org/apache/tomcat/util/buf/ByteChunk$ByteOutputChannel.class, resURL:null
| 2008-02-12 15:38:52,018 INFO [STDOUT] Reset classloader of thread :
Thread[JBoss Shutdown Hook,5,jboss] to [EMAIL PROTECTED]
|
|
The code change that i did was just for testing and there might be a better way
to achieve this. I searched the JIRA to see if this has been reported before,
but could not find any. Do i open a new issue (i can add my sample application
and the classloader logs, if that's required) for this or did i miss a already
reported issue in the JIRA?
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4128684#4128684
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4128684
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user