PDA

View Full Version : servlet context init: CGLIB can't see HibernateProxy



Beta User
Jun 15th, 2008, 03:09 PM
Hello,

while initializing a spring servlet context that refers to a a bean that is a Hibernate 3 SessionFactory, CGLIB can't see (classloader) org.hibernate.proxy.HibernateProxy...

Thanks for any tips,
Lieven

Long exception stack:
=================
[2008-06-15 22:49:52.268] async-delivery-thread-1 org.springframework.web.servlet.DispatcherServlet. unknown E Context initialization failed
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'dataAccess' defined in ServletContext resource [/WEB-INF/badgeidsim-servlet.xml]: Cannot resolve reference to bean 'mySessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.f
actory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in ServletContext resource [/WEB-INF/badgeidsim-servlet.xml]: Invocation of init method failed; nested exception is net.sf.cglib.core.CodeGenerationException:
[ .. snip .. ]
Caused by: org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'mySessionFactory' defined in ServletContext resource [/WEB-INF/badgeidsim-servlet.xml]: Invocation of init method failed; nested exception is net.sf.cglib.core.CodeGene
rationException: java.lang.reflect.InvocationTargetException-->null
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.initializeBean(Abstract AutowireCapableBeanFactory.java:1336)
[ .. snip .. ]
at org.springframework.beans.factory.support.BeanDefi nitionValueResolver.resolveReference(BeanDefinitio nValueResolver.java:269)
... 54 more
Caused by: net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
at net.sf.cglib.core.AbstractClassGenerator.create(Ab stractClassGenerator.java:237)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer. java:377)
at net.sf.cglib.proxy.Enhancer.createClass(Enhancer.j ava:317)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitialize r.getProxyFactory(CGLIBLazyInitializer.java:127)
at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.p ostInstantiate(CGLIBProxyFactory.java:43)
at org.hibernate.tuple.entity.PojoEntityTuplizer.buil dProxyFactory(PojoEntityTuplizer.java:162)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:135)
at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
at org.hibernate.tuple.entity.EntityEntityModeToTupli zerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:302)
at org.hibernate.persister.entity.AbstractEntityPersi ster.<init>(AbstractEntityPersister.java:434)
at org.hibernate.persister.entity.SingleTableEntityPe rsister.<init>(SingleTableEntityPersister.java:109)
at org.hibernate.persister.PersisterFactory.createCla ssPersister(PersisterFactory.java:55)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
at org.hibernate.cfg.Configuration.buildSessionFactor y(Configuration.java:1300)
at org.springframework.orm.hibernate3.LocalSessionFac toryBean.newSessionFactory(LocalSessionFactoryBean .java:814)
at org.springframework.orm.hibernate3.LocalSessionFac toryBean.buildSessionFactory(LocalSessionFactoryBe an.java:732)
at org.springframework.orm.hibernate3.AbstractSession FactoryBean.afterPropertiesSet(AbstractSessionFact oryBean.java:211)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeInitMethods(Abstr actAutowireCapableBeanFactory.java:1367)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.initializeBean(Abstract AutowireCapableBeanFactory.java:1333)
... 64 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at net.sf.cglib.core.ReflectUtils.defineClass(Reflect Utils.java:384)
at net.sf.cglib.core.AbstractClassGenerator.create(Ab stractClassGenerator.java:219)
... 83 more
Caused by: java.lang.NoClassDefFoundError: org/hibernate/proxy/HibernateProxy
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java :675)
... 89 more

Dave Syer
Jun 15th, 2008, 11:23 PM
Looks like the same problem as here: http://www.springsource.com/beta/applicationplatform/comments.php?DiscussionID=143&page=1#Item_12 (but with a different symptom). The solution is probably the same.

Beta User
Jun 17th, 2008, 04:48 AM
Thanks, was indeed the same problem.

I had actually read through the discussion item you mention, but I figured, since I have everything sitting in one big bundle, that couldn't be the issue.
Well, everything, except for some data beans in a separate bundle.
So when hibernate tries to construct a proxy class with CGLIB, apparently it's the pojo's classloader that tries to look up the HibernateProxy interface...

kind regards
Lieven