Search code examples
mongodbapache-camelkarafblueprint-osgi

MongoDB doesn't work on Karaf 4.0.8 with Camel 2.18.1


We created a simple test bundle, but as soon as we try to use MongoDB in one of our Camel routes, the route does not start anymore.

The blueprint is quite simple:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
    xsi:schemaLocation="
         http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
         http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd
         http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd">

    <bean id="mongo" class="com.mongodb.Mongo">
        <argument value="localhost"/>
    </bean>

    <camelContext id="blueprint-bean-context"
        xmlns="http://camel.apache.org/schema/blueprint">

        <route id="testTimer">
            <from uri="timer:testTimer?period=5000" />

            <setBody>
                <spel>{"type": "product"}</spel>
            </setBody>
            <to uri="mongodb:mongo?database=testdb&amp;collection=mycollection&amp;operation=findAll" />
            <log message="Result was queried" />

        </route>
    </camelContext>

</blueprint>

MongoDB is added as a dependency in the POM. The excerpt of the log in DEBUG mode gives these lines:

2017-01-24 13:41:27,672 | DEBUG | raf-4.0.8/deploy | ReferenceRecipe                  | 12 - org.apache.aries.blueprint.core - 1.7.1 | Binding reference .camelBlueprint.languageResolver.spel to [org.apache.camel.spi.LanguageResolver]
2017-01-24 13:41:27,672 | DEBUG | raf-4.0.8/deploy | BlueprintLanguageResolver        | 55 - org.apache.camel.camel-blueprint - 2.18.1 | Found language resolver: spel in registry: org.apache.camel.impl.osgi.Activator$BundleLanguageResolver@6841375f
2017-01-24 13:41:27,673 | DEBUG | raf-4.0.8/deploy | DefaultChannel                   | 58 - org.apache.camel.camel-core - 2.18.1 | Initialize channel for target: 'SetBody[spel{SpelExpression[{"type": "product"}]}]'
2017-01-24 13:41:27,673 | DEBUG | raf-4.0.8/deploy | BlueprintContainerImpl           | 12 - org.apache.aries.blueprint.core - 1.7.1 | Instantiating component blueprintBundle
2017-01-24 13:41:27,676 | DEBUG | raf-4.0.8/deploy | DefaultManagementAgent           | 58 - org.apache.camel.camel-core - 2.18.1 | Registered MBean with ObjectName: org.apache.camel:context=de.test.bundle-x1-blueprint-bean-context,type=tracer,name=BacklogTracer
2017-01-24 13:41:27,676 | DEBUG | raf-4.0.8/deploy | BlueprintContainerImpl           | 12 - org.apache.aries.blueprint.core - 1.7.1 | Instantiating component blueprintBundle
2017-01-24 13:41:27,680 | DEBUG | raf-4.0.8/deploy | DefaultManagementAgent           | 58 - org.apache.camel.camel-core - 2.18.1 | Registered MBean with ObjectName: org.apache.camel:context=de.test.bundle-x1-blueprint-bean-context,type=tracer,name=BacklogDebugger
2017-01-24 13:41:27,683 | DEBUG | raf-4.0.8/deploy | DefaultManagementAgent           | 58 - org.apache.camel.camel-core - 2.18.1 | Registered MBean with ObjectName: org.apache.camel:context=de.test.bundle-x1-blueprint-bean-context,type=errorhandlers,name="DefaultErrorHandlerBuilder(ref:CamelDefaultErrorHandlerBuilder)"
2017-01-24 13:41:27,686 | DEBUG | raf-4.0.8/deploy | DefaultComponent                 | 58 - org.apache.camel.camel-core - 2.18.1 | Creating endpoint uri=[mongodb://mongo?collection=processing_requests&database=genex&operation=findAll], path=[mongo]
2017-01-24 13:41:27,686 | DEBUG | raf-4.0.8/deploy | BlueprintContainerImpl           | 12 - org.apache.aries.blueprint.core - 1.7.1 | Instantiating component mongo
2017-01-24 13:41:27,687 | INFO  | raf-4.0.8/deploy | BlueprintCamelContext            | 58 - org.apache.camel.camel-core - 2.18.1 | Apache Camel 2.18.1 (CamelContext: blueprint-bean-context) is shutting down
2017-01-24 13:41:27,687 | DEBUG | raf-4.0.8/deploy | efaultAsyncProcessorAwaitManager | 58 - org.apache.camel.camel-core - 2.18.1 | Shutting down with no inflight threads.
2017-01-24 13:41:27,688 | DEBUG | raf-4.0.8/deploy | TimerListenerManager             | 58 - org.apache.camel.camel-core - 2.18.1 | Removed TimerListener: org.apache.camel.management.mbean.ManagedCamelContext@1350b665
2017-01-24 13:41:27,688 | DEBUG | raf-4.0.8/deploy | DefaultManagementAgent           | 58 - org.apache.camel.camel-core - 2.18.1 | Unregistered MBean with ObjectName: org.apache.camel:context=de.test.bundle-x1-blueprint-bean-context,type=context,name="blueprint-bean-context"
2017-01-24 13:41:27,688 | DEBUG | raf-4.0.8/deploy | DefaultInflightRepository        | 58 - org.apache.camel.camel-core - 2.18.1 | Shutting down with no inflight exchanges.

Why does the Camel context start up and shutdown immediately? The timer is not executed and the log message never printed. As soon as we remove the to for calling MongoDB, it works.


Solution

  • Change the bean declaration

    <bean id="mongo" class="com.mongodb.Mongo">
    

    to

    <bean id="mongo" class="com.mongodb.MongoClient">
    

    you can read more about it in the official documentation of the Mongo component for Camel.