【问题标题】:Multiple hibernate configurations for multiple War applications in JBossJBoss 中多个 War 应用程序的多个休眠配置
【发布时间】:2011-11-15 21:41:36
【问题描述】:
我正在运行 JBoss AS 6。
我已经部署了多个 War 应用程序。所有这些应用都通过休眠配置访问数据库。
我在 JBoss 中配置了数据源,每个 War 应用程序一个 DS,因为它们使用不同的 DB 用户帐户。然后在每个应用程序中,我配置hibernate.cfg.xml 并说明要使用的相应DS。每场战争都有自己的hibernate.cfg.xml。
隔离后,每个应用程序都能完美运行。我启动服务器,测试应用程序,关闭服务器。一切正常。
-
当我启动服务器并开始使用所有应用程序时出现问题。
第一个与数据库建立连接的应用程序似乎工作正常,但以下可能会显示一些与以下相关的问题:
- 不存在的休眠实体映射。
- 不存在的数据库表。
我的理论:
未加载对应的hibernate.cfg.xml,也未加载映射的位置。执行查询时,hibernate 不知道此类实体。
未加载相应的hibernate.cfg.xml,并且正在使用不同的用户帐户连接到数据库。有些表格只对部分用户可见。
我的问题是:
为什么应用程序没有正确加载相应的 hibernate.cfg.xml?
【问题讨论】:
标签:
java
hibernate
war
jboss6.x
【解决方案1】:
我不知道为什么使用 cfg.xml 文件不起作用,但我最近看到的大多数 JBoss/Hibernate 应用程序都使用 JPA。如果您没有得到答案,也许可以尝试一下?这很简单,只需在 META-INF 文件夹中添加一个 persistence.xml,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="MyService" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>java:/jdbc/myDB</non-jta-data-source>
<class>com.mydomain.service.entities.Entity</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
您可以通过多种方式解决持久性问题,但这很有效:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyService");
并不是说你不能用配置文件来解决这个问题,只是提供一个替代方案......