Несколько конфигураций гибернации для нескольких приложений War в JBoss

У меня работает JBoss AS 6.

  • Я развернул несколько приложений War. Все эти приложения получают доступ к БД через конфигурацию спящего режима.

  • Я настроил источники данных в JBoss, один DS для каждого приложения War, потому что они используют разные учетные записи пользователей БД. Затем в каждом приложении я настраиваю hibernate.cfg.xml и указываю соответствующий DS, который будет использоваться. У каждой войны есть свои hibernate.cfg.xml.

  • В изолированном состоянии каждое приложение работает отлично. Я запускаю сервер, тестирую приложение, выключаю сервер. Все нормально.

  • Проблемы возникли, когда я запустил сервер и начал использовать все приложения. Первое приложение, установившее соединение с БД, кажется, работает нормально, но следующее может показать некоторые проблемы, связанные с:

    1. Non-existing hibernate entity mappings.
    2. Несуществующие таблицы БД.

Мои теории:

  1. Соответствующий hibernate.cfg.xml не был загружен, и местоположения сопоставлений не были загружены. Когда выполняется запрос, hibernate ничего не знает о таком объекте.

  2. Соответствующий hibernate.cfg.xml не был загружен, и для подключения к БД используется другая учетная запись пользователя. Некоторые таблицы видны только некоторым пользователям.

Мой вопрос:

Почему приложения неправильно загружают соответствующие hibernate.cfg.xml?


person user1048492    schedule 15.11.2011    source источник


Ответы (1)


Я не знаю, почему использование файлов cfg.xml не работает, но большинство приложений JBoss/Hibernate, которые я вижу в наши дни, используют JPA. Если вы не получите ответ, может быть, попробовать это? Это довольно просто, просто добавьте файл persistence.xml в папку META-INF, который выглядит примерно так:

<?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");

Не предполагая, что вы не можете заставить это работать с файлом конфигурации, просто предлагая альтернативу...

person javatestcase    schedule 16.11.2011