Hello - I am using Camel v2.11.0.
I have a Camel dynamic route written in Java that is packaged in an OSGi bundle deployed to Karaf v2.3.2. This route monitors a directory and when a file is placed in the monitored directory the file is passed on to another (custom) camel component. The bean containing this logic is defined in a Spring XML file and the camel context injected into the bean. Everything works fine when the OSGi container comes up initially. The bundle with the dynamic camel route is installed by default, I place a file in the monitored directory and everything works. If I then uninstall the bundle and reinstall it (or if I stop/start my OSGi container), when the bundle comes back up it loads the dynamic route but Camel does not seem to start the route again. Any ideas what I might be doing wrong? Here is the Spring XML file, the Java code, and log output from my application showing the bundle and its execution of the camel dynamic route. Thanks - Hugh Spring XML file: <camel:camelContext id="camelContext"> </camel:camelContext> <osgix:managed-service-factory id="contentDirectoryMonitor_MSF" factory-pid="content.directorymonitor.ContentDirectoryMonitor" update-strategy="bean-managed" update-method="updateCallback"> <osgix:interfaces> <beans:value>content.directorymonitor.DirectoryMonitor</beans:value> </osgix:interfaces> <beans:bean id="contentDirectoryMonitor" class="content.directorymonitor.ContentDirectoryMonitor" init-method="init" destroy-method="destroy"> <beans:constructor-arg ref="camelContext" /> <beans:property name="monitoredDirectoryPath" value="" /> <beans:property name="directive" value="" /> </beans:bean> </osgix:managed-service-factory> Java code: public ContentDirectoryMonitor(final CamelContext camelContext) { this.camelContext = camelContext; LOGGER.trace("ContentDirectoryMonitor constructor done"); } public void init() { LOGGER.trace("INSIDE: init()"); if (routeCollection != null) { try { // This stops the route before trying to remove it LOGGER.debug("Removing " + routeCollection.size() + " routes"); camelContext.removeRouteDefinitions(routeCollection); } catch (Exception e) { LOGGER.warn(e.getMessage()); } } else { LOGGER.debug("No routes to remove before configuring a new route"); } configureCamelRoute(); } private void configureCamelRoute() { LOGGER.trace("ENTERING: configureCamelRoute"); RouteBuilder routeBuilder = new RouteBuilder() { @Override public void configure() throws Exception { String inbox = "file:" + monitoredDirectory + "?moveFailed=.errors"; inbox += "&delete=true"; LOGGER.debug("inbox = " + inbox); from(inbox) .setHeader(Request.OPERATION, constant("create")) .setHeader(Request.DIRECTIVE, constant(directive)) .setHeader(Request.CONTENT_URI, constant("")) .to("content:framework"); // our custom camel component "content" } }; try { // Add the routes that will be built by the RouteBuilder class above // to this CamelContext. // The addRoutes() method will instantiate the RouteBuilder class above. camelContext.addRoutes(routeBuilder); camelContext.start(); // Save the routes created by RouteBuilder so that they can be // stopped and removed later if the route(s) are modified by the // administrator. this.routeCollection = routeBuilder.getRouteCollection().getRoutes(); } catch (Exception e) { LOGGER.warn("Unable to configure Camel route", e); } LOGGER.trace("EXITING: configureCamelRoute"); } Application's log output - in the "re-install" section you will see where Camel says it started 0 of 0 routes, when for same bundle it started 1 route when app was first started: // User fills in form to create dynamic route 13:07:56,092 | TRACE | eb-f79294e88283) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 50 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | ContentDirectoryMonitor constructor done 13:07:56,095 | TRACE | eb-f79294e88283) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 125 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: setMonitoredDirectoryPath 13:07:56,095 | TRACE | eb-f79294e88283) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 136 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: setDirective 13:07:56,096 | TRACE | eb-f79294e88283) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 125 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: setMonitoredDirectoryPath 13:07:56,096 | TRACE | eb-f79294e88283) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 147 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: setCopyIngestedFiles 13:07:56,096 | TRACE | eb-f79294e88283) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 136 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: setDirective 13:07:56,096 | TRACE | eb-f79294e88283) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 64 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: init() 13:07:56,096 | DEBUG | eb-f79294e88283) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 81 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | No routes to remove before configuring a new route 13:07:56,097 | TRACE | eb-f79294e88283) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 158 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | ENTERING: configureCamelRoute 13:07:56,097 | DEBUG | eb-f79294e88283) | ContentDirectoryMonitor | onitor.ContentDirectoryMonitor$1 187 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | inbox = file:inbox?moveFailed=.errors&delete=true 13:07:56,161 | INFO | eb-f79294e88283) | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 2098 | 170 - org.apache.camel.camel-core - 2.11.0 | Route: route2 started and consuming from: Endpoint[file://inbox?delete=true&moveFailed=.errors] 13:07:56,163 | INFO | eb-f79294e88283) | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1432 | 170 - org.apache.camel.camel-core - 2.11.0 | Apache Camel 2.11.0 (CamelContext: camelContext) is starting 13:07:56,163 | INFO | eb-f79294e88283) | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1467 | 170 - org.apache.camel.camel-core - 2.11.0 | Total 1 routes, of which 1 is started. 13:07:56,164 | INFO | eb-f79294e88283) | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1468 | 170 - org.apache.camel.camel-core - 2.11.0 | Apache Camel 2.11.0 (CamelContext: camelContext) started in 0.000 seconds 13:07:56,165 | TRACE | eb-f79294e88283) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 215 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | EXITING: configureCamelRoute 13:07:56,165 | INFO | eb-f79294e88283) | OsgiServiceFactoryBean | r.support.OsgiServiceFactoryBean 301 | 105 - org.springframework.osgi.core - 1.2.1 | Publishing service under classes [{ddf.content.core.directorymonitor.DirectoryMonitor}] // Uninstall feature that has dynamic route 13:08:15,788 | INFO | Timer-1 | OsgiBundleXmlApplicationContext | ractOsgiBundleApplicationContext 359 | 101 - org.springframework.context - 3.2.3.RELEASE | Unpublishing application context OSGi service for bundle DDF :: Content :: Core :: Directory Monitor (content-core-directorymonitor) 13:08:15,789 | INFO | Timer-1 | OsgiBundleXmlApplicationContext | pport.AbstractApplicationContext 1042 | 101 - org.springframework.context - 3.2.3.RELEASE | Closing OsgiBundleXmlApplicationContext(bundle=content-core-directorymonitor, config=osgibundle:/META-INF/spring/*.xml): startup date [Thu Sep 12 13:07:23 MST 2013]; root of context hierarchy 13:08:15,789 | INFO | Timer-1 | DefaultListableBeanFactory | ort.DefaultSingletonBeanRegistry 444 | 99 - org.springframework.beans - 3.2.3.RELEASE | Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@53ee762f: defining beans [template,consumerTemplate,camelContext:beanPostProcessor,camelContext,contentDirectoryMonitor_MSF]; root of factory hierarchy 13:08:15,790 | INFO | Timer-1 | DefaultListableBeanFactory | ort.DefaultSingletonBeanRegistry 444 | 99 - org.springframework.beans - 3.2.3.RELEASE | Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@543cc5dd: defining beans [ddf.content.core.directorymonitor.ContentDirectoryMonitor.7d5e0227-ee53-4471-9ceb-f79294e88283]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@53ee762f 13:08:15,790 | TRACE | Timer-1 | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 93 | 186 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: destroy() 13:08:15,791 | INFO | Timer-1 | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1624 | 170 - org.apache.camel.camel-core - 2.11.0 | Apache Camel 2.11.0 (CamelContext: camelContext) is shutting down 13:08:15,792 | INFO | Timer-1 | DefaultShutdownStrategy | mel.impl.DefaultShutdownStrategy 165 | 170 - org.apache.camel.camel-core - 2.11.0 | Starting to graceful shutdown 1 routes (timeout 300 seconds) 13:08:15,795 | INFO | 3 - ShutdownTask | DefaultShutdownStrategy | ultShutdownStrategy$ShutdownTask 572 | 170 - org.apache.camel.camel-core - 2.11.0 | Route: route2 shutdown complete, was consuming from: Endpoint[file://inbox?delete=true&moveFailed=.errors] 13:08:15,795 | INFO | Timer-1 | DefaultShutdownStrategy | mel.impl.DefaultShutdownStrategy 213 | 170 - org.apache.camel.camel-core - 2.11.0 | Graceful shutdown of 1 routes completed in 0 seconds 13:08:15,799 | INFO | Timer-1 | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1695 | 170 - org.apache.camel.camel-core - 2.11.0 | Uptime 19.636 seconds 13:08:15,799 | INFO | Timer-1 | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1696 | 170 - org.apache.camel.camel-core - 2.11.0 | Apache Camel 2.11.0 (CamelContext: camelContext) is shutdown in 0.008 seconds 13:08:15,800 | INFO | Timer-1 | ContextLoaderListener | BundleApplicationContextListener 60 | 106 - org.springframework.osgi.extender - 1.2.1 | Application context succesfully closed (OsgiBundleXmlApplicationContext(bundle=content-core-directorymonitor, config=osgibundle:/META-INF/spring/*.xml)) /////////////////// Re-install feature that has dynamic route ///////////////////////////////////// 13:08:18,940 | INFO | qtp798522203-258 | ultOsgiApplicationContextCreator | ultOsgiApplicationContextCreator 67 | 106 - org.springframework.osgi.extender - 1.2.1 | Discovered configurations {osgibundle:/META-INF/spring/*.xml} in bundle [DDF :: Content :: Core :: Directory Monitor (content-core-directorymonitor)] 13:08:18,945 | INFO | xtenderThread-49 | OsgiBundleXmlApplicationContext | pport.AbstractApplicationContext 510 | 101 - org.springframework.context - 3.2.3.RELEASE | Refreshing OsgiBundleXmlApplicationContext(bundle=content-core-directorymonitor, config=osgibundle:/META-INF/spring/*.xml): startup date [Thu Sep 12 13:08:18 MST 2013]; root of context hierarchy 13:08:18,946 | INFO | xtenderThread-49 | OsgiBundleXmlApplicationContext | ractOsgiBundleApplicationContext 365 | 101 - org.springframework.context - 3.2.3.RELEASE | Application Context service already unpublished 13:08:18,947 | INFO | xtenderThread-49 | XmlBeanDefinitionReader | tory.xml.XmlBeanDefinitionReader 315 | 99 - org.springframework.beans - 3.2.3.RELEASE | Loading XML bean definitions from URL [bundleentry://338.fwk458982688/META-INF/spring/beans.xml] 13:08:18,979 | INFO | xtenderThread-49 | WaiterApplicationContextExecutor | WaiterApplicationContextExecutor 243 | 106 - org.springframework.osgi.extender - 1.2.1 | No outstanding OSGi service dependencies, completing initialization for OsgiBundleXmlApplicationContext(bundle=content-core-directorymonitor, config=osgibundle:/META-INF/spring/*.xml) 13:08:18,982 | INFO | xtenderThread-50 | DefaultListableBeanFactory | pport.DefaultListableBeanFactory 596 | 99 - org.springframework.beans - 3.2.3.RELEASE | Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@59414494: defining beans [camelContext:beanPostProcessor,camelContext,contentDirectoryMonitor_MSF]; root of factory hierarchy 13:08:18,991 | INFO | xtenderThread-50 | ManagementStrategyFactory | gement.ManagementStrategyFactory 43 | 170 - org.apache.camel.camel-core - 2.11.0 | JMX enabled. 13:08:18,993 | INFO | xtenderThread-50 | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1432 | 170 - org.apache.camel.camel-core - 2.11.0 | Apache Camel 2.11.0 (CamelContext: camelContext) is starting 13:08:18,997 | TRACE | rectoryMonitor]) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 50 | 338 - content-core-directorymonitor - 2.3.0.SNAPSHOT | ContentDirectoryMonitor constructor done 13:08:18,999 | TRACE | rectoryMonitor]) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 125 | 338 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: setMonitoredDirectoryPath 13:08:18,999 | TRACE | rectoryMonitor]) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 136 | 338 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: setDirective 13:08:18,999 | TRACE | rectoryMonitor]) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 125 | 338 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: setMonitoredDirectoryPath 13:08:18,999 | TRACE | rectoryMonitor]) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 147 | 338 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: setCopyIngestedFiles 13:08:19,000 | TRACE | rectoryMonitor]) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 136 | 338 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: setDirective 13:08:19,000 | TRACE | rectoryMonitor]) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 64 | 338 - content-core-directorymonitor - 2.3.0.SNAPSHOT | INSIDE: init() 13:08:19,000 | DEBUG | rectoryMonitor]) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 81 | 338 - content-core-directorymonitor - 2.3.0.SNAPSHOT | No routes to remove before configuring a new route 13:08:19,000 | TRACE | rectoryMonitor]) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 158 | 338 - content-core-directorymonitor - 2.3.0.SNAPSHOT | ENTERING: configureCamelRoute 13:08:19,001 | DEBUG | rectoryMonitor]) | ContentDirectoryMonitor | onitor.ContentDirectoryMonitor$1 187 | 338 - content-core-directorymonitor - 2.3.0.SNAPSHOT | inbox = file:inbox?moveFailed=.errors&delete=true 13:08:19,013 | INFO | xtenderThread-50 | faultManagementLifecycleStrategy | erListenerManagerStartupListener 872 | 170 - org.apache.camel.camel-core - 2.11.0 | Load performance statistics enabled. 13:08:19,016 | INFO | rectoryMonitor]) | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1432 | 170 - org.apache.camel.camel-core - 2.11.0 | Apache Camel 2.11.0 (CamelContext: camelContext) is starting 13:08:19,016 | INFO | rectoryMonitor]) | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1467 | 170 - org.apache.camel.camel-core - 2.11.0 | Total 0 routes, of which 0 is started. 13:08:19,016 | INFO | xtenderThread-50 | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1467 | 170 - org.apache.camel.camel-core - 2.11.0 | Total 0 routes, of which 0 is started. 13:08:19,016 | INFO | rectoryMonitor]) | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1468 | 170 - org.apache.camel.camel-core - 2.11.0 | Apache Camel 2.11.0 (CamelContext: camelContext) started in 0.000 seconds 13:08:19,017 | INFO | xtenderThread-50 | OsgiSpringCamelContext | e.camel.impl.DefaultCamelContext 1468 | 170 - org.apache.camel.camel-core - 2.11.0 | Apache Camel 2.11.0 (CamelContext: camelContext) started in 0.000 seconds 13:08:19,018 | TRACE | rectoryMonitor]) | ContentDirectoryMonitor | ymonitor.ContentDirectoryMonitor 215 | 338 - content-core-directorymonitor - 2.3.0.SNAPSHOT | EXITING: configureCamelRoute 13:08:19,018 | INFO | xtenderThread-50 | OsgiBundleXmlApplicationContext | ractOsgiBundleApplicationContext 327 | 101 - org.springframework.context - 3.2.3.RELEASE | Publishing application context as OSGi service with properties {org.springframework.context.service.name=content-core-directorymonitor, Bundle-SymbolicName=content-core-directorymonitor, Bundle-Version=2.3.0.SNAPSHOT} 13:08:19,018 | INFO | rectoryMonitor]) | OsgiServiceFactoryBean | r.support.OsgiServiceFactoryBean 301 | 105 - org.springframework.osgi.core - 1.2.1 | Publishing service under classes [{ddf.content.core.directorymonitor.DirectoryMonitor}] 13:08:19,019 | INFO | xtenderThread-50 | ContextLoaderListener | BundleApplicationContextListener 45 | 106 - org.springframework.osgi.extender - 1.2.1 | Application context successfully refreshed (OsgiBundleXmlApplicationContext(bundle=content-core-directorymonitor, config=osgibundle:/META-INF/spring/*.xml)) -- View this message in context: http://camel.465427.n5.nabble.com/Dynamic-route-not-started-when-OSGi-bundle-it-is-in-is-uninstalled-and-then-reinstalled-tp5739282.html Sent from the Camel - Users mailing list archive at Nabble.com.