论坛首页 Java版 Tomcat

Hibernate 应用程序在Tomcat 下的发布 - hibernate.cfg.xml ?

浏览 6449 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2003-11-14
在 Tomcat 下面发布使用了 Hibernate 的程序, 我按照下面的目录结构发布可以成功:

[code:1]
%Tomcat_Home%
      |
    webapps
      |
    myHiberApp1
      └─WEB-INF
          ├─classes
          │  │ Course.hbm.xml 
          │  │ hibernate.cfg.xml
          │  │
          │  └─com
           │      └─Hejrcc
           │          └─hibernate
           │                course.class
           │     courseBean.class
           │     courseTest.class
           └─lib
              hibernate2.jar
       ...

           Index.jsp
           ...
[/code:1]

问题是1:

  我把 lib 下的 hibernate2.jar, 以及其他 .jar 文件 放到    $CATALINA_HOME/shared/lib. 下面,
  报错: /hibernate.cfg.xml not found

我查找了 Tomcat 的文档, 上面说:
1 如果是就这个应用程序使用, 则把*.jar 文件放myHiberApp1/WEB-INF/lib.
2 若是所有应用程序都要用, 则把 *.jar 文件放到  $CATALINA_HOME/shared/lib 下面,

为什么我把 hibernate2.jar  以及其他的 .jar 文件放到 $CATALINA_HOME/shared/lib 下面程序通不过?

问题2:
在连接数据库, 持久化对象的时候, 可以按照下面这样来写代码: 
// 装载配置,构造SessionFactory对象
[code:1]sessionFactory = new Configuration().configure().buildSessionFactory();[/code:1]

我查找了 Hibernate 的 文档,
confirgure() - Use the mappings and properties specified in an
    application resource named hibernate.cfg.xml
buildSessionFactory() - Instantiate a new SessionFactory, using
     the properties and mappings in this configuration

在 confirgure() 这个对象实例化时, 会去读取 hibernate.cfg.xml
我发现只有按照我上面说的那样的目录结构存放才能找到这个文件,
放到其他地方就报错: /hibernate.cfg.xml not found.

我的问题是:
  I.) Hibernate 是按照一个怎么样的路径去找这个 hibernate.cfg.xml  文件的?
  II) hibernate.cfg.xml , 和 Course.hbm.xml 这些文件可以放到哪些目录下?

问题3:
  当我用 hibernate.properties 来设置数据库连接时,
  把 hibernate.properties 放在 classes 的根目录下, 把 Course.hbm.xml放在 course.class 相同的路径下, 程序可以运行通过.

这时候连接数据库的代码如下:
[code:1]Configuration conf = new Configuration().addClass(AccUser.class);
sessionFactory = conf.buildSessionFactory();[/code:1]

在这种情况下 Hibernate 又是按照什么样的路径来装载 hibernate.properties  和 Course.hbm.xml 的 ?
   
最后更新时间:2003-11-14
hbm放在和它对应的Class在一起。 hibernate.cfg.xml或者hibernate.properties放到和hibernate2.jar同一级别的ClassLoader下面。

你把hibernate2.jar放到shared目录下, hibernate.cfg.xml放到下一级的ClassLoader,当然会找不到了。你仔细看看我在Java企业版的分析ClassLoader的文章。

你把hibernate相关类库放到WEB-INF/lib下就可以了,或者把hibernate相关的配置文件也放到shared目录下去。
   
0 请登录后投票
最后更新时间:2003-11-14
hhquan 写道
properties文件所放位置不一定要和hibernate.jar放在一起,我把hibernate.jar 放在common/lib下,把properties文件放在myweb\web-inf\classes下,可以运行


是不一定要放到一起,但是properties文件所在的ClassLoader的级别一定要等于或者高于hibernat2.jar,你的例子能通过肯定有其他的因素影响。

load hibernate2.jar的ClassLoader去找properties的时候,先在CLASSPATH里面找,找不到就申请上一级ClassLoader去找,无论如何不可能出现让下一级ClassLoader去找的事情。
   
0 请登录后投票
最后更新时间:2003-11-16
至于放在哪里可以, 我测试了有3种方法是可以的:

1)  hibernate.properties 放在 classes 根目录, Course.hbm.xml 放在 .class 目录.
2)  hibernate.properties, Course.hbm.xml 均放在 classes 根目录.
3)  hibernate.cfg.xml, Course.hbm.xml 均放在 classes 根目录.

只是, 对于 Tomcat 的文档上面说的我还是不理解, 难道我理解有错误?
大家来看看 Tomcat 文档的 Class Loader HOW-TO 部分:

引用
For classes and resources specific to a particular web application, place unpacked classes and resources under /WEB-INF/classe of your web application archive, or place JAR files containing those classes and resources under /WEB-INF/lib of your web application archive.

For classes and resources that must be shared across all web applications, place unpacked classes and resources under $CATALINA_HOME/shared/classes, or place JAR files containing those classes and resources under $CATALINA_HOME/shared/lib.


我的理解是:
1 如果是就这个应用程序使用, 则把*.jar 放到 myHiberApp1/WEB-INF/lib.
2 若是所有应用程序都要用, 则把 *.jar 文件放到$CATALINA_HOME/shared/lib 下面

按照文档所说,
我把 hibernate2.jar 以及其他的 .jar 文件放到 $CATALINA_HOME/shared/lib 下面程序通不过 ???

而我把 hibernate2.jar 放到 MyApp1/WEB-INF/LIB 目录下面程序就可以通过,

对 Tomcat 文档上面的那段话实在不理解, 谁知道, 请告诉我一下,
我自己也仔细想想, 也许不久就会有答案 ^_^
   
0 请登录后投票
最后更新时间:2003-11-17
这是当然的了,你再仔细看看那里有一个ClassLoader的层次关系图,hibernate2.jar需要去找hibernate.properties,但是你把hibernate2.jar放到shared目录下,由 Shared ClassLoader去load hibernate.properties,当然会找不到。而把hibernate2.jar放到WEB-INF/lib下,是web app ClassLoader去找hibrenate.properties,当然就可以找到,看来你还是没有仔细看我上面写的东西。
   
0 请登录后投票
论坛首页 Java版 Tomcat

跳转论坛:
JavaEye推荐