[ https://issues.apache.org/activemq/browse/CAMEL-154?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Hadrian Zbarcea updated CAMEL-154: ---------------------------------- Attachment: camel-154.patch The issue was the id not being set on the BeanDefinition, so when Spring initialized the CamelContextFactoryBean, the id was missing. I also refactored the jmx naming conventions with this patch > Improper wiring of camel context using Spring > --------------------------------------------- > > Key: CAMEL-154 > URL: https://issues.apache.org/activemq/browse/CAMEL-154 > Project: Apache Camel > Issue Type: Bug > Components: camel-spring > Affects Versions: 1.2.0 > Reporter: Hadrian Zbarcea > Assignee: Hadrian Zbarcea > Attachments: camel-154.patch > > > When using spring to wire camel components, the whole magic is driven by > org.springframework.context.support.AbstractApplicationContext.refresh(). > At about line 327 the xml file is read and at some point > AbstractApplicationContext.doParse is called. What is notable is that we use > parseUsingJaxb (line 135) instead of the spring way of doing things, and then > we still use > BeanDefinitionParser(s) to build the BeanDefinition(s). > On a sample context definition like the one in the unit tests: > <camelContext id="camel" > xmlns="http://activemq.apache.org/camel/schema/spring"> > <beanPostProcessor/> > <endpoint id="endpoint1" uri="direct:start"/> > <endpoint id="endpoint2" uri="mock:end"/> > <route> > <from ref="endpoint1"/> > <to ref="endpoint2"/> > </route> > </camelContext> > The jaxb parser instantiates the BeanPostProcessor, endpoints, the RouteType, > From/ToTypes properly, but the BeanPostProcessor is not injected with the > camelContext and applicationContext, obviously. > Later on in AbstractApplicationContext.refresh() during the > registerBeanPostProcessors() call (line 337) spring figures out that it needs > to instantiate the BeanPostProcessor first and use it before it initializes > the other beans. So far so good, but in doing so there are 2 major problems. > 1. It uses the BeanDefinition instead of the instance already created during > jaxb parsing. > 2. There is a chicken and egg situation; while it initializes > "camel:beanPostProcessor", it looks for a "camel" bean which isn't registered > yet. The model for it does exist though, so a new instance of the > CamelContextFactoryBean gets instantiated (and the id now is null instead of > "camel" as in the spring xml). > I wrestled with this and couldn't figure out a solution. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.