0

DB 관리를 Liquibase로 변환하는 중입니다. 이것은 멋지게 달리고 있습니다.Liquibase를 사용하여 Glassfish 인스턴스의 데이터베이스를 업데이트하는 방법

이후 단계에서는 일반적인 환경 (지속적인 통합 스타일)에 배포하기 전에 모든 향후 수정 사항을 테스트합니다. 나는 다음과 같은 설정을 사용하여이 작업을 수행하려고 :

  • 우리의 귀를 포함하는 EJB의 웹 서비스는 사전 통합 테스트 받는다는 동안 글래스 피시 3에 내장 된 인스턴스를 시작 maven-embedded-glassfish-plugin를 사용
    • 내 데이터 소스를 작성 ohase 구축 시작 목표의 일환으로
    • 는 사전 통합 테스트에서 여전히
  • , 나는 liquibase을 배포 목표 중
  • 배포 귀를 실행 : 업데이 트를 같은 databas에 e URL. 이 경우에는 H2 파일 데이터베이스
  • 난 후 배포 된 응용 프로그램

우리 SoapUI 테스트를 실행하려면하지만 난 얻을 때까지 응용 프로그램이 데이터베이스의 모든 데이터를 찾을 수 없습니다. 그래서 질문은 제가 설치 프로그램에서 뭔가를 놓친 경우 또는 내 의도 된 목표를 구성하는 더 좋은 방법이 있다면 무엇입니까?

의 pom.xml 임베디드 글래스 피시

<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. Glassfish와 동일한 프로세스에서 Liquibase를 실행하고 대신 mem: 데이터베이스를 사용하는 방법이 있습니까?

들으와 관련, 기독교

답변

0

좋아, 그래서이 문제에 대한 "쉬운"해결책이었다.

liquibase 변경 로그의 변경 집합을 완료 할 수 없어 데이터베이스에 데이터가 없습니다. <sqlFile> liquibase 태그를 사용하여 호출 한 별도의 sql 파일에 insert 문이 있습니다. 그러나 삽입물은 일부 외래 키 제약 조건을 위반하고 실행되지 않았습니다.

그래서 저는 Liquibase가 포함 된 SQL 파일에서 오류를 숨기고있는 것처럼 보였습니다. 성공하면 Jira를 재현 ​​해 봅니다.

/크리스티안