Wildfly 8.2.0.Final: неверная конфигурация из-за примера источника данных или файла persistence.xml?

У меня есть три источника данных, настроенных в моем файле persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
    version="2.1">

    <persistence-unit name="MyPersistenceUnit" transaction-type="JTA">
        <jta-data-source>java:jboss/datasources/myDS</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.useUnicode" value="true" />
            <property name="hibernate.connection.characterEncoding" value="UTF-8" />
            <property name="hibernate.connection.charSet" value="UTF-8" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="validate" />
        </properties>
    </persistence-unit>

    <persistence-unit name="MyPersistenceTestUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.useUnicode" value="true" />
            <property name="hibernate.connection.characterEncoding" value="UTF-8" />
            <property name="hibernate.connection.charSet" value="UTF-8" />
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/mydb" />
            <property name="hibernate.connection.username" value="myuser" />
            <property name="hibernate.connection.password" value="mypass" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="validate" />
        </properties>
    </persistence-unit>

    <persistence-unit name="MyLoggingUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.useUnicode" value="true" />
            <property name="hibernate.connection.characterEncoding" value="UTF-8" />
            <property name="hibernate.connection.charSet" value="UTF-8" />
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/mydb" />
            <property name="hibernate.connection.username" value="myuser" />
            <property name="hibernate.connection.password" value="mypass" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="validate" />
        </properties>
    </persistence-unit>

</persistence>

Первый - это модуль по умолчанию. Используется стандартным менеджером сущностей. Второе необходимо для запуска тестов JUnit вне среды Java EE. Третий используется для регистрации, чтобы быть независимым от транзакций JTA.
Это работает. Но когда я запускаю Wildfly, я даже получаю некоторые из этих ошибок (хотя я не использую H2 в своем приложении):

21:32:33,748 ERROR [org.hibernate.tool.hbm2ddl.SchemaValidator] (ServerService Thread Pool -- 51) HHH000319: Could not get database metadata: org.h2.jdbc.JdbcSQLException: Table "PG_CLASS" not found; SQL statement:
select relname from pg_class where relkind='S' [42102-173]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:331)

Это происходит только при развертывании приложения.

Идея состояла в том, чтобы отключить или удалить ExampleDS через консоль администратора или в standalone.xml, но когда я это делаю, я получаю запуск с ошибками:

21:36:20,992 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) JBAS014613: Operation ("deploy") failed - address: ([("deployment" => "com.zonacroft.mycuisine.webserver-TRUNK.war")]) - failure description: {"JBAS014771: Services with missing/unavailable dependencies" => [
    "jboss.persistenceunit.\"com.mydomain.myapp.webserver-TRUNK.war#MyLoggingUnit\".__FIRST_PHASE__ is missing [jboss.data-source.java:jboss/datasources/ExampleDS]",
    "jboss.persistenceunit.\"com.mydomain.myapp.webserver-TRUNK.war#MyPersistenceTestUnit\".__FIRST_PHASE__ is missing [jboss.data-source.java:jboss/datasources/ExampleDS]"

Что здесь происходит? Зачем этому persistence.xml нужен пример DS? Являются ли RESOURCE_LOCAL единицы персистентности могут быть неправильно настроены? (Но если так, то почему они работают тогда). Так в чем здесь проблема?

[ОБНОВИТЬ]
Я понял, что я не получаю ошибки при запуске (с включенным exampleDS), когда я удаляю hibernate.hbm2ddl.auto свойства из RESOURCE_LOCAL единицы постоянства. Но меня раздражает, что я должен разрешить exampleDS Wildfly. В противном случае Wildfly не запустится с приложением, как описано выше. Почему это так? Что здесь не так?

1 ответ

Решение

Вы определяете источник данных только для первого модуля персистентности:

<jta-data-source>java:jboss/datasources/myDS</jta-data-source>

Это означает, что WildFly использует источник данных по умолчанию exampleDS для ваших других единиц персистентности.

Это вызывает исключение, поскольку настроенный диалект PostgreSQL не работает для источника данных H2 по умолчанию.

Другие вопросы по тегам