camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: Intercept a processor?
Date Fri, 15 Jan 2010 06:02:43 GMT
Hi

I posted a blog entry about the new feature in 2.2
http://davsclaus.blogspot.com/2010/01/apache-camel-22-improved-test-kit.html



On Wed, Jan 13, 2010 at 8:14 PM, Johan Haleby <johan.haleby@gmail.com> wrote:
>
> That looks really neat and would as far as I can see really help. It would be
> simple for me to wrap this in a test base class exposing something like
> "awaitCompletion("direct:foo")".
>
> Would be desirable/possible to have something similar to modify or extend an
> already defined route? Something like:
> RouteModificationBuilder builder = new
> RouteModificationBuilder(camelContext);
> builder.from("direct:foo").append(new Processor(..)).apply();
>
> Or can you do this already?
>
> Thanks,
> /Johan
>
>
> Claus Ibsen-2 wrote:
>>
>> Hi
>>
>> I think CAMEL-2357 is what you are looking for
>> https://issues.apache.org/activemq/browse/CAMEL-2357
>>
>> If you could take a look and maybe if you got some ideas or how you
>> would like the API to be to support your use-case.
>> There are some code snippets of my prototype in there.
>>
>>
>> On Wed, Jan 13, 2010 at 9:11 AM, Johan Haleby <johan.haleby@gmail.com>
>> wrote:
>>>
>>> Hi,
>>>
>>> Thank you very much your suggestion with event notifiers worked! But I
>>> hope
>>> the changes in 2.2 can make it even better since now the
>>> ExchangeCompletedEvent is sent several times (once per "from" in the
>>> route
>>> definition") and thus it's hard to know the count in the latch when
>>> you're
>>> not sure to which endpoint the users sends the first message.
>>>
>>> Would you recommend using a snapshot of version 2.2 right now? (We'd also
>>> like to use Spring 3 in our project).
>>>
>>> /Johan
>>>
>>>
>>> Johan Haleby wrote:
>>>>
>>>> Hi,
>>>>
>>>> Thanks for your quick response. Sorry for not mentioning it in the
>>>> previous mail but I'm using Camel 2.1 just as you suspected.
>>>> Unfortunately
>>>> the first solution you posted (using async send and latches) won't work
>>>> "out of the box" for me because the producer template is wrapped in an
>>>> anti-corruption layer and the test should use this anti-corruption layer
>>>> to send the message.
>>>>
>>>> I'll look into your suggestion by subscribing to the ExchangeDoneEvent.
>>>> Is
>>>> there anywhere I can find some documentation or example of how to do
>>>> this?
>>>> Or was it this that you went through in chapter 6 in the book?
>>>>
>>>> I look forward to the changes you mention in version 2.2, seems really
>>>> useful and looks to fit very well with what I'm trying to do here. Is
>>>> there an expected date when 2.2 may be available?
>>>>
>>>> Regards,
>>>> /Johan
>>>>
>>>> The first option won't work
>>>>
>>>> Claus Ibsen-2 wrote:
>>>>>
>>>>> On Tue, Jan 12, 2010 at 5:56 PM, Johan Haleby <johan.haleby@gmail.com>
>>>>> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I'm configuring routes using the Java DSL and it works very well.
>>>>>> However
>>>>>> during testing I'd like to somehow hook into the end of an already
>>>>>> defined
>>>>>> route to add notification support. The reason is that in my test
I'm
>>>>>> creating a message and pass it to a queue using Camel and this message
>>>>>> is
>>>>>> handled by a processor. After this processor has finished executing
>>>>>> I'd
>>>>>> like
>>>>>> to receive some sort of notification but only during testing. The
>>>>>> reason
>>>>>> is
>>>>>> that I'd like my test to wait until the processor has finished
>>>>>> executing
>>>>>> in
>>>>>> my test case so that I can verify the result of the processor. For
>>>>>> example:
>>>>>>
>>>>>> public void test() {
>>>>>>  1. send a message to queue // just as you would in production
>>>>>>  2. wait for the processor to finish // this is where I'd like to
get
>>>>>> a
>>>>>> notification that the processor has finished so that it's ok to
>>>>>> continue
>>>>>> to
>>>>>> the next step
>>>>>>  3. verify result
>>>>>> }
>>>>>>
>>>>>> The route may look something like:
>>>>>> from("jms:queue:myqueue).process(new MyProcessor()); // A
>>>>>> simplification
>>>>>> of
>>>>>> the production route
>>>>>>
>>>>>> Is there a preferred way of doing this in Camel without changing
the
>>>>>> code
>>>>>> making up the "production route"? Or is there a better way to achieve
>>>>>> it?
>>>>>>
>>>>>
>>>>> Chapter 6 in the book go over this issue and how to address that:
>>>>> http://www.manning.com/ibsen/ (will be updated in next MEAP due this
>>>>> month)
>>>>>
>>>>> However we made it easier to do nice and easy from an unit test in 2.2
>>>>> which I assume is not the version of Camel you are using.
>>>>> In 2.2 you can advice and route by adding additional cross cutting
>>>>> concerns such as onCompletion, interceptors etc. which you would then
>>>>> be able to use to know when its done.
>>>>>
>>>>> In Camel 2.1 you got the EventNotification which you actually can use
>>>>> for that to get notified when an Exchange is done as it emits a
>>>>> ExchangeDoneEvent.
>>>>> I am currently improving that for 2.2 to let you filter out of the box
>>>>> the notifier so you only receive interesting events. But that should
>>>>> not hold you back from using that in 2.1.
>>>>>
>>>>> We may improve this situation even more to make it easy as it can get
>>>>> for testing production routes with test methods. So kinda inject mocks
>>>>> at end of routes etc. so you can use that to verify behavior etc.
>>>>>
>>>>>
>>>>>> /Johan
>>>>>>
>>>>>> --
>>>>>> View this message in context:
>>>>>> http://old.nabble.com/Intercept-a-processor--tp27130672p27130672.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/Intercept-a-processor--tp27130672p27140999.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/Intercept-a-processor--tp27130672p27148815.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

Mime
View raw message