I was able to work around the issue by writing my own bean implementing InitializingBean which takes a reference to the camel context and manually calls afterPropertiesSet. This forces the Camel context to start before Spring's application context initialization continues. In theory this should happen automatically because SpringCamelContext is an InitializingBean but it appears to be a bug someplace.
Here's my code that works around it in a class I called SpringCamelContextInitializer: /* * (non-Javadoc) * * @see * org.springframework.beans.factory.InitializingBean#afterPropertiesSet() */ public void afterPropertiesSet() throws Exception { if (camelContext instanceof SpringCamelContext) { SpringCamelContext springCamelContext = (SpringCamelContext) camelContext; log.info("Camel context is a SpringCamelContext so it will be initialized if needed."); if (!springCamelContext.isStarting() && !springCamelContext.isStarted()) { log.info("Camel context is not started yet. It will be manually initialized."); springCamelContext.afterPropertiesSet(); } } else { log.info("Camel context is not a SpringCamelContext so it will be ignored."); } } Now setting depends-on="springCamelContextInitializer" on my other code causes everything to start up and initialize in the right order. It would be nice to know why SpringCamelContext doesn't initialize properly itself. -mike [cid:image001.jpg@01CCD056.2CA57EB0] | Mike Pilone | Software Architect, Distribution | mpil...@npr.org<mailto:mpil...@npr.org> | o: 202-513-2679 m: 703-969-7493 From: Mike Pilone [mailto:mpil...@npr.org] Sent: Wednesday, January 11, 2012 11:24 AM To: users@camel.apache.org Subject: SpringCamelContext afterPropertiesSet never called I'm debugging an issue where my Spring initialized code attempts to use a Camel route before the route is initialized. I attempted to fix this by adding "depends-on" in my Spring configuration to make my code depend on the camelContext but it didn't help. I could see that the context was being created, then my code created (which starts executing in another thread), then the context was started. I debugged the SpringCamelContext and found that the afterPropertiesMethod is never called which means the context isn't started until onApplicationEvent is fired with a ContextRefreshedEvent. A breakpoint in afterPropertiesMethod is never triggered so maybeStart() is never called. So the "depends-on" doesn't help because Spring considers the SprintCamelContext initialized and allows bean creation to continue even though the context is not yet started. I'm using Spring 3.1.0 and Camel 2.9.0. Is this a known issue? Any suggestions for a work-around? -mike [cid:image001.jpg@01CCD052.D7C4B3F0] | Mike Pilone | Software Architect, Distribution | mpil...@npr.org<mailto:mpil...@npr.org> | o: 202-513-2679 m: 703-969-7493