如何使用Arquillian与WildFly 8.0.0嵌入?

时间:2014-04-16 01:29:52

标签: java groovy jboss glassfish gradle

我正在调查Glassfish和WildFly / Jboss与Arquillian一起用于测试时的区别。整个调查都在GitHub上进行。到目前为止,我只编写了一个测试CDI的简单示例。以下是代码的要点:

Greeter.java

public class Greeter {
    public String greeting() {
        return "Hello, there";
    }
}

GreeterTest.groovy

class GreeterTest extends ArquillianWarBase {
    @Inject Greeter greeter
    @Test
    public void should() {
        assert greeter.greeting() == 'Hello, there'
    }
}

ArquillianWarBase.java

@RunWith( Arquillian.class )
public abstract class ArquillianWarBase {
    private static WebArchive war;
    @Deployment
    public static WebArchive createDeployment() {
        if( war == null ) {
            war = ShrinkWrap.create( WebArchive.class, "demo-test.war" )
                    .addPackages( true, Filters.exclude( ".*Test.*" ),
                            "demo" )
                    .addAsWebInfResource( "beans-test.xml", "beans.xml" )
                    .addAsWebInfResource( "web-test.xml", "web.xml" );
        }
        return war;
    }
}

我使用Gradle。这是build.gradle的依赖部分:

dependencies {
    if( project.hasProperty('jee6') ) {
        println 'using java ee 6'
        providedCompile 'javax:javaee-api:6.0'
        if( project.hasProperty( 'jboss') ) {
            if( project.hasProperty('remote') ) {
                testRuntime 'org.wildfly:wildfly-arquillian-container-remote:8.1.0.CR1'
            } else {
                testRuntime 'org.wildfly:wildfly-embedded:8.1.0.CR1'
                testRuntime 'org.wildfly:wildfly-arquillian-container-embedded:8.1.0.CR1'
            }
        } else {
            testRuntime 'org.glassfish.main.extras:glassfish-embedded-all:4.0'
            testRuntime 'org.glassfish.main.extras:glassfish-embedded-all:3.1.2.2'
        }
    } else {
        println 'using java ee 7'
        providedCompile 'javax:javaee-api:7.0'
        if( project.hasProperty( 'jboss') ) {
            println 'using jboss'
            if( project.hasProperty('remote') ) {
                println 'using wildfly remote'
                testRuntime 'org.wildfly:wildfly-arquillian-container-remote:8.0.0.Final'
            } else {
                println 'using wildfly embedded'
                makeArquillianXml( 'wildfly-embedded' )
                testRuntime 'org.wildfly:wildfly-embedded:8.0.0.Final'
                testRuntime 'org.wildfly:wildfly-arquillian-container-embedded:8.0.0.Final'
            }
        } else {
            println 'using glassfish'
            if( project.hasProperty('remote') ) {
                println 'using glassfish remote'
                testRuntime 'org.jboss.arquillian.container:arquillian-glassfish-remote-3.1:1.0.0.CR4'
            } else {
                println 'using glassfish embedded'
                makeArquillianXml( 'glassfish-embedded' )
                testRuntime 'org.glassfish.main.extras:glassfish-embedded-all:4.0'
                testRuntime 'org.jboss.arquillian.container:arquillian-glassfish-embedded-3.1:1.0.0.CR4'
            }
        }
    }

    testCompile 'org.codehaus.groovy:groovy-all:2.2.1'
    testCompile 'junit:junit:4.11'
    testCompile 'org.jboss.arquillian:arquillian-bom:1.1.4.Final'
    testCompile 'org.jboss.arquillian.junit:arquillian-junit-container:1.1.4.Final'

    testRuntime 'org.hsqldb:hsqldb:2.3.0'
}

当我使用Glassfish 4嵌入式测试时,测试通过。但是,当我切换到嵌入了此控制台输出的WildFly 8时,测试失败:

INFO  [org.jboss.modules] JBoss Modules version 1.3.0.Final

demo.GreeterTest STANDARD_ERROR
    Apr 15, 2014 6:25:21 PM org.jboss.modules.Module setModuleLogger
    INFO: JBoss Modules version 1.3.0.Final
INFO  [org.jboss.msc] JBoss MSC version 1.2.0.Final
    Apr 15, 2014 6:25:21 PM org.jboss.msc.service.ServiceContainerImpl <clinit>
    INFO: JBoss MSC version %s
INFO  [org.jboss.as] JBAS015899: JBoss AS 7.2.0.Final-redhat-8 "Janus" starting
    Apr 15, 2014 6:25:21 PM org.jboss.as.server.ApplicationServerService start
    INFO: JBAS015899: JBoss AS 7.2.0.Final-redhat-8 "Janus" starting
ERROR [org.jboss.msc.service.fail] MSC000001: Failed to start service jboss.as: org.jboss.msc.service.StartException in service jboss.as: Failed to start service
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.0.Final.jar:1.2.0.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_55]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_55]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_55]
Caused by: java.lang.NoClassDefFoundError: org/jboss/msc/service/ServiceListener$Inheritance
    at org.jboss.as.server.ApplicationServerService.start(ApplicationServerService.java:128) [wildfly-server-8.0.0.Final.jar:8.0.0.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.0.Final.jar:1.2.0.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.0.Final.jar:1.2.0.Final]
    ... 3 more
Caused by: java.lang.ClassNotFoundException: org.jboss.msc.service.ServiceListener$Inheritance
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) [rt.jar:1.7.0_55]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) [rt.jar:1.7.0_55]
    at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.7.0_55]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) [rt.jar:1.7.0_55]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) [rt.jar:1.7.0_55]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) [rt.jar:1.7.0_55]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) [rt.jar:1.7.0_55]
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:370) [jboss-modules-1.3.0.Final.jar:1.3.0.Final]
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:118) [jboss-modules-1.3.0.Final.jar:1.3.0.Final]
    ... 6 more

MSC000001: Failed to start %s
org.jboss.msc.service.StartException in service jboss.as: Failed to start service
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/jboss/msc/service/ServiceListener$Inheritance
    at org.jboss.as.server.ApplicationServerService.start(ApplicationServerService.java:128)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
    ... 3 more
Caused by: java.lang.ClassNotFoundException: org.jboss.msc.service.ServiceListener$Inheritance
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    Apr 15, 2014 6:25:21 PM org.jboss.msc.service.ServiceControllerImpl$StartTask startFailed
    ERROR: MSC000001: Failed to start %s
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:370)
    org.jboss.msc.service.StartException in service jboss.as: Failed to start service
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:118)
    ... 6 more
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.NoClassDefFoundError: org/jboss/msc/service/ServiceListener$Inheritance
        at org.jboss.as.server.ApplicationServerService.start(ApplicationServerService.java:128)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
        ... 3 more
    Caused by: java.lang.ClassNotFoundException: org.jboss.msc.service.ServiceListener$Inheritance
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:370)
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:118)
        ... 6 more

我尝试添加此依赖项

testRuntime 'org.jboss.msc:jboss-msc:1.2.2.Final'

但它根本没有帮助。

那么,我在这里错过了什么?如何使用嵌入的WildFly 8进行测试通过?

非常感谢。

1 个答案:

答案 0 :(得分:-1)

您必须设置jboss记录器

in gradle:

test {
    systemProperty 'java.util.logging.manager', 'org.jboss.logmanager.LogManager' 
}