Как правильно определить файл persistence.xml для интеграции и модульного тестирования? - PullRequest
0 голосов
/ 27 мая 2019

У меня возникла проблема с интеграционным тестированием и подключением к БД, и я до сих пор не могу выяснить проблему ... Готов поспорить, это в моем файле persistence.xml, но я не могу найти то, что мне не хватает.

Первый файл persistence.xml расположен в ad-service/src/main/resources/META-INF/persistence.xml и имеет вид:

<?xml version="1.0" encoding="UTF-8"?>
<persistence
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="AdPU" transaction-type="JTA">
        <jta-data-source>java:jboss/datasources/adds</jta-data-source>
        <properties>
          <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.dialect"
                value="org.hibernate.dialect.PostgreSQLDialect" />

            <property name="hibernate.hbm2ddl.charset_name" value="UTF-8"/> 
            <property name="hibernate.connection.CharSet" value="UTF-8"/>
            <property name="hibernate.connection.characterEncoding" value="UTF-8"/>
            <property name="hibernate.connection.useUnicode" value="true"/>

            <property name="javax.persistence.sql-load-script-source" value="META-INF/load.sql"/>
        </properties>
    </persistence-unit>
</persistence>

Второй файл persistence.xml для тестирования (как интеграции, так и модульного тестирования) находится в ad-service/src/test/resources/META-INF/persistence.xmlи это:

<?xml version="1.0" encoding="UTF-8"?>
<persistence
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="AdPUTest"
        transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>domain.model.Ad</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
            <property name="javax.persistence.jdbc.url"
                value="jdbc:h2:mem:AdPUTestDB;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE" />
            <property name="javax.persistence.jdbc.user" value="ad" />
            <property name="javax.persistence.jdbc.password" value="ad" />

            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.dialect"
                value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.id.new_generator_mappings" value="true" />
            <property name="hibernate.hbm2ddl.charset_name" value="UTF-8"/> 
            <property name="javax.persistence.sql-load-script-source" value="META-INF/instruments_test_data.sql"/>
        </properties>
    </persistence-unit>
</persistence>

У меня как ошибка:

Caused by: org.wildfly.swarm.container.DeploymentException: THORN0004: Deployment failed: {
"WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.jboss.datasources.adds"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"ad-service-0.2.0-SNAPSHOT.war#AdPU\".__FIRST_PHASE__ is missing [jboss.naming.context.java.jboss.datasources.adds]",
"jboss.persistenceunit.\"ad-service-0.2.0-SNAPSHOT.war#AdPU\" is missing [jboss.naming.context.java.jboss.datasources.adds]"]
}

Я до сих пор не получаю эту ошибку .. что я пропускаю?

(Для файла ../test/../persistence.xml я вдохновился этим:

<?xml version="1.0" encoding="UTF-8"?>
<persistence
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="CounterpartyPUTest"
        transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>domain.model.Address</class>
        <class>domain.model.Counterparty</class>
        <class>domain.model.Registration</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
            <property name="javax.persistence.jdbc.url"
                value="jdbc:h2:mem:CounterpartyDB;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE" />
            <property name="javax.persistence.jdbc.user" value="sa" />
            <property name="javax.persistence.jdbc.password" value="sa" />

            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.dialect"
                value="org.hibernate.dialect.H2Dialect" />
            <property name="hibernate.id.new_generator_mappings" value="true" />
            <property name="hibernate.hbm2ddl.charset_name" value="UTF-8"/> 
            <property name="javax.persistence.sql-load-script-source" value="META-INF/instruments_test_data.sql"/>
        </properties>
    </persistence-unit>
</persistence>

и для .../main/../persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="CounterpartyPU"
        transaction-type="JTA">
        <jta-data-source>java:jboss/datasources/counterpartyds</jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.dialect"
                value="org.hibernate.dialect.H2Dialect" />

            <property name="hibernate.hbm2ddl.charset_name" value="UTF-8"/> 
            <property name="hibernate.connection.CharSet" value="UTF-8"/>
            <property name="hibernate.connection.characterEncoding" value="UTF-8"/>
            <property name="hibernate.connection.useUnicode" value="true"/>

            <property name="javax.persistence.sql-load-script-source" value="META-INF/load_sample.sql"/>
        </properties>
    </persistence-unit>
</persistence>

У меня также есть project-default.yml что:

thorntail:
  datasources:
    data-sources:
      adds:
        driver-name: myh2
        connection-url: jdbc:h2:mem:adDB;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
        user-name: ad
        password: ad 
    jdbc-drivers:
      myh2:
        driver-class-name: org.h2.Driver
        xa-datasource-name: org.h2.jdbcx.JdbcDataSource
        driver-module-name: com.h2database.h2
      postgresql:
        driver-class-name: org.postgresql.Driver
        xa-datasource-class-name: org.postgresql.xa.PGXADataSource
        driver-module-name: org.postgresql   

Любые идеи? Я до сих пор не понимаю, если есть проблема, если диалект PostGreSQL, и я использую в качестве драйвера H2 (это драйвер, который я взял из правильногофайлы).

Любая помощь, вы будете драгоценны .. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...