1

我想在同一个 JVM 中使用 CDI/Weld 在嵌入式 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)

完整的堆栈跟踪位于pastebin

服务器和上下文在不同的码头服务器实例和端口上隔离。然而,Weld 并没有意识到这一点,尽管它检测到了一个 Jetty 容器并且似乎在某个地方使用了共享状态(也许这是 Jetty 特定的?)。

有没有人遇到过这个问题或有提示如何告诉 Weld 它不应该注册两次?

4

1 回答 1

2

您可以尝试在每个测试上分叉,因此它们都在不同的 JVM 中完成。看起来 Weld 正在为每个 JVM 存储 bean(这是有道理的),并且当启动新服务器时,它会再次通过引导程序运行。

于 2013-06-20T16:24:17.003 回答