Как использовать Liquibase для обновления базы данных во встроенном экземпляре Glassfish

Я нахожусь в процессе преобразования нашего управления БД в Liquibase. Это хорошо работает.

В качестве следующего шага я хочу убедиться, что все будущие модификации будут проверены перед развертыванием в общих средах, стиль непрерывной интеграции. Я пытаюсь сделать это, используя следующую настройку:

  • Создайте наше ухо, содержащее веб-сервисы EJB
  • С помощью maven-embedded-glassfish-plugin запустить встроенный экземпляр Glassfish 3 во время предварительного тестирования maven ohase
    • Создать мой источник данных как часть начальной цели
    • Развернуть ухо во время развертывания цели
  • Все еще в предварительном тесте интеграции, я запускаю liquibase: обновление по тому же URL базы данных. В этом случае база данных файла H2
  • Затем я хочу запустить наши тесты SoapUI на развернутом приложении

Но когда я зашел так далеко, приложение не может найти никаких данных в базе данных. Таким образом, вопрос в том, пропустил ли я что-то в своей настройке или есть лучший способ организовать мою намеченную цель?

pom.xml, встроенный Glassfish

  <plugin>
    <groupId>org.glassfish.embedded</groupId>
    <artifactId>maven-embedded-glassfish-plugin</artifactId>
    <version>4.0</version>
    <configuration>
      <ports>
        <http-listener>9090</http-listener>
        <https-listener>9191</https-listener>
      </ports>
      <goalPrefix>embedded-glassfish</goalPrefix>
      <app>${project.build.directory}/school-application-${project.version}.ear</app>
      <name>school-application</name>
      <commands>
        <command>create-jdbc-connection-pool --datasourceclassname=org.h2.jdbcx.JdbcDataSource --restype=javax.sql.DataSource --property URL=jdbc\:h2\:~/tmpLB\;AUTO_SERVER\=TRUE schoolDSPool</command>
        <command>create-jdbc-resource --connectionpoolid schoolDSPool jdbc/schoolDS</command>
      </commands>
    </configuration>
    <dependencies>
      <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.3.176</version>
      </dependency>
    </dependencies>
    <executions>
      <execution>
        <goals>
          <goal>start</goal>
          <goal>admin</goal>
          <goal>deploy</goal>
          <goal>undeploy</goal>
          <goal>stop</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

pom.xml, Liquibase

  <plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.1.1</version>
    <dependencies>
      <dependency>
        <groupId>company.school</groupId>
        <artifactId>school-db</artifactId>
        <version>${project.version}</version>
        <systemPath>../school-db/target</systemPath>
        <type>jar</type>
      </dependency>
      <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.3.176</version>
      </dependency>
    </dependencies>
    <executions>
      <execution>
        <phase>integration-test</phase>
        <configuration>
          <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
          <changeLogFile>db.changelog-master.xml</changeLogFile>
          <driver>org.h2.Driver</driver>
          <url>jdbc:h2:~/tmpLB;AUTO_SERVER=TRUE</url>
          <logging>info</logging>
        </configuration>
        <goals>
            <goal>update</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

У меня есть один набор изменений в журнале изменений, вставляющий данные в целевые таблицы.

  1. Правильно ли настроены пользователи?
  2. Есть ли способ запустить Liquibase в том же процессе, что и Glassfish и использовать mem: вместо базы данных?

Спасибо и привет, Кристиан

1 ответ

Итак, было "простое" решение проблемы.

В базе данных не было данных, так как этот набор изменений в журнале изменений не мог завершиться. У меня были операторы вставки в отдельный файл SQL, который я вызвал с помощью <sqlFile> Жидкостная метка. Но вставка нарушила некоторые ограничения внешнего ключа и не была выполнена.

Поэтому меня поразил тот факт, что Liquibase, похоже, скрывает любые ошибки из включенных файлов sql. Постараюсь воспроизвести это, и Джира это, если мне удастся.

/ Христианская

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