我正在研究一个JBoss保险丝项目,我能够解决与JBoss fuse 6.3版本上与hibernate集成相关的大部分依赖性问题。但不幸的是,当程序尝试创建hibernate会话时,它会给出以下异常,说它无法找到/hibernate.cfg.xml
文件。下图显示了我的项目结构。 Project包含resources文件夹中的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>
有没有人遇到过这种问题?我该如何解决这个问题?请善意提供有关此
的反馈答案 0 :(得分:0)
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);
}
}
如果遇到任何问题,请在评论中告诉我。
答案 1 :(得分:0)
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);
因为,如果您在configure()
类中检查Configuration
方法的Hibernate文档,它会说:
使用应用程序资源中指定的映射和属性 名为hibernate.cfg.xml。
如果您使用的是hibernate.properties
文件,那么创建configuration
对象的代码应该是这样的:
Configuration config = new Configuration();