0
我正在研究Glassfish和WildFly/Jboss在与Arquillian一起使用时进行测试的区别。整个调查都在GitHub上进行。到目前为止,我只写了一个简单的例子来测试CDI。这里是代码的要点:如何将Arquillian与WildFly 8.0.0嵌入使用?
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嵌入在测试中,测试通过。
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嵌入与此控制台输出测试失败。
那么,我在这里错过了什么?我如何使用WildFly 8嵌入测试通行证?
非常感谢。