Camel Blueprint - Waited for service to wait

I have a bunch of unit tests that check the routing / camel implementation in Blueprint. These tests pass absolutely normal in 95% of cases, but every so often (1 in 20 or so), I get a Runtime Camel exception:

I am using 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 

I triple checked all the namespaces in the drawing file, pom is packaged as a package, the plan file is in the expected location: src / main / resources / OSGI-INF / blueprint / blueprint.xml and I have a camel maven plugin that is listed like this:

 <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 could happen? It is very difficult to debug due to its intermittent nature.

+6
source share
6 answers

This is a common problem with CamelBlueprintTestSupport.

See a comment from Klaus here - http://fusesource.com/forums/thread.jspa?threadID=4695

Yes, I also saw this from time to time. You can run tests 100 times, and this may fail several times, etc. Not sure what will happen if its pojosr or drawing etc. Although OSGi and Blueprint have a really sophisticated launch model, where everyone is asynchronous, and each other has a curious expectation, And this is difficult to verify in reality.

You can try installing the surefire plugin to unlock jvm per test. Then its a complete fresh JVM on each test. This can fix this if there are several β€œremaining” ones in the same JVM during the entire test.

I also experienced this problem

+1
source

I came across the same question (inside the JUnit test) and finally found the reason. When I turned on the full traces of the camels, I could see the following message:

"Bundle **** expects dependencies [(& (component = ldap) (objectclass = org.apache.camel.spi.ComponentResolver)), (& (component = sql) (objectclass = org. Apache.camel.spi.ComponentResolver ))] "

This made me add an explicit (test) dependency in my pom, i.e.:

 <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-sql</artifactId> <version>${camel-version}</version> <scope>test</scope> </dependency> 

NB: do for all components (jaxb, ldap, sql, cache, etc.) that you used on your Camel routes!

This led to the fact that my error message ("Waited for service to wait") disappeared :-)

Hope this helps.

+3
source

I ran into a similar problem in my project. The root cause is usually addiction. The steps that you can try to find the root cause:

1) Remove the project-specific and just use the camel-test-blueprint project to run the base script: http://camel.apache.org/blueprint-testing.html

2) It should work perfectly perfectly :). Now, slowly start adding project dependencies one by one and checking the actual scenario (and not the one I mentioned above). At some point it will break. If it breaks, you should avoid using this dependency. If you cannot, find another way to run your test, i.e. use a separate project for testing, etc.

If you debug CamelBlueprintTestSupport, you will lose it. As Matthew noted, it is difficult to debug an asynchronous stream. Try my steps and trust me that it will work. I did the same.

+1
source

The same problem had a problem with camel 2.16.0 and a new project created using a camel archetype plan.

But I did not have any random crashes, mvn camel: run failed every time I started.

Changing the camel version to version 2.14.0 did the trick.

0
source

The history and background of camel printing problems can be found here: http://ggrzybek.blogspot.com/2015/12/camel-blueprint-test-support.html

Corrections that increase the reliability of these tests:

0
source

I had this problem with Apache Camel 2.19.1. The way I solved the problem was to change the archetype version to 2.18 instead of 2.19 in

archetypes / camel-archetype-plan / pom.xml

See also this page.

Hope this helps.

0
source

Source: https://habr.com/ru/post/970177/


All Articles