Announcement Announcement Module
Collapse
No announcement yet.
Exception in integration with Hibernate when using my own classloader Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • Exception in integration with Hibernate when using my own classloader

    Hi, Folks,
    The exception as below:
    Code:
    Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [com/abc/beansContext.xml]: Invocation of init method failed; nested exception is net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1337)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423)
    	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
    	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
    	at com.abc.SpringBeansLoader.<init>(SpringBeansLoader.java:33)
    	at com.abc.SpringBeansLoader.getInitializer(SpringBeansLoader.java:48)
    	at com.abc.ObjectService.getConfigMgr(ObjectService.java:9)
    	at com.telenav.map.content.depend.classloader.TestLoader.main(TestLoader.java:30)
    Caused by: net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
    	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:237)
    	at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
    	at net.sf.cglib.proxy.Enhancer.createClass(Enhancer.java:317)
    	at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:127)
    	at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:43)
    	at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(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.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
    	at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:295)
    	at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:434)
    	at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109)
    	at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
    	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
    	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
    	at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814)
    	at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:732)
    	at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1368)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
    	... 18 more
    Caused by: java.lang.reflect.InvocationTargetException
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384)
    	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219)
    	... 37 more
    Caused by: java.lang.NoClassDefFoundError: org/hibernate/proxy/HibernateProxy
    	at java.lang.ClassLoader.defineClass1(Native Method)
    	at java.lang.ClassLoader.defineClass(Unknown Source)
    	... 43 more
    Caused by: java.lang.ClassNotFoundException: org.hibernate.proxy.HibernateProxy
    	at java.net.URLClassLoader$1.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    	... 45 more
    The main method:
    Code:
        public static void main(String[] args) throws Exception {
            CPClassLoader ccl = new CPClassLoader(TestLoader.class.getClassLoader(), "project1");
            Thread.currentThread().setContextClassLoader(ccl);
            ccl.setDefintion("d:/work/project1/lib", "d:/work/project1/classes");
            Class clazz1 = ccl.loadClass ("com.abc.ObjectService");
            IService service = (IService)clazz1.newInstance();
            IConfigMgr mgr = service.getConfigMgr();
            mgr.setValue("AAAAA", "TestKey", "TestValue");
            System.out.println(mgr.getValue("AAAAA", "TestKey"));
            Collection<Config> configs = mgr.getConfigs("AAAAA");
        }
    1) I have my own classloader named CPClassLoader which extends from URLClassLoader; and it's surely all of the necessary .jar files are put into the folder "d:/work/project1/lib".
    2) The "ObjectService" class is put into the "D:/work/project1/classes" and it will initializes the ApplicationContext when "service.getConfigMgr()"; the exception occurs when the applicationcontext initializing.
    3) It will success when I do not put any DB beans (hibernate etc) in the spring applicationcontext.xml;
    4) Please pay attention to the last lines of the Exception, it seems the application requests the class "org.hibernate.proxy.HibernateProxy" not using my own classloader.
    5) I debug the code and found the exception thrown in cglib, after it tried to load the class "Config" with the AppClassLoader (not my own, I think it is right) , which is also the pojo class mapping to DB, because the main method may need the "Config" pojo class, so I do not put that class under the folder "d:/work/project1/classes".
    I think it's maybe the the fault of cglib; the POJO class "Config" should be put under the folder "d:/work/project1/classes"? How can I do when I want the POJO class both in the main method and DB access?

    Thanks
    RedAvens

  • #2
    I am not familiar with the CGLIB, is there anyone could help me?

    Comment

    Working...
    X