我正在调查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进行测试通过?
非常感谢。
答案 0 :(得分:-1)
您必须设置jboss记录器
in gradle:
test {
systemProperty 'java.util.logging.manager', 'org.jboss.logmanager.LogManager'
}