论坛首页 Java企业应用论坛

tomcat 5 + hibernate遇到麻烦!!

浏览 4092 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-04-07  
conf.configure(this.getClass().getResource("hibernate.cfg.xml"));
new SchemaExport(conf).create(true, true);
SessionFactory sessionFactory = conf.buildSessionFactory();

上面的代码1,2行全部通过,数据库中表也建立了,但第三句在页面上抛出异常:
java.lang.ClassCastException
net.sf.cglib.reflect.FastClass$Generator.create(FastClass.java:92)
net.sf.cglib.reflect.FastClass.create(FastClass.java:74)
net.sf.hibernate.persister.AbstractEntityPersister.(AbstractEntityPersister.java:757)
net.sf.hibernate.persister.EntityPersister.(EntityPersister.java:715)
net.sf.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:41)
net.sf.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:137)
net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:750)
TestServlet.doGet(TestServlet.java:72)
javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


谁能指点一二?
   发表时间:2004-04-08  
hibernate2.x后必须使用cglib2.0! 以前老板本的cglib相关的东西必须从classpath中移去,包括ASM的东西好像叫asm.jar
0 请登录后投票
   发表时间:2004-04-08  
我下午到sourceforge.net上下载了cglib的最新版本,然后删除老用上新的,但结果还是同样的错误.我感到我已实在没有办法解决了,谁能给一个TOMCAT下的实例?给我点信心.
随便说一句,这样的情况只是在tomcat(我只试了TOMCAT)上遇到,如果以应用程序的方式则能正常运行
0 请登录后投票
   发表时间:2004-04-08  
我猜测你的问题在于CLASSPATH,也就是说你的JSP其实并没有找到你的hibernate.cfg.xml。

在一个Web容器中,CLASSPATH和应用程序环境是不完全相同的,你的代码在应用程序环境能够跑通不意味着在Web容器中仍然可以跑通。

this.getClass();.getResource("hibernate.cfg.xml"););


用Class对象去load资源的时候,默认情况下是从程序本身当前目录开始寻找资源文件的,如果运行你这行代码的程序和hibernate.cfg.xml不在同一个目录下,就肯定会找不到的。

TestServlet.doGet(TestServlet.java:72); 


但是通过Class对象去load资源有个不太好的地方,就是如果资源文件找不到,是不会报异常的,会继续执行下去,所以到下面用到该对象的地方,而该对象又没有被创建,往往就会报NullPointerException。这往往让程序员找不到真正出错的原因。

向你这种情况,我其实很不理解你为什么要采用这种资源加载方式的,你可以试试看这样来做:

conf.configure();; 


或者

conf.configure("/hibernate.cfg.xml");; 


或者

conf.configure(this.getClass();.getResource("/hibernate.cfg.xml"););; 


这样ClassLoader就知道应该从CLASSPATH的根开始找,也就是从WEB-INF/classes下面找起,而不是在你的TestServlet.class同级目录下面寻找。
0 请登录后投票
   发表时间:2004-04-09  
经过坚持不懈的努力,问题终于解决了,原来hibernate自带的CGLIB包不对,我到sourceforge.net下载了cglib-full-2.0.jar就通过了,甚至于cglib-2.0.jar都不行,有某些类找不到,唉,真是整死人了.
说实在的,我都不敢肯定,明天我到另一台机器会不会出现其它的莫名其妙的问题,悲哀!
0 请登录后投票
   发表时间:2004-04-09  
不过我真的不明白,人家为什么能通过呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics