Java 码头和焊缝的平行试验
我想在同一个JVM中使用CDI/Weld在嵌入式Jetty上并行执行单元测试 对于每个测试方法,都会创建一个带有干净数据库的新jetty实例。顺序执行是有效的,然而,在并行执行时,我遇到了一个异常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
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中),多次使用元数据是没有意义的,而且在请求新实例时,也可能会导致使用哪种元数据的问题。