私は組み込みシステムでarquillianテストを実行していますワイルドフラワー。すべての移行スクリプト、Integratorクラス(FlyWayが設定されている)、およびすべてのフライウェイパッケージ(POMファイルから)は、.warファイル(埋め込みワイルドフックに展開されています)にshrinkwrapに含まれていますが、
これには何らかの理由がありますか?これは主に動作しないのですか、何かを逃しましたか?
私が達成したいのは、arquillianによって実行される自動化されたテストが、同じ移行スクリプトを使用する生産的なデータベースと同じスキームを持つインメモリデータベースをセットアップすることです。
編集:as ytg 私はIntegratorクラスを追加します。ただし、このコードはArquillianテストでは入力されません。私がintegrateメソッドの上にブレークポイントを設定すると、決してヒットしません。どうして?
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
}
}
回答:
回答№1は0長い間、私はこの問題を解決しようとしました。そしてそれは簡単でした:私はファイルを追加することができませんでした META-INF/services/org.hibernate.integrator.spi.Integrator
インテグレータクラスを格納する必要があります。このファイルを.warに追加する必要がありました。 ShrinkWrap
作成します。