2017-05-24 1 views
0

임베디드 야생 플라이에서 아킬라안 테스트를 실행했습니다. 모든 이주 스크립트, Integrator 클래스 (FlyWay가 설정된 경우) 및 모든 플라이 웨이 패키지 (POM 파일의 경우)가 .war 파일 (포함 된 wildfly에 배치 됨)에 shrinkwrap에 포함되어 있어도 마이그레이션이 수행되지 않습니다.arquillian and flyway : 마이그레이션이 실행되지 않습니다.

어떤 이유가 있습니까? 이 방법은 기본적으로 작동하지 않습니까, 아니면 뭔가 빠졌습니까?

내가 좋아하는 것은 arquillian에 의해 실행되는 자동 테스트가 동일한 마이그레이션 스크립트를 사용하는 생산 데이터베이스와 동일한 구성표를 갖는 메모리 데이터베이스에 설정된다는 것입니다.

편집 : ytg 아래와 같이 묻습니다. Integrator 클래스를 추가합니다. 그러나이 코드는 arquillian 테스트에 입력되지 않습니다. 만약 내가 integrate 메소드 위에 breakpoint를 설정한다면, 결코 적중되지 않을 것이다. 왜?

import org.flywaydb.core.Flyway; 
import org.flywaydb.core.api.MigrationInfo; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.engine.spi.SessionFactoryImplementor; 
import org.hibernate.integrator.spi.Integrator; 
import org.hibernate.metamodel.source.MetadataImplementor; 
import org.hibernate.service.spi.SessionFactoryServiceRegistry; 

public class FlywayIntegrator implements Integrator 
{ 
    @Override 
    public void integrate(final Configuration configuration, 
          final SessionFactoryImplementor sessionFactoryImplementor, 
          final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) 
    { 

     System.out.println("Starting Flyway database migrations"); 

     Flyway flywayEvending = new Flyway(); 

     // enable this to migrate from the state currently on useqrnow.com 
     flywayEvending.setBaselineVersionAsString("0"); 
     flywayEvending.setBaselineOnMigrate(true); 
     flywayEvending.setDataSource(...) 

     flywayEvending.setLocations(...); 
     for (MigrationInfo i : flywayEvending.info().all()) 
     { 
      System.out.println("migrate task: " + i.getVersion() + " : " + i.getDescription() + " from file: " + i.getScript()); 
     } 
     flywayEvending.migrate(); 
    } 

    @Override 
    public void integrate(final MetadataImplementor metadataImplementor, final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) 
    { 
     // do nothing 
    } 

    @Override 
    public void disintegrate(final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) 
    { 
     // do nothing 
    } 
} 
+0

Integrator 클래스의 설치 코드를 포함하십시오. – ytg

+0

이 코드를 입력하지 않아도 알았습니다. 브레이크 포인트를 설정하면 arquillian 테스트를 실행하는 동안 적중하지 않습니다. – badera

+0

WildFly와 같은 애플리케이션 컨테이너에 대해 테스트하면 디버그 모드에서 실행하고 원격 디버거를 연결해야합니다. 그렇지 않으면 JVM에 사용할 수있는 디버그 만 있습니다. 테스트를 실행합니다 (동일한 것은 아닙니다). –

답변

0

오랜 시간이 지난 후이 문제를 해결하기 위해 재 시도했습니다. 그리고 그것은 간단합니다. 나는 integrator 클래스를 저장해야하는 파일 META-INF/services/org.hibernate.integrator.spi.Integrator을 추가하지 않았습니다. 이 파일을 .war 파일에 추가해야하는데,이 파일은 ShrinkWrap입니다.

관련 문제