Hi

Fell free to create a JIRA ticket for an improvement to the loop DSL
so we can add an option to control if looping should be from
- a copy of the input message
- continue looping the same message

http://camel.apache.org/support

On Fri, May 27, 2011 at 11:58 PM, Greg McFall <gregory.mcf...@gmail.com> wrote:
> I just tried it.  Sadly, the inOnly() trick does not work.
>
> On Fri, May 27, 2011 at 5:50 PM, Donald Whytock <dwhyt...@gmail.com> wrote:
>
>> Have you tried using inOnly()?  As in
>>
>> from(start).loop(3).inOnly().to(endpoint);
>>
>> On Fri, May 27, 2011 at 5:34 PM, Greg McFall <gregory.mcf...@gmail.com>
>> wrote:
>> > Don,
>> > If the LoopProcessor was intentionally designed so that the output from
>> one
>> > iteration is used as input to the next iteration, then the documentation
>> > should say so.
>> > The current documentation is misleading because it implies a different
>> > behavior.  It implies that the original message is repeated for each
>> > iteration of the loop.
>> >
>> > Even if it is not a bug, I think there is a case for an enhancement
>> request.
>> >  There ought to be an option to process the same message multiple times
>> > instead of using the output from one iteration as input to the next
>> > iteration.
>> >
>> > For example, I'd like to be able to do something like the following:
>> >
>> > from(start).loop(3).repeatOriginalMessage().to(endpoint);
>> >
>> > ~ Greg
>> >
>> >
>> >
>> > On Fri, May 27, 2011 at 5:16 PM, Donald Whytock <dwhyt...@gmail.com>
>> wrote:
>> >
>> >> 1. The CopyProcessor, yes, that doesn't currently exist.  The
>> >> processor to hand to the CopyProcessor should be whatever you're using
>> >> already.  If you're just sending the message to an endpoint over and
>> >> over, it could be an instance of SendProcessor(endpoint).
>> >>
>> >> 2. I don't think it's a bug.  A given Processor is inherently a
>> >> transformer; I could see a situation where you'd want to modify the
>> >> same exchange over and over.  So the functionality of the loop is
>> >> entirely dependent on the functionality of the processor you attach to
>> >> it.
>> >>
>> >> On Fri, May 27, 2011 at 4:48 PM, Greg McFall <gregory.mcf...@gmail.com>
>> >> wrote:
>> >> > Don,
>> >> >
>> >> > Yes, that might work.  But I have two issues:
>> >> >
>> >> > 1.  This solution requires that I somehow build the downstream
>> Processor
>> >> > that I will pass as an argument to the constructor.  This is certainly
>> >> > possible, but it does not mesh well with the fluid Java DSL.
>> >> >
>> >> > 2.  It seems to me that I should not have to resort to a workaround
>> like
>> >> the
>> >> > one you proposed.  I am wondering if this is bug in the LoopProcessor
>> >> > implementation that should be reported.  (Or maybe it's a bug in the
>> >> > documentation.)
>> >> >
>> >> > ~ Greg
>> >> >
>> >> >
>> >> >
>> >> > On Fri, May 27, 2011 at 1:58 PM, Donald Whytock <dwhyt...@gmail.com>
>> >> wrote:
>> >> >
>> >> >> Create a CopyProcessor, along the lines of:
>> >> >>
>> >> >> public class CopyProcessor implements Processor
>> >> >>  {
>> >> >>  Processor processor;
>> >> >>
>> >> >>  public CopyProcessor(Processor processor)
>> >> >>    { this.processor = processor; }
>> >> >>
>> >> >>  public void process(Exchange exchange) throws Exception
>> >> >>    { processor.process(exchange.copy()); }
>> >> >>
>> >> >>  }
>> >> >>
>> >> >> Then use it in your loop:
>> >> >>
>> >> >>  from(endpoint)
>> >> >>    .process(new LoopProcessor(new CopyProcessor(processor)));
>> >> >>
>> >> >> On Fri, May 27, 2011 at 1:24 PM, Greg McFall <
>> gregory.mcf...@gmail.com>
>> >> >> wrote:
>> >> >> > Don,
>> >> >> >
>> >> >> > I don't understand what you are proposing.  How would I swap out
>> the
>> >> >> > exchange?
>> >> >> >
>> >> >> > ~ Greg
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > On Fri, May 27, 2011 at 12:54 PM, Donald Whytock <
>> dwhyt...@gmail.com>
>> >> >> wrote:
>> >> >> >
>> >> >> >> How about using Exchange.copy() to pass a copy of the exchange to
>> the
>> >> >> >> downstream processor, so that the original exchange doesn't get
>> >> >> >> changed?
>> >> >> >>
>> >> >> >> Don
>> >> >> >>
>> >> >> >> On Fri, May 27, 2011 at 12:36 PM, Greg McFall <
>> >> gregory.mcf...@gmail.com
>> >> >> >
>> >> >> >> wrote:
>> >> >> >> > Hi,
>> >> >> >> >
>> >> >> >> > The Camel documentation contains the following statement about
>> the
>> >> >> Loop
>> >> >> >> > pattern:
>> >> >> >> >
>> >> >> >> > The Loop allows to process a message a number of times and
>> possibly
>> >> >> >> process
>> >> >> >> > them in a different way.
>> >> >> >> >
>> >> >> >> > This seems to imply that the same input message will be
>> processed
>> >> by
>> >> >> the
>> >> >> >> > downstream pipeline with each subsequent iteration.
>> >> >> >> > But my experience shows that the output from one iteration of
>> the
>> >> loop
>> >> >> is
>> >> >> >> > used as input to the next iteration.
>> >> >> >> >
>> >> >> >> > Is this the expected behavior?
>> >> >> >> > That seems like a strange way to define a loop.
>> >> >> >> > Is there any way to coerce the Loop to operate on the same exact
>> >> input
>> >> >> >> > message for each iteration?
>> >> >> >> >
>> >> >> >> > Cheers,
>> >> >> >> > Greg McFall
>> >> >> >> >
>> >> >> >>
>> >> >> >
>> >> >>
>> >> >
>> >>
>> >
>>
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
CamelOne 2011: http://fusesource.com/camelone2011/
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to