5

( https://issues.jboss.org/projects/SWARM/issues/SWARM-767で参照)

Arquillian を使用して WildFly Swarm アプリケーションをテストしようとしています。MainSwarm 用のカスタムクラスとカスタム デプロイがあります。テストを実行しようとすると、一部のサードパーティ ライブラリで Maven から ClassNotFoundException を受け取ります。

まず第一に、ここに私のテストがあります:

@RunWith(Arquillian.class)
public class PasswordStorageTest {

    @CreateSwarm
    public static Swarm createSwarm() {
        return TestBuilder.createSwarm();
    }

    @Deployment
    public static WARArchive createDeployment() {
        return TestBuilder.createDeployment();
    }

    @Test
    public void testHashesAreUnique() throws PasswordStorage.CannotPerformOperationException {
        String password = UUID.randomUUID().toString();
        String hash1 = PasswordStorage.createHash(password);
        String hash2 = PasswordStorage.createHash(password);

        assertNotEquals("Hashes were not unique.", hash1, hash2);
    }

    @Test
    public void testVerifyPassword() throws PasswordStorage.CannotPerformOperationException, PasswordStorage.InvalidHashException {
        String password = UUID.randomUUID().toString();
        String hash = PasswordStorage.createHash(password);

        assertTrue("Password verification failed.", PasswordStorage.verifyPassword(password, hash));
    }

}

TestBuilder.createSwarm()TestBuilder.createDeployment()これらのメソッドをそれぞれ呼び出すだけです。

public static Swarm buildSwarm() throws Exception {
    Swarm swarm = new Swarm();
    //Configure PostgreSQLDS
    swarm.fraction(new DatasourcesFraction()
            .jdbcDriver("org.postgresql", (d) -> {
                d.driverClassName("org.postgresql.Driver");
                d.xaDatasourceClass("org.postgresql.xa.PGXADataSource");
                d.driverModuleName("org.postgresql");
            })
            .dataSource("PostgreSQLDS", (ds) -> {
                ds.driverName("org.postgresql");
                ds.connectionUrl(System.getenv("JDBC_DATABASE_URL"));
                ds.userName(System.getenv("JDBC_DATABASE_USERNAME"));
                ds.password(System.getenv("JDBC_DATABASE_PASSWORD"));
            })
    );
    //Enable Infinispan Caching
    swarm.fraction(InfinispanFraction.createDefaultFraction());
    //Set Default Datasource
    swarm.fraction(new JPAFraction()
            .defaultDatasource("java:jboss/datasources/PostgreSQLDS"));
    return swarm;
}

public static WARArchive buildDeployment() throws Exception {
    WARArchive deployment = ShrinkWrap.create(WARArchive.class);
    deployment.addModule("org.postgresql");
    //Add all classes
    deployment.addPackages(true, "com.example.myapp");
    //Add all resources
    recursiveAddAsClassesResource(deployment, RESOURCES);
    //Add all web files
    recursiveAddAsWebResource(deployment, WEB);
    //Add all Maven dependencies
    deployment.addAllDependencies();
    return deployment;
}

テストを実行すると、WildFly Swarm は問題なく起動しますが、展開が展開されるとすぐに次のエラーが表示されます。

2016-10-10 18:31:03,841 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.deployment.unit."a0fdd090-cd55-4063-be86-23f6331f73f0.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."a0fdd090-cd55-4063-be86-23f6331f73f0.war".POST_MODULE: WFLYSRV0153: Failed to process phase POST_MODULE of deployment "a0fdd090-cd55-4063-be86-23f6331f73f0.war"
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:154)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: WFLYSRV0177: Error getting reflective information for class com.example.myapp.core.domain.services.FileService with ClassLoader ModuleClassLoader for Module "deployment.a0fdd090-cd55-4063-be86-23f6331f73f0.war:main" from Service Module Loader
    at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70)
    at org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:57)
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:106)
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:91)
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:76)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:147)
    ... 5 more
Caused by: java.lang.NoClassDefFoundError: net/coobird/thumbnailator/geometry/Position
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
    at java.lang.Class.getDeclaredFields(Class.java:1916)
    at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:72)
    at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66)
    ... 10 more
Caused by: java.lang.ClassNotFoundException: net.coobird.thumbnailator.geometry.Position from [Module "deployment.a0fdd090-cd55-4063-be86-23f6331f73f0.war:main" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
    ... 15 more

を参照するコードを削除したnet/coobird/thumbnailator/geometry/Positionところ、別のライブラリで同様のエラーが発生しました。ライブラリがまったく含まれていないようです。

おそらく関連して、展開の開始時にこれらのメッセージを大量に受け取ります:(ただし、アプリを正常に実行している場合でも表示され、アプリが完全に正常に読み込まれるため、問題は発生しません)

WFLYSRV0059: Class Path entry file:/C:/Users/mitch/.m2/repository/net/coobird/thumbnailator/0.4.8/thumbnailator-0.4.8.jar in /C:/a0fdd090-cd55-4063-be86-23f6331f73f0.war/WEB-INF/lib/classpath.jar  does not point to a valid jar for a Class-Path reference.
WFLYSRV0059: Class Path entry file:/C:/Users/mitch/.m2/repository/com/sparkpost/sparkpost-lib/0.16.1/sparkpost-lib-0.16.1.jar in /C:/a0fdd090-cd55-4063-be86-23f6331f73f0.war/WEB-INF/lib/classpath.jar  does not point to a valid jar for a Class-Path reference.

これは私を混乱させます。特に、に設定testable = falseする@Deploymentと、完全に正常に動作するためです。ただし、テストは現在コンテナーの外部で実行されているため、必要な CDI インジェクションを使用できません。

必要な情報をさらに提供できます。ここからどこへ行けばいいのかわからない。

4

0 に答える 0