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 <[email protected]>
> 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 <[email protected]>
>>>> 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.