On Mon, Aug 3, 2009 at 10:08 AM, Willem Jiang<[email protected]> wrote:
> Hi Claus,
>
> Current camel support to define a producer template OUTSIDE a camel context,
> I think it works well just like the autowire function which is provided in
> Spring.
>
> If there more than two Camel context in the Spring Application context , the
> user should specify the camel context which the template should use.
>
> But I have a concern that even we put the template INSIDE the camel context,
> the template will not be set with a right version of camel context, since we
> use a CamelPostProcessor to inject CamelContext.
>
> So I did a quick test on the current Camel code and found there is a bug  if
> there are more one CamelContext -- CamelPostProcessor will inject the last
> create camel context into the CamelContextAware object.
>
> I suggest to change the CamelPostProcessor to skip bean which camelContext
> is set, but it need to change the CamelContextAware interface to add a
> method of getCamelContext.
>
> Any thought ?

I think we should add a context attribute on this XML tag to specify
which camel context id it should match.
And the attribute should be optional, so in case there is only 1 camel
context in spring bean registry it should just default to use this
one.
Otherwise it should throw an IllegalArgumentException that the context
attribute should be set due to ambiguity as there are 2+ camel
context.
And we can make it smarter that if its defined INSIDE a camel context
it will automatic use its parent camel context.

We have such an attribute on various Camel @annotations as well, for
instance @Consume.
So it makes sense to have the same attribute name here also.

Good catch.


>
> Willem
>
>
>
>
> Claus Ibsen wrote:
>>
>> Hi Willem
>>
>> I actually didnt realize you could define a producer template OUTSIDE
>> a camel context.
>>
>> I do think that is WRONG. As the template needs to hold a reference to
>> a CamelContext to work correctly.
>>
>> But when people have 2+ camel context defined in the XML files then it
>> gets tricky, as which CamelContext should the template belong to.
>>
>> I believe we should do the opposite and remove the option to define it
>> outside and only allow it to be defined within a camel context.
>> If not it should at least require a context attribute as well so you
>> can define which camel context it belongs to.
>>
>>
>> On Mon, Aug 3, 2009 at 6:10 AM, Willem Jiang<[email protected]>
>> wrote:
>>>
>>> FYI, I just committed a quick fix for this issue.
>>> Please feel free to try out the latest snapshot[1], we publish the
>>> snapshot every day.
>>>
>>> [1] https://repository.apache.org/content/repositories/snapshots/
>>>
>>> Willem
>>>
>>> Willem Jiang wrote:
>>>>
>>>> Hi,
>>>>
>>>> I just found this is a bug of Camel.  I'm working on the quick fix
>>>> now[1].
>>>> Here is a way that you can walk around this issue, by putting the
>>>> consumerTemplate definition inside the camel context.
>>>>
>>>>
>>>>    <camel:camelContext id="camel">
>>>>        <camel:consumerTemplate id="consumer"/>
>>>>    </camel:camelContext>
>>>>    <camel:template id="producer"/>
>>>>
>>>>
>>>> [1] https://issues.apache.org/activemq/browse/CAMEL-1870
>>>>
>>>> Willem
>>>>
>>>> Mick Knutson wrote:
>>>>>
>>>>> I am using 2.0-M3
>>>>>
>>>>> Should be trying the trunk instead?
>>>>>
>>>>> ---
>>>>> Thank You…
>>>>>
>>>>> Mick Knutson, President
>>>>>
>>>>> BASE Logic, Inc.
>>>>> Enterprise Architecture, Design, Mentoring & Agile Consulting
>>>>> p. (866) BLiNC-411: (254-6241-1)
>>>>> f. (415) 685-4233
>>>>>
>>>>> Website: http://baselogic.com
>>>>> Linked IN: http://linkedin.com/in/mickknutson
>>>>> Vacation Rental: http://tahoe.baselogic.com
>>>>> ---
>>>>>
>>>>>
>>>>>
>>>>> On Sun, Aug 2, 2009 at 7:43 PM, Willem Jiang <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Which version of Camel are you using ?
>>>>>> I just checked current Camel 2.0 trunk code, the <camel:consumer> tag
>>>>>> should work. Can you try to use the recent released Camel 2.0 M3 ?
>>>>>>
>>>>>> Willem
>>>>>>
>>>>>>
>>>>>> Mick Knutson wrote:
>>>>>>
>>>>>>> I am trying to follow:
>>>>>>> http://camel.apache.org/polling-consumer.html
>>>>>>>
>>>>>>> Now in my camel-client.xml I defined:
>>>>>>> *<beans xmlns="http://www.springframework.org/schema/beans"*
>>>>>>> *       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"*
>>>>>>> *       xmlns:camel="http://camel.apache.org/schema/spring"*
>>>>>>> *       xsi:schemaLocation="*
>>>>>>> *        http://www.springframework.org/schema/beans
>>>>>>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd*
>>>>>>> *        http://camel.apache.org/schema/spring
>>>>>>> http://camel.apache.org/schema/spring/camel-spring.xsd";>*
>>>>>>>
>>>>>>>
>>>>>>> *    <!-- START SNIPPET: e2 -->*
>>>>>>> *    <camel:camelContext id="camel"/>*
>>>>>>> *    <camel:template id="producer"/>*
>>>>>>> *   <camel:consumerTemplate id="consumer"/> *
>>>>>>>
>>>>>>> But I keep getting:
>>>>>>>
>>>>>>> *The matching wildcard is strict, but no declaration can be found for
>>>>>>> element 'camel:consumerTemplate'.*
>>>>>>>
>>>>>>> Then I changed it to:
>>>>>>> *<camel:consumer id="consumer"/> *
>>>>>>> **
>>>>>>> **
>>>>>>> But still get*
>>>>>>> *
>>>>>>> *Caused by:
>>>>>>>
>>>>>>>
>>>>>>> org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
>>>>>>> Configuration problem: Cannot locate BeanDefinitionParser for element
>>>>>>> [consumer]*
>>>>>>> *Offending resource: class path resource [camel-client.xml]*
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ---
>>>>>>> Thank You…
>>>>>>>
>>>>>>> Mick Knutson, President
>>>>>>>
>>>>>>> BASE Logic, Inc.
>>>>>>> Enterprise Architecture, Design, Mentoring & Agile Consulting
>>>>>>> p. (866) BLiNC-411: (254-6241-1)
>>>>>>> f. (415) 685-4233
>>>>>>>
>>>>>>> Website: http://baselogic.com
>>>>>>> Linked IN: http://linkedin.com/in/mickknutson
>>>>>>> Vacation Rental: http://tahoe.baselogic.com
>>>>>>> ---
>>>>>>>
>>>>>>>
>>>>
>>>
>>>
>>
>>
>>
>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Reply via email to