0

私は、データベース管理を Liquibase に変換中です。こちらは順調に進んでいます。

次のステップとして、共通の環境、継続的インテグレーション スタイルに展開する前に、将来のすべての変更がテストされることを保証したいと思います。次の設定を使用してこれを実行しようとしています。

  • EJB Web サービスを含む ear を構築する
  • maven-embedded-glassfish-plugin統合前のテスト中にGlassfish 3の埋め込みインスタンスを起動するために 使用するmaven ohase
    • 開始目標の一部としてデータソースを作成する
    • 展開ゴール中に耳を展開する
  • まだ統合テスト前ですが、同じデータベース URL で liquibase:update を実行します。この場合、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、リキベース

  <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 つの変更セットがあります。

  1. 適切なユーザーを設定していますか?
  2. Glassfish と同じプロセスで Liquibase を実行し、mem:代わりにデータベースを使用する方法はありますか?

敬具、クリスチャン

4

1 に答える 1

0

さて、この問題には「簡単な」解決策がありました。

liquibase 変更ログの変更セットが完了できなかったため、データベースにデータがありませんでした。私は、<sqlFile>liquibase タグを使用して呼び出した別の sql ファイルに挿入ステートメントを入れました。しかし、挿入はいくつかの外部キー制約に違反しており、実行されませんでした。

だから私を先延ばしにしたのは、Liquibase が含まれている sql ファイルからエラーを隠しているように見えるという事実でした。成功したら、それを再現して Jira を試してみます。

/キリスト教徒

于 2014-04-23T10:50:43.010 に答える