问题描述
我有大量的单元测试,可以测试Blueprint中的某些路由/骆驼实现.这些测试绝对可以在95%的时间上正常运行,但是每隔一段时间(大约20个测试中就有1个),我会遇到Camel Runtime异常:
I have a bunch of unit tests that test some routing/camel implementation in Blueprint. These test run absolutely fine 95% of the time however every so often (1 in 20 or so) I get a Camel Runtime exception:
我正在使用Camel 2.12运行最新版本的Fabric8
I am running the latest version of Fabric8 with Camel 2.12
java.lang.RuntimeException: Gave up waiting for service (objectClass=org.apache.camel.CamelContext)
at org.apache.camel.test.blueprint.CamelBlueprintHelper.getOsgiService(CamelBlueprintHelper.java:240)
at org.apache.camel.test.blueprint.CamelBlueprintHelper.getOsgiService(CamelBlueprintHelper.java:198)
at org.apache.camel.test.blueprint.CamelBlueprintTestSupport.createCamelContext(CamelBlueprintTestSupport.java:304)
at org.apache.camel.test.junit4.CamelTestSupport.doSetUp(CamelTestSupport.java:247)
at org.apache.camel.test.junit4.CamelTestSupport.setUp(CamelTestSupport.java:217)
at org.apache.camel.test.blueprint.CamelBlueprintTestSupport.setUp(CamelBlueprintTestSupport.java:133)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Tests in error:
SystemStatusRouteBuilderTest>CamelBlueprintTestSupport.setUp:133->CamelTestSupport.setUp:217->CamelTestSupport.doSetUp:247->CamelBlueprintTestSupport.createCamelContext:304 » Runtime
我已经三遍检查了蓝图文件中的所有名称空间,将pom打包为一个包,该蓝图文件位于预期的位置:src/main/resources/OSGI-INF/blueprint/blueprint.xml,以及我将骆驼Maven插件指定为:
I've triple checked all namespaces in the blueprint file, the pom is packaged as a bundle, the blueprint file is located in the expected location: src/main/resources/OSGI-INF/blueprint/blueprint.xml, and I have the camel maven plugin specified as so:
<plugin>
<groupId>org.apache.camel</groupId>
<artifactId>camel-maven-plugin</artifactId>
<version>${camel.version}</version>
<configuration>
<useBlueprint>true</useBlueprint>
</configuration>
</plugin>
关于为什么会发生这种情况的任何想法?由于其间歇性,因此非常难以调试.
Any ideas as to why this might be happening? Its very difficult to debug due to its intermittent nature.
推荐答案
这是CamelBlueprintTestSupport的常见问题.
This is a common issue with CamelBlueprintTestSupport.
在此处查看Claus的评论- http://fusesource.com/forums/thread. jspa?threadID = 4695
See comment from Claus here - http://fusesource.com/forums/thread.jspa?threadID=4695
您可以尝试将surefire插件设置为对每个测试派生jvm.然后在每个测试中都使用一个完整的新鲜JVM.如果在同一JVM中运行所有测试时出现遗留"的情况,这可能会解决此问题.
You can try setting the surefire plugin to fork the jvm per test. Then its a full fresh JVM on each test. This may fix this, in case there is some "left over" when running all the test in the same JVM.
我自己也遇到了这个问题
I have experienced this issue myself as well
这篇关于骆驼蓝图-放弃等待服务异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!