0

persistence.xml で 3 つのデータソースを構成しています。

<?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>

1 つ目は「デフォルト」の単位です。これは、標準のエンティティ マネージャーによって使用されます。2 つ目は、Java EE 環境外で JUnit テストを実行するために必要です。3 つ目は、ロギングを 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)

アプリケーションがデプロイされたときにのみ発生します。

アイデアは、管理コンソールまたはstandalone.xmlでExampleDSを無効にするか削除することでしたが、そうすると、起動時にエラーが発生します:

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 に exampleDS が必要なのはなぜですか? RESOURCE_LOCAL永続化ユニットの構成が間違っている可能性がありますか? (しかし、もしそうなら、なぜそれらは機能するのですか)。では、ここで何が問題なのですか?

[更新]永続化ユニットからプロパティ
を削除しても、(exampleDS が有効になっていると) 起動エラーが発生しないことがわかりました。しかし、Wildfly の exampleDS を有効にしなければならないことに腹が立ちます。そうしないと、上記のアプリケーションで Wildfly が起動しません。どうしてこうなった。ここで何が問題なのですか?hibernate.hbm2ddl.autoRESOURCE_LOCAL

4

1 に答える 1

0

最初の持続性ユニットのデータソースのみを定義します。

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

つまり、WildFly はexampleDS他の永続化ユニットにデフォルトのデータソースを使用します。

構成された PostgreSQL 方言がデフォルトの H2 データソースに対して機能しないため、これにより例外が発生します。

于 2015-08-24T21:34:22.653 に答える