【问题标题】:Using Hibernate inside a Glassfish 3 web service在 Glassfish 3 Web 服务中使用 Hibernate
【发布时间】:2010-08-18 22:36:00
【问题描述】:

我有一个使用 Hibernate 进行持久性的 Java 应用程序。现在我正在尝试将这个应用程序的一部分公开为部署到 Glassfish 3.0.1 的 Web 服务。

实现该服务的代码位于一个 JAR 文件中,该文件与 WAR 文件一起部署到 Glassfish 中。 WAR中的服务代码访问JAR文件中使用Hibernate的类没有问题。

但是,当我尝试调用该服务时,会引发异常,提示 Hibernate 找不到 hibernate.cfg.xml 文件。对于我的一生,我无法弄清楚 .cfg 文件应该放在 JAR、WAR 还是 Glassfish 中的哪个位置,以便可以在类路径中找到它。

我尝试将它放在 WAR 文件中的 META-INF 目录中(当我检查 WAR 时,它实际上是“meta-inf”)和 JAR 中的同一目录中。我还尝试在几个不同的 Glassfish 目录中创建 META-INF 目录,但均无济于事。

在 Eclipse 中开发此服务时,为了将其放入类路径中,我不得不考虑将 .cfg 文件放在何处。似乎这也是将其部署到 GF 时的问题。

谁能告诉我 .cfg 文件应该放在哪里,以便在 GF 中部署此服务时可以访问它?

谢谢,

克里斯

【问题讨论】:

    标签: java hibernate orm glassfish


    【解决方案1】:

    如果您使用的是无参数 Configure#configure() 方法,则 hibernate.cfg.xml 文件应位于类路径的

    这是来自o.h.c.Configuration.java的相关sn-p:

    /**
     * Use the mappings and properties specified in an application
     * resource named <tt>hibernate.cfg.xml</tt>.
     */
    public Configuration configure() throws HibernateException {
        configure( "/hibernate.cfg.xml" );
        return this;
    }
    
    /**
     * Use the mappings and properties specified in the given application
     * resource. The format of the resource is defined in
     * <tt>hibernate-configuration-3.0.dtd</tt>.
     * <p/>
     * The resource is found via <tt>getConfigurationInputStream(resource)</tt>.
     */
    public Configuration configure(String resource) throws HibernateException {
        log.info( "configuring from resource: " + resource );
        InputStream stream = getConfigurationInputStream( resource );
        return doConfigure( stream, resource );
    }
    

    这实际上记录在 Hibernate Core 参考指南中:

    3.7. XML configuration file

    另一种方法 配置是指定一个完整的 在一个名为的文件中配置 hibernate.cfg.xml。这个文件可以 用作替代品 hibernate.properties 文件,或者,如果 两者都存在,要覆盖 属性。

    XML 配置文件默认位于 你的 CLASSPATH。 (...)

    【讨论】:

    • 谢谢,Pascal,但我面临的问题是,在 Glassfish 中,什么位置被认为位于“CLASSPATH 的根目录”中?具体来说,.cfg 文件应该放在已部署的 WAR 文件、包含的 JAR 文件中还是直接放在 Glassfish 部署目录中的什么位置?
    • @Chris 在WEB-INF/lib 内的JAR 的根目录,或WEB-INF/classes 的根目录,或位于webapp 类路径上的GlassFish 目录的根目录。只要它在根目录下。
    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多