2014-04-13 19:32 GMT+04:00 Christian <cm...@famiru.de>: >> Is hibernate initialized via a <listener> in web.xml, or where? > > I don't know exactly how it is initialized. I use spring annotation > configuration with a > javax.servlet.ServletContainerInitializer but I don't know, if hibernate gets > loaded immediately. > Looking at the call stack, it seems that it gets initialized by a > "ContextLoaderListener" in an event called > "contextInitialized" that gets passed a javax.servlet.ServletContextEvent. > So I would say yes, it gets initialized by a listener. > > >> "path" attribute cannot be used in META-INF/context.xml file. > > Thanks for the hint. > > >> The driver jar should be in one place, not both. > > They are just in $CATALINA_BASE/lib and not bundled with the webapp. > > >> a) classloading for drivers was changed at some point, to allow them >> in WEB-INF/lib > > This might be the cause - if resources get registered later to allow loading > the driver before. > > >> b) different versions of Tomcat 8 use different versions of Apache >> Commons DBCP 2 pool > > Explicitly using > factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" > in context.xml to use tomcat dbcp doesn't change the behavior. > > >> The visible part of JNDI depends on >> Thread.currentThread().getContextClassLoader() (aka TCCL). Any reason >> why TCCL may be wrong? (You aren't providing the full stacktrace) > > The full stacktrace gets truncated by my IDE, because it is very long (the > exception causes 3 other exceptions that get > printed with complete stacktrace). > I copied the thread dump at the statement directly after the exception got > thrown: > > "RMI TCP Connection(4)-127.0.0.1@1847" daemon prio=5 tid=0x42 nid=NA runnable > java.lang.Thread.State: RUNNABLE > at > org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:117) > at > org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:115) > at > org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111) > at > org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234) > at > org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) > at > org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260) > at > org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94) > at > org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111) > at > org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234) > at > org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) > at > org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885) > at > org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843) > at > org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) > at > org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) > at > org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:397) > at > org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) > at > org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152) > at > org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:67) > at > org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:290) > at > org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) > at > config.PersistenceConfig.entityManagerFactory(PersistenceConfig.java:35) > at > config.PersistenceConfig$$EnhancerByCGLIB$$57464d4c.CGLIB$entityManagerFactory$0(<generated>:-1) > at > config.PersistenceConfig$$EnhancerByCGLIB$$57464d4c$$FastClassByCGLIB$$58f7e9b4.invoke(<generated>:-1) > at > org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) > at > org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:326) > at > config.PersistenceConfig$$EnhancerByCGLIB$$57464d4c.entityManagerFactory(<generated>:-1) > at > sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:483) > at > org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166) > at > org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:581) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) > - locked <0xec7> (a java.util.concurrent.ConcurrentHashMap) > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) > at > org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700) > at > org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) > at > org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) > - locked <0xec8> (a java.lang.Object) > at > org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) > at > org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) > at > org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) > at > org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4737) > at > org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5159) > - locked <0xe8d> (a org.apache.catalina.core.StandardContext) > at > org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) > at > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726) > at > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:702) > at > org.apache.catalina.core.StandardHost.addChild(StandardHost.java:697) > at > org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1646) > at > sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:483) > at > org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300) > at > com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) > at > com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) > at > org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:463) > at > org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:413) > at > sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:483) > at > org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300) > at > com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) > at > com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) > at > javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466) > at > javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) > at > javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307) > at > javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399) > at > javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:828) > at > sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:483) > at > sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323) > at sun.rmi.transport.Transport$1.run(Transport.java:178) > at sun.rmi.transport.Transport$1.run(Transport.java:175) > at > java.security.AccessController.doPrivileged(AccessController.java:-1) > at sun.rmi.transport.Transport.serviceCall(Transport.java:174) > at > sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:557) > at > sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:812) > at > sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:671) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:744) > > > > >> Maybe you can try debugging, with a breakpoint in org.apache.naming.* >> classes? > > I don't know where I should look. I started looking at the failing lookup() > statement. > org.apache.naming.java.javaURLContextFactory#getObjectInstance() calls > ContextBindings.isThreadBound() and > ContextBindings.isClassLoaderBound() - both return false. > In tomcat 8.0.0-RC10 ContextBindings.isThreadBound() returns true and the > name resolution succeeds. > > Maybe this directs to the cause of the problem. >
I do not know, what version of hibernate you are using, but if I look at 4.3.x sources [1], the following method mentioned in your stacktrace changes TCCL and thus breaks JNDI: org.hibernate.boot.registry. classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:397) [1] https://github.com/hibernate/hibernate-orm/blob/4.3/hibernate-core/src/main/java/org/hibernate/boot/registry/classloading/internal/ClassLoaderServiceImpl.java#l384 I suggest you to ask at hibernate forums. By the way, there exists an Apache project implementing the JPA specification, http://openjpa.apache.org/ Best regards, Konstantin Kolinko --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org