我想在同一个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)完整的堆栈跟踪在pastebin上。
服务器和上下文被隔离在不同的jetty服务器实例和端口上。然而,Weld没有意识到这一点,尽管它检测到一个Jetty容器,并且似乎正在使用某个地方的共享状态(也许这是Jetty特有的?)。
有没有人遇到过这个问题,或者有什么建议告诉Weld它不应该注册两次?
发布于 2013-06-21 00:24:17
您可以尝试在每个测试上派生分支,以便它们都在不同的JVM中完成。看起来Weld在每个JVM上存储bean(这是有意义的),当一个新的服务器启动时,它会再次通过引导程序运行。
https://stackoverflow.com/questions/17210735
复制相似问题