Hello,

I grabbed the 2.3-SNAPSHOT jars and confirmed that my original issue is
still present in 2.3

As with 2.2.0 - it can only be solved by specifying: depends-on="camel" on
the route builder bean.

I tried pulling the 2.3-SNAPSHOT code to run your test locally and determine
what the difference is but I am having issues getting it to build locally.  

In any event - I noticed one difference in that you implemented
"CamelContextAware" interface on the route builder.  And when constructing
the route - you called a getter that used the URI and asked the camelContext
for the endpoint.  I did the same in my test app and it did not solve the
problem.

I went back to an empty project and tried to create a bare-minimum
application that tried to replicate my issue.  And I was not able to (ie: it
worked as it should).  

My only assumption is that when you have multiple beans chained together -
that is when this issue shows up.

I tried modifying the original application I encountered the issue and when
I removed all other beans except for the routebuilder and a processor
definition (along with the endpoint uri).  That causes the issue.  If I
remove ref="myProcessor" from the routebuilder - it works fine.

Yet the processor is just a simple object, implements processor and has no
other dependencies.  I even duplicated this exactly in another project and I
was not able to reproduce this.

I have a workaround at least - add depends-on="camel" to the routebuilder. 
Now the XML reads funny as the routebuilder bean depends on the camelContext
- yet the camelContext has a reference to the routeBuilder.

Thank you for your help.  I'll have to chalk this up to weird Spring
behavior I guess...

Jonathan


willem.jiang wrote:
> 
> Hi Jonathan,
> 
> I just added a unit test[1] which is based on your test case, it looks 
> like current camel 2.3 don't have the issue that you met.
> 
> Can you have a look at my test and verify your case against the latest 
> Camel 2.3-SNAPSHOT ?
> 
> [1] http://svn.apache.org/viewvc?rev=942665&view=rev
> 
> Willem
> jonathanq wrote:
>> Claus,
>> 
>> That worked!  I changed my spring configuration to to the one below and
>> everything worked as expected.
>> 
>>   <camel:camelContext id="camel">
>>     <camel:routeBuilder ref="myRouteBuilderBean" />
>>   </camel:camelContext>
>> 
>>   <bean id="myRouteBuilderBean" class="com.example.MyRouteBuilder"
>> depends-on="camel">
>>     <property name="incomingEndpoint" value="file://C:\\triggerdir\\"/>
>>     <property name="myProcessor" ref="myProcessorBean"/>
>>   </bean> 
>> 
>> Thanks for the help!
>> 
>> Jonathan
>> 
>> 
>> Claus Ibsen-2 wrote:
>>> Hi
>>>
>>> Can you try with a depends-on="camel" attribute on the <bean> for the
>>> RouteBuilder to see if that helps.
>>>
>>>
>>>
>>>
>>> On Fri, Apr 30, 2010 at 8:36 PM, jonathanq <[email protected]> wrote:
>>>> I am having serious issues with Camel 2.2.0 and Spring 3.0.2.RELEASE.
>>>>
>>>> I am creating my route in spring as a bean and then injecting it into
>>>> the
>>>> camelContext using the following:
>>>>
>>>>  <camel:camelContext id="camel">
>>>>    <camel:routeBuilder ref="myRouteBuilderBean" />
>>>>  </camel:camelContext>
>>>>
>>>>  <bean id="myRouteBuilderBean" class="com.example.MyRouteBuilder">
>>>>    <property name="incomingEndpoint" value="file://C:\\triggerdir\\"/>
>>>>    <property name="myProcessor" ref="myProcessorBean"/>
>>>>  </bean>
>>>>
>>>> The actual route definition is:
>>>>
>>>>  public void configure() throws Exception {
>>>>    from(getIncomingEndpoint())
>>>>            .convertBodyTo(String.class)
>>>>            .process(getMyProcessor());
>>>>  }
>>>>
>>>> There are getters/setters on the endpoint and the processor.
>>>>
>>>> The issue is that when camel starts up - it calls the "configure" on
>>>> the
>>>> route builder BEFORE Spring has injected the bean with properties.
>>>>
>>>> So the getIncomingEndpoint() returns null - which will later cause
>>>> Camel
>>>> to
>>>> fail saying you can't set a null uri (error:)
>>>>
>>>> If I change from using Spring 3.0.2.RELEASE to Spring 2.5.6.SR01 - this
>>>> issues goes away.  So it is definitely a camel 2.2.0 and Spring 3.0
>>>> issue.
>>>> It seems that Camel is trying to configure all of the routes before
>>>> Spring
>>>> has actually injected the beans.
>>>>
>>>> Note: the reason I am setting the value in Spring is that its actually
>>>> getting property-replaced.  However if you put a hardcoded string into
>>>> spring for the endpoint, its still not working.  So I know its not the
>>>> property replacement causing this.
>>>>
>>>> Like I said - works fine in Spring 2.5.6 and Camel 2.2.0 - but not
>>>> Spring
>>>> 3.0.0.RELEASE, 3.0.1.RELEASE or 3.0.2.RELEASE.
>>>>
>>>> Any ideas?
>>>>
>>>> Thanks,
>>>>
>>>> Jonathan
>>>>
>>>> --
>>>> View this message in context:
>>>> http://old.nabble.com/Spring-3.0-and-Camel-2.2---Route-configure%28%29-called-before-Spring-beans-injected-tp28415437p28415437.html
>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>
>>>>
>>>
>>>
>>> -- 
>>> Claus Ibsen
>>> Apache Camel Committer
>>>
>>> Author of Camel in Action: http://www.manning.com/ibsen/
>>> Open Source Integration: http://fusesource.com
>>> Blog: http://davsclaus.blogspot.com/
>>> Twitter: http://twitter.com/davsclaus
>>>
>>>
>> 
> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Spring-3.0-and-Camel-2.2---Route-configure%28%29-called-before-Spring-beans-injected-tp28415437p28517592.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to