Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 码头和焊缝的平行试验_Java_Deployment_Jetty_Cdi_Weld - Fatal编程技术网

Java 码头和焊缝的平行试验

Java 码头和焊缝的平行试验,java,deployment,jetty,cdi,weld,Java,Deployment,Jetty,Cdi,Weld,我想在同一个JVM中使用CDI/Weld在嵌入式Jetty上并行执行单元测试 对于每个测试方法,都会创建一个带有干净数据库的新jetty实例。顺序执行是有效的,然而,在并行执行时,我遇到了一个异常 org.jboss.weld.exceptions.DefinitionException: Exception List with 1 exceptions:|Exception 0 :|java.lang.RuntimeException: javax.naming.NameA

我想在同一个JVM中使用CDI/Weld在嵌入式Jetty上并行执行单元测试

对于每个测试方法,都会创建一个带有干净数据库的新jetty实例。顺序执行是有效的,然而,在并行执行时,我遇到了一个异常

org.jboss.weld.exceptions.DefinitionException: 
    Exception List with 1 exceptions:|Exception 0 
    :|java.lang.RuntimeException: javax.naming.NameAlreadyBoundException: 
     com<|?at com.sun.jersey.server.impl.cdi.CDIExtension.initialize(CDIExtension.java:196)
org.jboss.weld.exceptions.DefinitionException:
包含1个异常的异常列表:|异常0
:| java.lang.RuntimeException:javax.naming.NameReadyBoundException:

com您可以尝试对每个测试进行分叉,因此它们都是在不同的JVM中完成的。看起来Weld是在每个JVM中存储bean(这很有意义),当一个新服务器启动时,它会再次通过引导运行

为什么不把stacktrace放在这里?因为它很长,我不确定它的可读性。是的,我原本以为是焊接/码头集成在做这件事,但仔细看,我认为@LightGuard是正确的,他的解决方案对我来说似乎是可行的。这是我的第一个想法,我看到的问题是,我必须将每个测试方法划分为自己的测试类。但也许这值得我为测试而节省的时间。另外一点:像Weld这样的容器框架应该隔离这一点吗?因为在不同的上下文中两次部署同一个bean是有效的。当你说“上下文”时,你到底在说什么(所以我们在同一页上)?Weld保留了关于bean-per-bean描述符归档的元数据(在您的情况下,这将是jvm,因为测试没有捆绑在JAR中),多次使用元数据是没有意义的,而且在请求新实例时,也可能会导致使用哪种元数据的问题。