Как устранить исключение /hibernate.cfg.xml not found при создании фабрики сеансов?

Я работаю над проектом предохранителя JBoss, и мне удалось решить большинство проблем с зависимостями, связанных с интеграцией с спящим режимом в версии JBoss предохранителя 6.3. Но, к сожалению, когда программа пытается создать сеанс гибернации, она выдает следующее исключение, говорящее, что не может найти файл /hibernate.cfg.xml. На следующем рисунке показана структура моего проекта. Проект содержит файл hibernate.cfg.xml внутри папки ресурсов.

введите здесь описание изображения

Исключение в точечном приложении пытается создать сеанс

      JBossFuse:karaf@root> SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found

Все исключение аналогично приведенному ниже.

Caused by: java.lang.ExceptionInInitializerError
at com.demo.activemq.HibernateUtil.buildSessionFactory(HibernateUtil.java:17)[388:DemoActiveMq1:1.0.0.SNAPSHOT]
at com.demo.activemq.HibernateUtil.<clinit>(HibernateUtil.java:8)[388:DemoActiveMq1:1.0.0.SNAPSHOT]
at com.demo.activemq.OrderProcessor.process(OrderProcessor.java:18)[388:DemoActiveMq1:1.0.0.SNAPSHOT]
at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)
... 45 more
Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found
at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173)[346:org.hibernate.core:4.2.22.Final-redhat-1]
at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2090)[346:org.hibernate.core:4.2.22.Final-redhat-1]
at org.hibernate.cfg.Configuration.configure(Configuration.java:2071)[346:org.hibernate.core:4.2.22.Final-redhat-1]
at org.hibernate.cfg.Configuration.configure(Configuration.java:2051)[346:org.hibernate.core:4.2.22.Final-redhat-1]
at com.demo.activemq.HibernateUtil.buildSessionFactory(HibernateUtil.java:13)[388:DemoActiveMq1:1.0.0.SNAPSHOT]
... 48 more

Ниже приведен мой контент HibernateUtil.java, а это строка 13 этого файла return new Configuration().configure().buildSessionFactory();

package com.demo.activemq;


import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();

private static SessionFactory buildSessionFactory() {
    try {
        // Create the SessionFactory from hibernate.cfg.xml
        return new Configuration().configure().buildSessionFactory();
    } catch (Throwable ex) {
        // Make sure you log the exception, as it might be swallowed
        System.err.println("SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

public static void shutdown() {
    // Close caches and connection pools
    getSessionFactory().close();
}

}

Ниже приведены зависимости моего файла pom.xml.

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-core</artifactId>
  <version>2.17.0.redhat-630187</version>
</dependency>
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-spring</artifactId>
  <version>2.17.0.redhat-630187</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-test-spring</artifactId>
  <version>2.17.0.redhat-630187</version>
</dependency>
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-core</artifactId>
  <version>3.1.8</version>
</dependency>
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-api</artifactId>
  <version>2.7.11</version>
</dependency>
    <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.2.22.Final-redhat-1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.14</version>
</dependency>
<dependency>
  <groupId>org.apache.servicemix.bundles</groupId>
  <artifactId>org.apache.servicemix.bundles.commons-dbcp</artifactId>
  <version>1.4_3</version>
</dependency>

Кто-нибудь сталкивался с такой проблемой? Как я могу решить эту проблему? пожалуйста, будьте любезны, чтобы оставить отзыв об этом


person casper    schedule 12.12.2016    source источник
comment
Привет. Прежде всего, у вас есть hibernate.cfg.xml файл? Если да, то где в вашем проекте находится hibernate.cfg.xml?   -  person Mickael    schedule 12.12.2016
comment
Я добавил его в папку src/main/resources. Я обновил вопрос со структурой проекта.   -  person casper    schedule 12.12.2016
comment
попробуйте это, указав полный путь к файлу cfg, Configuration().configure(./com/eclear/cfg/xml/hibernate.cfg.xml).buildSessionFactory();   -  person Noman Akhtar    schedule 12.12.2016


Ответы (2)


new Configuration().configure().buildSessionFactory() без аргумента метода устарел, из-за этого вы получаете исключение.

Измените свой метод buildSessionFactory() следующим образом:

private static SessionFactory buildSessionFactory() {
    try {
        // Create the SessionFactory from hibernate.cfg.xml
        Configuration configure = new Configuration();
        return configure.buildSessionFactory(new StandardServiceRegisteryBuilder
                                  .applySettings(configure.getProperties())
                                  .build());
    } catch (Throwable ex) {
        // Make sure you log the exception, as it might be swallowed
        System.err.println("SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}

Если столкнетесь с какой-либо проблемой, пожалуйста, дайте мне знать в комментариях.

person SachinSarawgi    schedule 12.12.2016
comment
Я получил ошибку компиляции, в которой говорится, что не удается найти StandardServiceRegisteryBuilder. Требуются ли дополнительные банки? - person casper; 12.12.2016
comment
Какие банки вы добавили, не могли бы вы отредактировать вопрос с помощью файла pom.xml? - person SachinSarawgi; 12.12.2016
comment
Какую версию спящего режима вы используете? - person SachinSarawgi; 12.12.2016
comment
Ваша спящая версия должна быть 4.x выше, например 4.3. - person SachinSarawgi; 12.12.2016
comment
Я использую версию 4.2.22.Final-redhat-1, поскольку она должна совпадать с версией предохранителя JBoss. Я добавил зависимости в вопрос. - person casper; 13.12.2016

Hibernate 4.x представил ServiceRegistry. Ваш код соответствует Hibernate 3.x стандартам. И new Configuration().configure().buildSessionFactory() был действителен в Hibernate 3.x. Поскольку вы используете Hibernate 4.x и hibernate.cfg.xml, ваш код для создания SessionFactory должен выглядеть примерно так:

Configuration config = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
              .applySettings(config.getProperties()).build();
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);

Потому что, если вы проверите документацию Hibernate для метода configure() в классе Configuration, там написано:

Используйте сопоставления и свойства, указанные в ресурсе приложения с именем hibernate.cfg.xml.

И если вы используете файл hibernate.properties, ваш код для создания объекта configuration должен выглядеть так:

Configuration config = new Configuration();
person Shyam Baitmangalkar    schedule 23.10.2017