You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Wilson MacGyver <wm...@gmail.com> on 2015/08/06 17:26:20 UTC

Re: action at the end of the split

I figured out what I was doing wrong.  It's because I was using filter with
bean. I didn't realize I had to add an end() to terminate the filtering


from()

.split(body().tokenize("\n")).streaming()

.process() /do stuff

.filter().method(MyFilter.class, "keepIt")

  .to("mock:result")

.end()

.log("final time ${property.CamelSplitSize}")

.to(smtp://)


now I have a different problem. I need to know the # of total processed.
But the CamelSplitSize property is out of scope. Anyway to work around
that?


Thanks



On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <cl...@gmail.com> wrote:

> You must be doing some more inside the splitter and you may need 2 x end
>
> On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <wm...@gmail.com>
> wrote:
> > hmm, if I understand you correctly, this isn't working for me.
> >
> > I have
> >
> > from()
> >
> > .split(body().tokenize("\n")).streaming()
> >
> > .process() /do stuff
> >
> > .end()
> >
> > .log("${in.body}")
> >
> > .to(smtp://)
> >
> >
> > say if the file has 100 lines, I'd except to see the log once if I
> > understand what you are saying correctly. but I see the log 100 times.
> >
> >
> > Thanks,
> >
> >
> >
> > On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <cl...@gmail.com>
> wrote:
> >
> >> You can do that after the splitter
> >>
> >> <from>
> >>   <split>
> >>     ... inside splitter
> >>   </split>
> >>  .. split done
> >>   <to email> send email here
> >>
> >> In Java DSL you can use .end() to end the split block.
> >>
> >> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <wm...@gmail.com>
> >> wrote:
> >> > Hi,
> >> >
> >> > I'm processing a large file. so I use .split and .streaming to process
> >> it a
> >> > record at a time.
> >> >
> >> > I would like to send an email alert upon completion of processing the
> >> file.
> >> >
> >> > but I can't figure out where to do that.
> >> >
> >> > I know I can check to see if it's the last exchange using property
> >> > "CamelSplitComplete", but it's set to true on the last exchange. So I
> >> still
> >> > need to let it finish.
> >> >
> >> > Is there a good way to this?
> >> >
> >> > Thanks,
> >> > Mac
> >> >
> >> > --
> >> > Omnem crede diem tibi diluxisse supremum.
> >>
> >>
> >>
> >> --
> >> Claus Ibsen
> >> -----------------
> >> http://davsclaus.com @davsclaus
> >> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> >>
> >
> >
> >
> > --
> > Omnem crede diem tibi diluxisse supremum.
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2nd edition: http://www.manning.com/ibsen2
>



-- 
Omnem crede diem tibi diluxisse supremum.

Re: action at the end of the split

Posted by Christian Müller <ch...@gmail.com>.
You can do this by using a custom AggregationStrategy.
I can provide an example tomorrow...

Best,
Am 10.08.2015 22:50 schrieb "Wilson MacGyver" <wm...@gmail.com>:

> I'm sorry my message isn't clear. I've read the docs and the chapter that
> deal with this in the camel book. The issue I have isn't with the each time
> part.
>
> It's the final log part after the split is done. My goal is after the end
> of the split block to send an email logging the total number updates.
>
> But as you can see, CamelSplitSize is no longer set outside of the split
> block. So I have no way of sending that to a SMTP route.
>
> On Mon, Aug 10, 2015 at 4:15 PM Christian Müller <
> christian.mueller@gmail.com> wrote:
>
> > Sure, that's how stream works. We do not load the entire payload into
> > memory.
> > Why don't you use the property CamelSplitIndex? In this case, the output
> > will be
> >
> > [Test worker] INFO route1 - each time 0
> >
> > [Test worker] INFO route1 - each time 1
> >
> > [Test worker] INFO route1 - each time 2
> >
> > Best,
> >
> > Christian
> > -----------------
> >
> > Software Integration Specialist
> >
> > Apache Member
> > V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> > Apache Incubator PMC Member
> >
> > https://www.linkedin.com/pub/christian-mueller/11/551/642
> >
> > On Mon, Aug 10, 2015 at 4:35 AM, Wilson MacGyver <wm...@gmail.com>
> > wrote:
> >
> > > public class SplitTest extends CamelTestSupport {
> > >
> > >     @EndpointInject(uri = "mock:result")
> > >
> > >     protected MockEndpoint resultEndpoint;
> > >
> > >
> > >     @Produce(uri = "direct:testSplit")
> > >
> > >     protected org.apache.camel.ProducerTemplate template;
> > >
> > >
> > >     @Test
> > >
> > >     public void testWithString() throws Exception{
> > >
> > >         String content = "a\nb\nc";
> > >
> > >
> > >         resultEndpoint.expectedMessageCount(3);
> > >
> > >
> > >         template.sendBodyAndHeader(
> > >
> > >                 content,
> > >
> > >                 "foo", "bar");
> > >
> > >
> > >         resultEndpoint.assertIsSatisfied();
> > >
> > >     }
> > >
> > >
> > >     @Override
> > >
> > >     protected RouteBuilder createRouteBuilder() {
> > >
> > >         return new RouteBuilder() {
> > >
> > >             public void configure() {
> > >
> > >                 from("direct:testSplit")
> > >
> > >                         .split(body().tokenize("\n")).streaming()
> > >
> > >                             .log("each time
> ${property.CamelSplitSize}")
> > >
> > >                             .to("mock:result")
> > >
> > >                         .end()
> > >
> > >                         .log("Processed ${property.CamelSplitSize}
> > > updates")
> > >
> > >                         .log("should only happen once");
> > >
> > >             }
> > >
> > >         };
> > >
> > >     }
> > >
> > > }
> > >
> > >
> > > running this, I get the following
> > >
> > >
> > >
> > > [Test worker] INFO route1 - each time
> > >
> > > [Test worker] INFO route1 - each time
> > >
> > > [Test worker] INFO route1 - each time 3
> > >
> > > [Test worker] INFO route1 - Processed  updates
> > >
> > > [Test worker] INFO route1 - should only happen once
> > >
> > >
> > > given the input of 3 lines. CamelSplitSize is only set at the end of
> the
> > > split. so only the 3rd time has the 3 displayed which is correct.
> > >
> > > however notice it says  Processed  updates, because the property is
> only
> > > set within the split..end block
> > >
> > > that's what I meant by out of scope
> > >
> > >
> > >
> > > On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller <
> > > christian.mueller@gmail.com> wrote:
> > >
> > > > What do you mean with "is out of scope"?
> > > > You can use the message header to get this information.
> > > >
> > > > Best,
> > > >
> > > > Christian
> > > > -----------------
> > > >
> > > > Software Integration Specialist
> > > >
> > > > Apache Member
> > > > V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> > > > Apache Incubator PMC Member
> > > >
> > > > https://www.linkedin.com/pub/christian-mueller/11/551/642
> > > >
> > > > On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <wmacgyver@gmail.com
> >
> > > > wrote:
> > > >
> > > > > I figured out what I was doing wrong.  It's because I was using
> > filter
> > > > with
> > > > > bean. I didn't realize I had to add an end() to terminate the
> > filtering
> > > > >
> > > > >
> > > > > from()
> > > > >
> > > > > .split(body().tokenize("\n")).streaming()
> > > > >
> > > > > .process() /do stuff
> > > > >
> > > > > .filter().method(MyFilter.class, "keepIt")
> > > > >
> > > > >   .to("mock:result")
> > > > >
> > > > > .end()
> > > > >
> > > > > .log("final time ${property.CamelSplitSize}")
> > > > >
> > > > > .to(smtp://)
> > > > >
> > > > >
> > > > > now I have a different problem. I need to know the # of total
> > > processed.
> > > > > But the CamelSplitSize property is out of scope. Anyway to work
> > around
> > > > > that?
> > > > >
> > > > >
> > > > > Thanks
> > > > >
> > > > >
> > > > >
> > > > > On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <
> claus.ibsen@gmail.com>
> > > > > wrote:
> > > > >
> > > > > > You must be doing some more inside the splitter and you may need
> 2
> > x
> > > > end
> > > > > >
> > > > > > On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <
> > > wmacgyver@gmail.com>
> > > > > > wrote:
> > > > > > > hmm, if I understand you correctly, this isn't working for me.
> > > > > > >
> > > > > > > I have
> > > > > > >
> > > > > > > from()
> > > > > > >
> > > > > > > .split(body().tokenize("\n")).streaming()
> > > > > > >
> > > > > > > .process() /do stuff
> > > > > > >
> > > > > > > .end()
> > > > > > >
> > > > > > > .log("${in.body}")
> > > > > > >
> > > > > > > .to(smtp://)
> > > > > > >
> > > > > > >
> > > > > > > say if the file has 100 lines, I'd except to see the log once
> if
> > I
> > > > > > > understand what you are saying correctly. but I see the log 100
> > > > times.
> > > > > > >
> > > > > > >
> > > > > > > Thanks,
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <
> > > claus.ibsen@gmail.com>
> > > > > > wrote:
> > > > > > >
> > > > > > >> You can do that after the splitter
> > > > > > >>
> > > > > > >> <from>
> > > > > > >>   <split>
> > > > > > >>     ... inside splitter
> > > > > > >>   </split>
> > > > > > >>  .. split done
> > > > > > >>   <to email> send email here
> > > > > > >>
> > > > > > >> In Java DSL you can use .end() to end the split block.
> > > > > > >>
> > > > > > >> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <
> > > > wmacgyver@gmail.com
> > > > > >
> > > > > > >> wrote:
> > > > > > >> > Hi,
> > > > > > >> >
> > > > > > >> > I'm processing a large file. so I use .split and .streaming
> to
> > > > > process
> > > > > > >> it a
> > > > > > >> > record at a time.
> > > > > > >> >
> > > > > > >> > I would like to send an email alert upon completion of
> > > processing
> > > > > the
> > > > > > >> file.
> > > > > > >> >
> > > > > > >> > but I can't figure out where to do that.
> > > > > > >> >
> > > > > > >> > I know I can check to see if it's the last exchange using
> > > property
> > > > > > >> > "CamelSplitComplete", but it's set to true on the last
> > exchange.
> > > > So
> > > > > I
> > > > > > >> still
> > > > > > >> > need to let it finish.
> > > > > > >> >
> > > > > > >> > Is there a good way to this?
> > > > > > >> >
> > > > > > >> > Thanks,
> > > > > > >> > Mac
> > > > > > >> >
> > > > > > >> > --
> > > > > > >> > Omnem crede diem tibi diluxisse supremum.
> > > > > > >>
> > > > > > >>
> > > > > > >>
> > > > > > >> --
> > > > > > >> Claus Ibsen
> > > > > > >> -----------------
> > > > > > >> http://davsclaus.com @davsclaus
> > > > > > >> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > > > > >>
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Omnem crede diem tibi diluxisse supremum.
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Claus Ibsen
> > > > > > -----------------
> > > > > > http://davsclaus.com @davsclaus
> > > > > > Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Omnem crede diem tibi diluxisse supremum.
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Omnem crede diem tibi diluxisse supremum.
> > >
> >
>

Re: action at the end of the split

Posted by Wilson MacGyver <wm...@gmail.com>.
oh I see! thanks, will give that a try

On Sat, Aug 15, 2015 at 6:00 AM, Christian Müller <
christian.mueller@gmail.com> wrote:

> Check out http://camel.apache.org/splitter.html and look for the paragraph
> "Split aggregate request/reply sample"
>
> Here you have an example of a splitter using a custom aggregation strategy.
> In your aggregation strategy, you have to make sure the CamelSplitSize
> property is set on the exchange you are returning (you may have to copy it
> from the other exchange). Than, this property is also available after the
> end().
>
> Best,
> Christian
> -----------------
>
> Software Integration Specialist
>
> Apache Member
> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> Apache Incubator PMC Member
>
> https://www.linkedin.com/pub/christian-mueller/11/551/642
>
> On Sat, Aug 15, 2015 at 4:08 AM, Wilson MacGyver <wm...@gmail.com>
> wrote:
>
> > thanks, that sadly doesn't work either.
> >
> > I tried
> >
> >                 from("direct:testSplit")
> >
> >                         .split(body().tokenize("\n")).streaming()
> >
> >                             .setProperty("totalSize",
> > simple("${property.CamelSplitSize}"))
> >
> >                         .to("mock:result")
> >
> >                         .end()
> >
> >                         .log("property ${exchangeProperty.totalSize}
> > updates")
> >
> >                         .log("should only happen once");
> >
> >
> > and exchangeProperty.totalSize isn't set outside of the split.
> >
> >
> > Thanks
> >
> >
> >
> >
> > On Fri, Aug 14, 2015 at 6:00 PM, Luis Augusto C. Sauerbronn <
> > lasauer@gmail.com> wrote:
> >
> > > Hi,
> > >
> > > If you want to store an information to use it later during the lifetime
> > of
> > > the request you should place it in the "Exchange Properties" not in the
> > > "Input/Output Headers".
> > > Many endpoints and processors do not pass ahead the received headers.
> If
> > > you put it on the Exchange properties it will exist through the whole
> > life
> > > cycle of the request.
> > >
> > > Best regards,
> > >
> > > Luis
> > >
> > > 2015-08-14 17:49 GMT-03:00 Wilson MacGyver <wm...@gmail.com>:
> > >
> > > > tried that, sadly no go. any header I set within the split, isn't
> > > > accessible outside of the split block either.
> > > >
> > > > On Tue, Aug 11, 2015 at 4:54 AM, mailinglist@j-b-s.de <
> > > > mailinglist@j-b-s.de>
> > > > wrote:
> > > >
> > > > > Hi!
> > > > >
> > > > > Try the following: in your split route just set a new header field
> > with
> > > > > the value of "splitsize". Ok, this assignment is made more than
> once
> > > > > redundantly per each splitted element, but header properties you
> > create
> > > > on
> > > > > the original message are retained (hopefully :-)
> > > > >
> > > > > Jens
> > > > >
> > > > > Von meinem iPhone gesendet
> > > > >
> > > > > > Am 10.08.2015 um 21:49 schrieb Wilson MacGyver <
> > wmacgyver@gmail.com
> > > >:
> > > > > >
> > > > > > I'm sorry my message isn't clear. I've read the docs and the
> > chapter
> > > > that
> > > > > > deal with this in the camel book. The issue I have isn't with the
> > > each
> > > > > time
> > > > > > part.
> > > > > >
> > > > > > It's the final log part after the split is done. My goal is after
> > the
> > > > end
> > > > > > of the split block to send an email logging the total number
> > updates.
> > > > > >
> > > > > > But as you can see, CamelSplitSize is no longer set outside of
> the
> > > > split
> > > > > > block. So I have no way of sending that to a SMTP route.
> > > > > >
> > > > > > On Mon, Aug 10, 2015 at 4:15 PM Christian Müller <
> > > > > > christian.mueller@gmail.com> wrote:
> > > > > >
> > > > > >> Sure, that's how stream works. We do not load the entire payload
> > > into
> > > > > >> memory.
> > > > > >> Why don't you use the property CamelSplitIndex? In this case,
> the
> > > > output
> > > > > >> will be
> > > > > >>
> > > > > >> [Test worker] INFO route1 - each time 0
> > > > > >>
> > > > > >> [Test worker] INFO route1 - each time 1
> > > > > >>
> > > > > >> [Test worker] INFO route1 - each time 2
> > > > > >>
> > > > > >> Best,
> > > > > >>
> > > > > >> Christian
> > > > > >> -----------------
> > > > > >>
> > > > > >> Software Integration Specialist
> > > > > >>
> > > > > >> Apache Member
> > > > > >> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel
> > committer
> > > > > >> Apache Incubator PMC Member
> > > > > >>
> > > > > >> https://www.linkedin.com/pub/christian-mueller/11/551/642
> > > > > >>
> > > > > >> On Mon, Aug 10, 2015 at 4:35 AM, Wilson MacGyver <
> > > wmacgyver@gmail.com
> > > > >
> > > > > >> wrote:
> > > > > >>
> > > > > >>> public class SplitTest extends CamelTestSupport {
> > > > > >>>
> > > > > >>>    @EndpointInject(uri = "mock:result")
> > > > > >>>
> > > > > >>>    protected MockEndpoint resultEndpoint;
> > > > > >>>
> > > > > >>>
> > > > > >>>    @Produce(uri = "direct:testSplit")
> > > > > >>>
> > > > > >>>    protected org.apache.camel.ProducerTemplate template;
> > > > > >>>
> > > > > >>>
> > > > > >>>    @Test
> > > > > >>>
> > > > > >>>    public void testWithString() throws Exception{
> > > > > >>>
> > > > > >>>        String content = "a\nb\nc";
> > > > > >>>
> > > > > >>>
> > > > > >>>        resultEndpoint.expectedMessageCount(3);
> > > > > >>>
> > > > > >>>
> > > > > >>>        template.sendBodyAndHeader(
> > > > > >>>
> > > > > >>>                content,
> > > > > >>>
> > > > > >>>                "foo", "bar");
> > > > > >>>
> > > > > >>>
> > > > > >>>        resultEndpoint.assertIsSatisfied();
> > > > > >>>
> > > > > >>>    }
> > > > > >>>
> > > > > >>>
> > > > > >>>    @Override
> > > > > >>>
> > > > > >>>    protected RouteBuilder createRouteBuilder() {
> > > > > >>>
> > > > > >>>        return new RouteBuilder() {
> > > > > >>>
> > > > > >>>            public void configure() {
> > > > > >>>
> > > > > >>>                from("direct:testSplit")
> > > > > >>>
> > > > > >>>
> .split(body().tokenize("\n")).streaming()
> > > > > >>>
> > > > > >>>                            .log("each time
> > > > ${property.CamelSplitSize}")
> > > > > >>>
> > > > > >>>                            .to("mock:result")
> > > > > >>>
> > > > > >>>                        .end()
> > > > > >>>
> > > > > >>>                        .log("Processed
> ${property.CamelSplitSize}
> > > > > >>> updates")
> > > > > >>>
> > > > > >>>                        .log("should only happen once");
> > > > > >>>
> > > > > >>>            }
> > > > > >>>
> > > > > >>>        };
> > > > > >>>
> > > > > >>>    }
> > > > > >>>
> > > > > >>> }
> > > > > >>>
> > > > > >>>
> > > > > >>> running this, I get the following
> > > > > >>>
> > > > > >>>
> > > > > >>>
> > > > > >>> [Test worker] INFO route1 - each time
> > > > > >>>
> > > > > >>> [Test worker] INFO route1 - each time
> > > > > >>>
> > > > > >>> [Test worker] INFO route1 - each time 3
> > > > > >>>
> > > > > >>> [Test worker] INFO route1 - Processed  updates
> > > > > >>>
> > > > > >>> [Test worker] INFO route1 - should only happen once
> > > > > >>>
> > > > > >>>
> > > > > >>> given the input of 3 lines. CamelSplitSize is only set at the
> end
> > > of
> > > > > the
> > > > > >>> split. so only the 3rd time has the 3 displayed which is
> correct.
> > > > > >>>
> > > > > >>> however notice it says  Processed  updates, because the
> property
> > is
> > > > > only
> > > > > >>> set within the split..end block
> > > > > >>>
> > > > > >>> that's what I meant by out of scope
> > > > > >>>
> > > > > >>>
> > > > > >>>
> > > > > >>> On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller <
> > > > > >>> christian.mueller@gmail.com> wrote:
> > > > > >>>
> > > > > >>>> What do you mean with "is out of scope"?
> > > > > >>>> You can use the message header to get this information.
> > > > > >>>>
> > > > > >>>> Best,
> > > > > >>>>
> > > > > >>>> Christian
> > > > > >>>> -----------------
> > > > > >>>>
> > > > > >>>> Software Integration Specialist
> > > > > >>>>
> > > > > >>>> Apache Member
> > > > > >>>> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel
> > > committer
> > > > > >>>> Apache Incubator PMC Member
> > > > > >>>>
> > > > > >>>> https://www.linkedin.com/pub/christian-mueller/11/551/642
> > > > > >>>>
> > > > > >>>> On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <
> > > > wmacgyver@gmail.com>
> > > > > >>>> wrote:
> > > > > >>>>
> > > > > >>>>> I figured out what I was doing wrong.  It's because I was
> using
> > > > > >> filter
> > > > > >>>> with
> > > > > >>>>> bean. I didn't realize I had to add an end() to terminate the
> > > > > >> filtering
> > > > > >>>>>
> > > > > >>>>>
> > > > > >>>>> from()
> > > > > >>>>>
> > > > > >>>>> .split(body().tokenize("\n")).streaming()
> > > > > >>>>>
> > > > > >>>>> .process() /do stuff
> > > > > >>>>>
> > > > > >>>>> .filter().method(MyFilter.class, "keepIt")
> > > > > >>>>>
> > > > > >>>>>  .to("mock:result")
> > > > > >>>>>
> > > > > >>>>> .end()
> > > > > >>>>>
> > > > > >>>>> .log("final time ${property.CamelSplitSize}")
> > > > > >>>>>
> > > > > >>>>> .to(smtp://)
> > > > > >>>>>
> > > > > >>>>>
> > > > > >>>>> now I have a different problem. I need to know the # of total
> > > > > >>> processed.
> > > > > >>>>> But the CamelSplitSize property is out of scope. Anyway to
> work
> > > > > >> around
> > > > > >>>>> that?
> > > > > >>>>>
> > > > > >>>>>
> > > > > >>>>> Thanks
> > > > > >>>>>
> > > > > >>>>>
> > > > > >>>>>
> > > > > >>>>> On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <
> > > > claus.ibsen@gmail.com>
> > > > > >>>>> wrote:
> > > > > >>>>>
> > > > > >>>>>> You must be doing some more inside the splitter and you may
> > > need 2
> > > > > >> x
> > > > > >>>> end
> > > > > >>>>>>
> > > > > >>>>>> On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <
> > > > > >>> wmacgyver@gmail.com>
> > > > > >>>>>> wrote:
> > > > > >>>>>>> hmm, if I understand you correctly, this isn't working for
> > me.
> > > > > >>>>>>>
> > > > > >>>>>>> I have
> > > > > >>>>>>>
> > > > > >>>>>>> from()
> > > > > >>>>>>>
> > > > > >>>>>>> .split(body().tokenize("\n")).streaming()
> > > > > >>>>>>>
> > > > > >>>>>>> .process() /do stuff
> > > > > >>>>>>>
> > > > > >>>>>>> .end()
> > > > > >>>>>>>
> > > > > >>>>>>> .log("${in.body}")
> > > > > >>>>>>>
> > > > > >>>>>>> .to(smtp://)
> > > > > >>>>>>>
> > > > > >>>>>>>
> > > > > >>>>>>> say if the file has 100 lines, I'd except to see the log
> once
> > > if
> > > > > >> I
> > > > > >>>>>>> understand what you are saying correctly. but I see the log
> > 100
> > > > > >>>> times.
> > > > > >>>>>>>
> > > > > >>>>>>>
> > > > > >>>>>>> Thanks,
> > > > > >>>>>>>
> > > > > >>>>>>>
> > > > > >>>>>>>
> > > > > >>>>>>> On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <
> > > > > >>> claus.ibsen@gmail.com>
> > > > > >>>>>> wrote:
> > > > > >>>>>>>
> > > > > >>>>>>>> You can do that after the splitter
> > > > > >>>>>>>>
> > > > > >>>>>>>> <from>
> > > > > >>>>>>>>  <split>
> > > > > >>>>>>>>    ... inside splitter
> > > > > >>>>>>>>  </split>
> > > > > >>>>>>>> .. split done
> > > > > >>>>>>>>  <to email> send email here
> > > > > >>>>>>>>
> > > > > >>>>>>>> In Java DSL you can use .end() to end the split block.
> > > > > >>>>>>>>
> > > > > >>>>>>>> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <
> > > > > >>>> wmacgyver@gmail.com
> > > > > >>>>>>
> > > > > >>>>>>>> wrote:
> > > > > >>>>>>>>> Hi,
> > > > > >>>>>>>>>
> > > > > >>>>>>>>> I'm processing a large file. so I use .split and
> .streaming
> > > to
> > > > > >>>>> process
> > > > > >>>>>>>> it a
> > > > > >>>>>>>>> record at a time.
> > > > > >>>>>>>>>
> > > > > >>>>>>>>> I would like to send an email alert upon completion of
> > > > > >>> processing
> > > > > >>>>> the
> > > > > >>>>>>>> file.
> > > > > >>>>>>>>>
> > > > > >>>>>>>>> but I can't figure out where to do that.
> > > > > >>>>>>>>>
> > > > > >>>>>>>>> I know I can check to see if it's the last exchange using
> > > > > >>> property
> > > > > >>>>>>>>> "CamelSplitComplete", but it's set to true on the last
> > > > > >> exchange.
> > > > > >>>> So
> > > > > >>>>> I
> > > > > >>>>>>>> still
> > > > > >>>>>>>>> need to let it finish.
> > > > > >>>>>>>>>
> > > > > >>>>>>>>> Is there a good way to this?
> > > > > >>>>>>>>>
> > > > > >>>>>>>>> Thanks,
> > > > > >>>>>>>>> Mac
> > > > > >>>>>>>>>
> > > > > >>>>>>>>> --
> > > > > >>>>>>>>> Omnem crede diem tibi diluxisse supremum.
> > > > > >>>>>>>>
> > > > > >>>>>>>>
> > > > > >>>>>>>>
> > > > > >>>>>>>> --
> > > > > >>>>>>>> Claus Ibsen
> > > > > >>>>>>>> -----------------
> > > > > >>>>>>>> http://davsclaus.com @davsclaus
> > > > > >>>>>>>> Camel in Action 2nd edition:
> http://www.manning.com/ibsen2
> > > > > >>>>>>>
> > > > > >>>>>>>
> > > > > >>>>>>>
> > > > > >>>>>>> --
> > > > > >>>>>>> Omnem crede diem tibi diluxisse supremum.
> > > > > >>>>>>
> > > > > >>>>>>
> > > > > >>>>>>
> > > > > >>>>>> --
> > > > > >>>>>> Claus Ibsen
> > > > > >>>>>> -----------------
> > > > > >>>>>> http://davsclaus.com @davsclaus
> > > > > >>>>>> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > > > >>>>>
> > > > > >>>>>
> > > > > >>>>>
> > > > > >>>>> --
> > > > > >>>>> Omnem crede diem tibi diluxisse supremum.
> > > > > >>>
> > > > > >>>
> > > > > >>>
> > > > > >>> --
> > > > > >>> Omnem crede diem tibi diluxisse supremum.
> > > > > >>
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Omnem crede diem tibi diluxisse supremum.
> > > >
> > >
> >
> >
> >
> > --
> > Omnem crede diem tibi diluxisse supremum.
> >
>



-- 
Omnem crede diem tibi diluxisse supremum.

Re: action at the end of the split

Posted by Christian Müller <ch...@gmail.com>.
Check out http://camel.apache.org/splitter.html and look for the paragraph
"Split aggregate request/reply sample"

Here you have an example of a splitter using a custom aggregation strategy.
In your aggregation strategy, you have to make sure the CamelSplitSize
property is set on the exchange you are returning (you may have to copy it
from the other exchange). Than, this property is also available after the
end().

Best,
Christian
-----------------

Software Integration Specialist

Apache Member
V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
Apache Incubator PMC Member

https://www.linkedin.com/pub/christian-mueller/11/551/642

On Sat, Aug 15, 2015 at 4:08 AM, Wilson MacGyver <wm...@gmail.com>
wrote:

> thanks, that sadly doesn't work either.
>
> I tried
>
>                 from("direct:testSplit")
>
>                         .split(body().tokenize("\n")).streaming()
>
>                             .setProperty("totalSize",
> simple("${property.CamelSplitSize}"))
>
>                         .to("mock:result")
>
>                         .end()
>
>                         .log("property ${exchangeProperty.totalSize}
> updates")
>
>                         .log("should only happen once");
>
>
> and exchangeProperty.totalSize isn't set outside of the split.
>
>
> Thanks
>
>
>
>
> On Fri, Aug 14, 2015 at 6:00 PM, Luis Augusto C. Sauerbronn <
> lasauer@gmail.com> wrote:
>
> > Hi,
> >
> > If you want to store an information to use it later during the lifetime
> of
> > the request you should place it in the "Exchange Properties" not in the
> > "Input/Output Headers".
> > Many endpoints and processors do not pass ahead the received headers. If
> > you put it on the Exchange properties it will exist through the whole
> life
> > cycle of the request.
> >
> > Best regards,
> >
> > Luis
> >
> > 2015-08-14 17:49 GMT-03:00 Wilson MacGyver <wm...@gmail.com>:
> >
> > > tried that, sadly no go. any header I set within the split, isn't
> > > accessible outside of the split block either.
> > >
> > > On Tue, Aug 11, 2015 at 4:54 AM, mailinglist@j-b-s.de <
> > > mailinglist@j-b-s.de>
> > > wrote:
> > >
> > > > Hi!
> > > >
> > > > Try the following: in your split route just set a new header field
> with
> > > > the value of "splitsize". Ok, this assignment is made more than once
> > > > redundantly per each splitted element, but header properties you
> create
> > > on
> > > > the original message are retained (hopefully :-)
> > > >
> > > > Jens
> > > >
> > > > Von meinem iPhone gesendet
> > > >
> > > > > Am 10.08.2015 um 21:49 schrieb Wilson MacGyver <
> wmacgyver@gmail.com
> > >:
> > > > >
> > > > > I'm sorry my message isn't clear. I've read the docs and the
> chapter
> > > that
> > > > > deal with this in the camel book. The issue I have isn't with the
> > each
> > > > time
> > > > > part.
> > > > >
> > > > > It's the final log part after the split is done. My goal is after
> the
> > > end
> > > > > of the split block to send an email logging the total number
> updates.
> > > > >
> > > > > But as you can see, CamelSplitSize is no longer set outside of the
> > > split
> > > > > block. So I have no way of sending that to a SMTP route.
> > > > >
> > > > > On Mon, Aug 10, 2015 at 4:15 PM Christian Müller <
> > > > > christian.mueller@gmail.com> wrote:
> > > > >
> > > > >> Sure, that's how stream works. We do not load the entire payload
> > into
> > > > >> memory.
> > > > >> Why don't you use the property CamelSplitIndex? In this case, the
> > > output
> > > > >> will be
> > > > >>
> > > > >> [Test worker] INFO route1 - each time 0
> > > > >>
> > > > >> [Test worker] INFO route1 - each time 1
> > > > >>
> > > > >> [Test worker] INFO route1 - each time 2
> > > > >>
> > > > >> Best,
> > > > >>
> > > > >> Christian
> > > > >> -----------------
> > > > >>
> > > > >> Software Integration Specialist
> > > > >>
> > > > >> Apache Member
> > > > >> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel
> committer
> > > > >> Apache Incubator PMC Member
> > > > >>
> > > > >> https://www.linkedin.com/pub/christian-mueller/11/551/642
> > > > >>
> > > > >> On Mon, Aug 10, 2015 at 4:35 AM, Wilson MacGyver <
> > wmacgyver@gmail.com
> > > >
> > > > >> wrote:
> > > > >>
> > > > >>> public class SplitTest extends CamelTestSupport {
> > > > >>>
> > > > >>>    @EndpointInject(uri = "mock:result")
> > > > >>>
> > > > >>>    protected MockEndpoint resultEndpoint;
> > > > >>>
> > > > >>>
> > > > >>>    @Produce(uri = "direct:testSplit")
> > > > >>>
> > > > >>>    protected org.apache.camel.ProducerTemplate template;
> > > > >>>
> > > > >>>
> > > > >>>    @Test
> > > > >>>
> > > > >>>    public void testWithString() throws Exception{
> > > > >>>
> > > > >>>        String content = "a\nb\nc";
> > > > >>>
> > > > >>>
> > > > >>>        resultEndpoint.expectedMessageCount(3);
> > > > >>>
> > > > >>>
> > > > >>>        template.sendBodyAndHeader(
> > > > >>>
> > > > >>>                content,
> > > > >>>
> > > > >>>                "foo", "bar");
> > > > >>>
> > > > >>>
> > > > >>>        resultEndpoint.assertIsSatisfied();
> > > > >>>
> > > > >>>    }
> > > > >>>
> > > > >>>
> > > > >>>    @Override
> > > > >>>
> > > > >>>    protected RouteBuilder createRouteBuilder() {
> > > > >>>
> > > > >>>        return new RouteBuilder() {
> > > > >>>
> > > > >>>            public void configure() {
> > > > >>>
> > > > >>>                from("direct:testSplit")
> > > > >>>
> > > > >>>                        .split(body().tokenize("\n")).streaming()
> > > > >>>
> > > > >>>                            .log("each time
> > > ${property.CamelSplitSize}")
> > > > >>>
> > > > >>>                            .to("mock:result")
> > > > >>>
> > > > >>>                        .end()
> > > > >>>
> > > > >>>                        .log("Processed ${property.CamelSplitSize}
> > > > >>> updates")
> > > > >>>
> > > > >>>                        .log("should only happen once");
> > > > >>>
> > > > >>>            }
> > > > >>>
> > > > >>>        };
> > > > >>>
> > > > >>>    }
> > > > >>>
> > > > >>> }
> > > > >>>
> > > > >>>
> > > > >>> running this, I get the following
> > > > >>>
> > > > >>>
> > > > >>>
> > > > >>> [Test worker] INFO route1 - each time
> > > > >>>
> > > > >>> [Test worker] INFO route1 - each time
> > > > >>>
> > > > >>> [Test worker] INFO route1 - each time 3
> > > > >>>
> > > > >>> [Test worker] INFO route1 - Processed  updates
> > > > >>>
> > > > >>> [Test worker] INFO route1 - should only happen once
> > > > >>>
> > > > >>>
> > > > >>> given the input of 3 lines. CamelSplitSize is only set at the end
> > of
> > > > the
> > > > >>> split. so only the 3rd time has the 3 displayed which is correct.
> > > > >>>
> > > > >>> however notice it says  Processed  updates, because the property
> is
> > > > only
> > > > >>> set within the split..end block
> > > > >>>
> > > > >>> that's what I meant by out of scope
> > > > >>>
> > > > >>>
> > > > >>>
> > > > >>> On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller <
> > > > >>> christian.mueller@gmail.com> wrote:
> > > > >>>
> > > > >>>> What do you mean with "is out of scope"?
> > > > >>>> You can use the message header to get this information.
> > > > >>>>
> > > > >>>> Best,
> > > > >>>>
> > > > >>>> Christian
> > > > >>>> -----------------
> > > > >>>>
> > > > >>>> Software Integration Specialist
> > > > >>>>
> > > > >>>> Apache Member
> > > > >>>> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel
> > committer
> > > > >>>> Apache Incubator PMC Member
> > > > >>>>
> > > > >>>> https://www.linkedin.com/pub/christian-mueller/11/551/642
> > > > >>>>
> > > > >>>> On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <
> > > wmacgyver@gmail.com>
> > > > >>>> wrote:
> > > > >>>>
> > > > >>>>> I figured out what I was doing wrong.  It's because I was using
> > > > >> filter
> > > > >>>> with
> > > > >>>>> bean. I didn't realize I had to add an end() to terminate the
> > > > >> filtering
> > > > >>>>>
> > > > >>>>>
> > > > >>>>> from()
> > > > >>>>>
> > > > >>>>> .split(body().tokenize("\n")).streaming()
> > > > >>>>>
> > > > >>>>> .process() /do stuff
> > > > >>>>>
> > > > >>>>> .filter().method(MyFilter.class, "keepIt")
> > > > >>>>>
> > > > >>>>>  .to("mock:result")
> > > > >>>>>
> > > > >>>>> .end()
> > > > >>>>>
> > > > >>>>> .log("final time ${property.CamelSplitSize}")
> > > > >>>>>
> > > > >>>>> .to(smtp://)
> > > > >>>>>
> > > > >>>>>
> > > > >>>>> now I have a different problem. I need to know the # of total
> > > > >>> processed.
> > > > >>>>> But the CamelSplitSize property is out of scope. Anyway to work
> > > > >> around
> > > > >>>>> that?
> > > > >>>>>
> > > > >>>>>
> > > > >>>>> Thanks
> > > > >>>>>
> > > > >>>>>
> > > > >>>>>
> > > > >>>>> On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <
> > > claus.ibsen@gmail.com>
> > > > >>>>> wrote:
> > > > >>>>>
> > > > >>>>>> You must be doing some more inside the splitter and you may
> > need 2
> > > > >> x
> > > > >>>> end
> > > > >>>>>>
> > > > >>>>>> On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <
> > > > >>> wmacgyver@gmail.com>
> > > > >>>>>> wrote:
> > > > >>>>>>> hmm, if I understand you correctly, this isn't working for
> me.
> > > > >>>>>>>
> > > > >>>>>>> I have
> > > > >>>>>>>
> > > > >>>>>>> from()
> > > > >>>>>>>
> > > > >>>>>>> .split(body().tokenize("\n")).streaming()
> > > > >>>>>>>
> > > > >>>>>>> .process() /do stuff
> > > > >>>>>>>
> > > > >>>>>>> .end()
> > > > >>>>>>>
> > > > >>>>>>> .log("${in.body}")
> > > > >>>>>>>
> > > > >>>>>>> .to(smtp://)
> > > > >>>>>>>
> > > > >>>>>>>
> > > > >>>>>>> say if the file has 100 lines, I'd except to see the log once
> > if
> > > > >> I
> > > > >>>>>>> understand what you are saying correctly. but I see the log
> 100
> > > > >>>> times.
> > > > >>>>>>>
> > > > >>>>>>>
> > > > >>>>>>> Thanks,
> > > > >>>>>>>
> > > > >>>>>>>
> > > > >>>>>>>
> > > > >>>>>>> On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <
> > > > >>> claus.ibsen@gmail.com>
> > > > >>>>>> wrote:
> > > > >>>>>>>
> > > > >>>>>>>> You can do that after the splitter
> > > > >>>>>>>>
> > > > >>>>>>>> <from>
> > > > >>>>>>>>  <split>
> > > > >>>>>>>>    ... inside splitter
> > > > >>>>>>>>  </split>
> > > > >>>>>>>> .. split done
> > > > >>>>>>>>  <to email> send email here
> > > > >>>>>>>>
> > > > >>>>>>>> In Java DSL you can use .end() to end the split block.
> > > > >>>>>>>>
> > > > >>>>>>>> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <
> > > > >>>> wmacgyver@gmail.com
> > > > >>>>>>
> > > > >>>>>>>> wrote:
> > > > >>>>>>>>> Hi,
> > > > >>>>>>>>>
> > > > >>>>>>>>> I'm processing a large file. so I use .split and .streaming
> > to
> > > > >>>>> process
> > > > >>>>>>>> it a
> > > > >>>>>>>>> record at a time.
> > > > >>>>>>>>>
> > > > >>>>>>>>> I would like to send an email alert upon completion of
> > > > >>> processing
> > > > >>>>> the
> > > > >>>>>>>> file.
> > > > >>>>>>>>>
> > > > >>>>>>>>> but I can't figure out where to do that.
> > > > >>>>>>>>>
> > > > >>>>>>>>> I know I can check to see if it's the last exchange using
> > > > >>> property
> > > > >>>>>>>>> "CamelSplitComplete", but it's set to true on the last
> > > > >> exchange.
> > > > >>>> So
> > > > >>>>> I
> > > > >>>>>>>> still
> > > > >>>>>>>>> need to let it finish.
> > > > >>>>>>>>>
> > > > >>>>>>>>> Is there a good way to this?
> > > > >>>>>>>>>
> > > > >>>>>>>>> Thanks,
> > > > >>>>>>>>> Mac
> > > > >>>>>>>>>
> > > > >>>>>>>>> --
> > > > >>>>>>>>> Omnem crede diem tibi diluxisse supremum.
> > > > >>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>>> --
> > > > >>>>>>>> Claus Ibsen
> > > > >>>>>>>> -----------------
> > > > >>>>>>>> http://davsclaus.com @davsclaus
> > > > >>>>>>>> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > > >>>>>>>
> > > > >>>>>>>
> > > > >>>>>>>
> > > > >>>>>>> --
> > > > >>>>>>> Omnem crede diem tibi diluxisse supremum.
> > > > >>>>>>
> > > > >>>>>>
> > > > >>>>>>
> > > > >>>>>> --
> > > > >>>>>> Claus Ibsen
> > > > >>>>>> -----------------
> > > > >>>>>> http://davsclaus.com @davsclaus
> > > > >>>>>> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > > >>>>>
> > > > >>>>>
> > > > >>>>>
> > > > >>>>> --
> > > > >>>>> Omnem crede diem tibi diluxisse supremum.
> > > > >>>
> > > > >>>
> > > > >>>
> > > > >>> --
> > > > >>> Omnem crede diem tibi diluxisse supremum.
> > > > >>
> > > >
> > >
> > >
> > >
> > > --
> > > Omnem crede diem tibi diluxisse supremum.
> > >
> >
>
>
>
> --
> Omnem crede diem tibi diluxisse supremum.
>

Re: action at the end of the split

Posted by Wilson MacGyver <wm...@gmail.com>.
thanks, that sadly doesn't work either.

I tried

                from("direct:testSplit")

                        .split(body().tokenize("\n")).streaming()

                            .setProperty("totalSize",
simple("${property.CamelSplitSize}"))

                        .to("mock:result")

                        .end()

                        .log("property ${exchangeProperty.totalSize}
updates")

                        .log("should only happen once");


and exchangeProperty.totalSize isn't set outside of the split.


Thanks




On Fri, Aug 14, 2015 at 6:00 PM, Luis Augusto C. Sauerbronn <
lasauer@gmail.com> wrote:

> Hi,
>
> If you want to store an information to use it later during the lifetime of
> the request you should place it in the "Exchange Properties" not in the
> "Input/Output Headers".
> Many endpoints and processors do not pass ahead the received headers. If
> you put it on the Exchange properties it will exist through the whole life
> cycle of the request.
>
> Best regards,
>
> Luis
>
> 2015-08-14 17:49 GMT-03:00 Wilson MacGyver <wm...@gmail.com>:
>
> > tried that, sadly no go. any header I set within the split, isn't
> > accessible outside of the split block either.
> >
> > On Tue, Aug 11, 2015 at 4:54 AM, mailinglist@j-b-s.de <
> > mailinglist@j-b-s.de>
> > wrote:
> >
> > > Hi!
> > >
> > > Try the following: in your split route just set a new header field with
> > > the value of "splitsize". Ok, this assignment is made more than once
> > > redundantly per each splitted element, but header properties you create
> > on
> > > the original message are retained (hopefully :-)
> > >
> > > Jens
> > >
> > > Von meinem iPhone gesendet
> > >
> > > > Am 10.08.2015 um 21:49 schrieb Wilson MacGyver <wmacgyver@gmail.com
> >:
> > > >
> > > > I'm sorry my message isn't clear. I've read the docs and the chapter
> > that
> > > > deal with this in the camel book. The issue I have isn't with the
> each
> > > time
> > > > part.
> > > >
> > > > It's the final log part after the split is done. My goal is after the
> > end
> > > > of the split block to send an email logging the total number updates.
> > > >
> > > > But as you can see, CamelSplitSize is no longer set outside of the
> > split
> > > > block. So I have no way of sending that to a SMTP route.
> > > >
> > > > On Mon, Aug 10, 2015 at 4:15 PM Christian Müller <
> > > > christian.mueller@gmail.com> wrote:
> > > >
> > > >> Sure, that's how stream works. We do not load the entire payload
> into
> > > >> memory.
> > > >> Why don't you use the property CamelSplitIndex? In this case, the
> > output
> > > >> will be
> > > >>
> > > >> [Test worker] INFO route1 - each time 0
> > > >>
> > > >> [Test worker] INFO route1 - each time 1
> > > >>
> > > >> [Test worker] INFO route1 - each time 2
> > > >>
> > > >> Best,
> > > >>
> > > >> Christian
> > > >> -----------------
> > > >>
> > > >> Software Integration Specialist
> > > >>
> > > >> Apache Member
> > > >> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> > > >> Apache Incubator PMC Member
> > > >>
> > > >> https://www.linkedin.com/pub/christian-mueller/11/551/642
> > > >>
> > > >> On Mon, Aug 10, 2015 at 4:35 AM, Wilson MacGyver <
> wmacgyver@gmail.com
> > >
> > > >> wrote:
> > > >>
> > > >>> public class SplitTest extends CamelTestSupport {
> > > >>>
> > > >>>    @EndpointInject(uri = "mock:result")
> > > >>>
> > > >>>    protected MockEndpoint resultEndpoint;
> > > >>>
> > > >>>
> > > >>>    @Produce(uri = "direct:testSplit")
> > > >>>
> > > >>>    protected org.apache.camel.ProducerTemplate template;
> > > >>>
> > > >>>
> > > >>>    @Test
> > > >>>
> > > >>>    public void testWithString() throws Exception{
> > > >>>
> > > >>>        String content = "a\nb\nc";
> > > >>>
> > > >>>
> > > >>>        resultEndpoint.expectedMessageCount(3);
> > > >>>
> > > >>>
> > > >>>        template.sendBodyAndHeader(
> > > >>>
> > > >>>                content,
> > > >>>
> > > >>>                "foo", "bar");
> > > >>>
> > > >>>
> > > >>>        resultEndpoint.assertIsSatisfied();
> > > >>>
> > > >>>    }
> > > >>>
> > > >>>
> > > >>>    @Override
> > > >>>
> > > >>>    protected RouteBuilder createRouteBuilder() {
> > > >>>
> > > >>>        return new RouteBuilder() {
> > > >>>
> > > >>>            public void configure() {
> > > >>>
> > > >>>                from("direct:testSplit")
> > > >>>
> > > >>>                        .split(body().tokenize("\n")).streaming()
> > > >>>
> > > >>>                            .log("each time
> > ${property.CamelSplitSize}")
> > > >>>
> > > >>>                            .to("mock:result")
> > > >>>
> > > >>>                        .end()
> > > >>>
> > > >>>                        .log("Processed ${property.CamelSplitSize}
> > > >>> updates")
> > > >>>
> > > >>>                        .log("should only happen once");
> > > >>>
> > > >>>            }
> > > >>>
> > > >>>        };
> > > >>>
> > > >>>    }
> > > >>>
> > > >>> }
> > > >>>
> > > >>>
> > > >>> running this, I get the following
> > > >>>
> > > >>>
> > > >>>
> > > >>> [Test worker] INFO route1 - each time
> > > >>>
> > > >>> [Test worker] INFO route1 - each time
> > > >>>
> > > >>> [Test worker] INFO route1 - each time 3
> > > >>>
> > > >>> [Test worker] INFO route1 - Processed  updates
> > > >>>
> > > >>> [Test worker] INFO route1 - should only happen once
> > > >>>
> > > >>>
> > > >>> given the input of 3 lines. CamelSplitSize is only set at the end
> of
> > > the
> > > >>> split. so only the 3rd time has the 3 displayed which is correct.
> > > >>>
> > > >>> however notice it says  Processed  updates, because the property is
> > > only
> > > >>> set within the split..end block
> > > >>>
> > > >>> that's what I meant by out of scope
> > > >>>
> > > >>>
> > > >>>
> > > >>> On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller <
> > > >>> christian.mueller@gmail.com> wrote:
> > > >>>
> > > >>>> What do you mean with "is out of scope"?
> > > >>>> You can use the message header to get this information.
> > > >>>>
> > > >>>> Best,
> > > >>>>
> > > >>>> Christian
> > > >>>> -----------------
> > > >>>>
> > > >>>> Software Integration Specialist
> > > >>>>
> > > >>>> Apache Member
> > > >>>> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel
> committer
> > > >>>> Apache Incubator PMC Member
> > > >>>>
> > > >>>> https://www.linkedin.com/pub/christian-mueller/11/551/642
> > > >>>>
> > > >>>> On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <
> > wmacgyver@gmail.com>
> > > >>>> wrote:
> > > >>>>
> > > >>>>> I figured out what I was doing wrong.  It's because I was using
> > > >> filter
> > > >>>> with
> > > >>>>> bean. I didn't realize I had to add an end() to terminate the
> > > >> filtering
> > > >>>>>
> > > >>>>>
> > > >>>>> from()
> > > >>>>>
> > > >>>>> .split(body().tokenize("\n")).streaming()
> > > >>>>>
> > > >>>>> .process() /do stuff
> > > >>>>>
> > > >>>>> .filter().method(MyFilter.class, "keepIt")
> > > >>>>>
> > > >>>>>  .to("mock:result")
> > > >>>>>
> > > >>>>> .end()
> > > >>>>>
> > > >>>>> .log("final time ${property.CamelSplitSize}")
> > > >>>>>
> > > >>>>> .to(smtp://)
> > > >>>>>
> > > >>>>>
> > > >>>>> now I have a different problem. I need to know the # of total
> > > >>> processed.
> > > >>>>> But the CamelSplitSize property is out of scope. Anyway to work
> > > >> around
> > > >>>>> that?
> > > >>>>>
> > > >>>>>
> > > >>>>> Thanks
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>> On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <
> > claus.ibsen@gmail.com>
> > > >>>>> wrote:
> > > >>>>>
> > > >>>>>> You must be doing some more inside the splitter and you may
> need 2
> > > >> x
> > > >>>> end
> > > >>>>>>
> > > >>>>>> On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <
> > > >>> wmacgyver@gmail.com>
> > > >>>>>> wrote:
> > > >>>>>>> hmm, if I understand you correctly, this isn't working for me.
> > > >>>>>>>
> > > >>>>>>> I have
> > > >>>>>>>
> > > >>>>>>> from()
> > > >>>>>>>
> > > >>>>>>> .split(body().tokenize("\n")).streaming()
> > > >>>>>>>
> > > >>>>>>> .process() /do stuff
> > > >>>>>>>
> > > >>>>>>> .end()
> > > >>>>>>>
> > > >>>>>>> .log("${in.body}")
> > > >>>>>>>
> > > >>>>>>> .to(smtp://)
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>> say if the file has 100 lines, I'd except to see the log once
> if
> > > >> I
> > > >>>>>>> understand what you are saying correctly. but I see the log 100
> > > >>>> times.
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>> Thanks,
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>> On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <
> > > >>> claus.ibsen@gmail.com>
> > > >>>>>> wrote:
> > > >>>>>>>
> > > >>>>>>>> You can do that after the splitter
> > > >>>>>>>>
> > > >>>>>>>> <from>
> > > >>>>>>>>  <split>
> > > >>>>>>>>    ... inside splitter
> > > >>>>>>>>  </split>
> > > >>>>>>>> .. split done
> > > >>>>>>>>  <to email> send email here
> > > >>>>>>>>
> > > >>>>>>>> In Java DSL you can use .end() to end the split block.
> > > >>>>>>>>
> > > >>>>>>>> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <
> > > >>>> wmacgyver@gmail.com
> > > >>>>>>
> > > >>>>>>>> wrote:
> > > >>>>>>>>> Hi,
> > > >>>>>>>>>
> > > >>>>>>>>> I'm processing a large file. so I use .split and .streaming
> to
> > > >>>>> process
> > > >>>>>>>> it a
> > > >>>>>>>>> record at a time.
> > > >>>>>>>>>
> > > >>>>>>>>> I would like to send an email alert upon completion of
> > > >>> processing
> > > >>>>> the
> > > >>>>>>>> file.
> > > >>>>>>>>>
> > > >>>>>>>>> but I can't figure out where to do that.
> > > >>>>>>>>>
> > > >>>>>>>>> I know I can check to see if it's the last exchange using
> > > >>> property
> > > >>>>>>>>> "CamelSplitComplete", but it's set to true on the last
> > > >> exchange.
> > > >>>> So
> > > >>>>> I
> > > >>>>>>>> still
> > > >>>>>>>>> need to let it finish.
> > > >>>>>>>>>
> > > >>>>>>>>> Is there a good way to this?
> > > >>>>>>>>>
> > > >>>>>>>>> Thanks,
> > > >>>>>>>>> Mac
> > > >>>>>>>>>
> > > >>>>>>>>> --
> > > >>>>>>>>> Omnem crede diem tibi diluxisse supremum.
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>> --
> > > >>>>>>>> Claus Ibsen
> > > >>>>>>>> -----------------
> > > >>>>>>>> http://davsclaus.com @davsclaus
> > > >>>>>>>> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>> --
> > > >>>>>>> Omnem crede diem tibi diluxisse supremum.
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>> --
> > > >>>>>> Claus Ibsen
> > > >>>>>> -----------------
> > > >>>>>> http://davsclaus.com @davsclaus
> > > >>>>>> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>> --
> > > >>>>> Omnem crede diem tibi diluxisse supremum.
> > > >>>
> > > >>>
> > > >>>
> > > >>> --
> > > >>> Omnem crede diem tibi diluxisse supremum.
> > > >>
> > >
> >
> >
> >
> > --
> > Omnem crede diem tibi diluxisse supremum.
> >
>



-- 
Omnem crede diem tibi diluxisse supremum.

Re: action at the end of the split

Posted by "Luis Augusto C. Sauerbronn" <la...@gmail.com>.
Hi,

If you want to store an information to use it later during the lifetime of
the request you should place it in the "Exchange Properties" not in the
"Input/Output Headers".
Many endpoints and processors do not pass ahead the received headers. If
you put it on the Exchange properties it will exist through the whole life
cycle of the request.

Best regards,

Luis

2015-08-14 17:49 GMT-03:00 Wilson MacGyver <wm...@gmail.com>:

> tried that, sadly no go. any header I set within the split, isn't
> accessible outside of the split block either.
>
> On Tue, Aug 11, 2015 at 4:54 AM, mailinglist@j-b-s.de <
> mailinglist@j-b-s.de>
> wrote:
>
> > Hi!
> >
> > Try the following: in your split route just set a new header field with
> > the value of "splitsize". Ok, this assignment is made more than once
> > redundantly per each splitted element, but header properties you create
> on
> > the original message are retained (hopefully :-)
> >
> > Jens
> >
> > Von meinem iPhone gesendet
> >
> > > Am 10.08.2015 um 21:49 schrieb Wilson MacGyver <wm...@gmail.com>:
> > >
> > > I'm sorry my message isn't clear. I've read the docs and the chapter
> that
> > > deal with this in the camel book. The issue I have isn't with the each
> > time
> > > part.
> > >
> > > It's the final log part after the split is done. My goal is after the
> end
> > > of the split block to send an email logging the total number updates.
> > >
> > > But as you can see, CamelSplitSize is no longer set outside of the
> split
> > > block. So I have no way of sending that to a SMTP route.
> > >
> > > On Mon, Aug 10, 2015 at 4:15 PM Christian Müller <
> > > christian.mueller@gmail.com> wrote:
> > >
> > >> Sure, that's how stream works. We do not load the entire payload into
> > >> memory.
> > >> Why don't you use the property CamelSplitIndex? In this case, the
> output
> > >> will be
> > >>
> > >> [Test worker] INFO route1 - each time 0
> > >>
> > >> [Test worker] INFO route1 - each time 1
> > >>
> > >> [Test worker] INFO route1 - each time 2
> > >>
> > >> Best,
> > >>
> > >> Christian
> > >> -----------------
> > >>
> > >> Software Integration Specialist
> > >>
> > >> Apache Member
> > >> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> > >> Apache Incubator PMC Member
> > >>
> > >> https://www.linkedin.com/pub/christian-mueller/11/551/642
> > >>
> > >> On Mon, Aug 10, 2015 at 4:35 AM, Wilson MacGyver <wmacgyver@gmail.com
> >
> > >> wrote:
> > >>
> > >>> public class SplitTest extends CamelTestSupport {
> > >>>
> > >>>    @EndpointInject(uri = "mock:result")
> > >>>
> > >>>    protected MockEndpoint resultEndpoint;
> > >>>
> > >>>
> > >>>    @Produce(uri = "direct:testSplit")
> > >>>
> > >>>    protected org.apache.camel.ProducerTemplate template;
> > >>>
> > >>>
> > >>>    @Test
> > >>>
> > >>>    public void testWithString() throws Exception{
> > >>>
> > >>>        String content = "a\nb\nc";
> > >>>
> > >>>
> > >>>        resultEndpoint.expectedMessageCount(3);
> > >>>
> > >>>
> > >>>        template.sendBodyAndHeader(
> > >>>
> > >>>                content,
> > >>>
> > >>>                "foo", "bar");
> > >>>
> > >>>
> > >>>        resultEndpoint.assertIsSatisfied();
> > >>>
> > >>>    }
> > >>>
> > >>>
> > >>>    @Override
> > >>>
> > >>>    protected RouteBuilder createRouteBuilder() {
> > >>>
> > >>>        return new RouteBuilder() {
> > >>>
> > >>>            public void configure() {
> > >>>
> > >>>                from("direct:testSplit")
> > >>>
> > >>>                        .split(body().tokenize("\n")).streaming()
> > >>>
> > >>>                            .log("each time
> ${property.CamelSplitSize}")
> > >>>
> > >>>                            .to("mock:result")
> > >>>
> > >>>                        .end()
> > >>>
> > >>>                        .log("Processed ${property.CamelSplitSize}
> > >>> updates")
> > >>>
> > >>>                        .log("should only happen once");
> > >>>
> > >>>            }
> > >>>
> > >>>        };
> > >>>
> > >>>    }
> > >>>
> > >>> }
> > >>>
> > >>>
> > >>> running this, I get the following
> > >>>
> > >>>
> > >>>
> > >>> [Test worker] INFO route1 - each time
> > >>>
> > >>> [Test worker] INFO route1 - each time
> > >>>
> > >>> [Test worker] INFO route1 - each time 3
> > >>>
> > >>> [Test worker] INFO route1 - Processed  updates
> > >>>
> > >>> [Test worker] INFO route1 - should only happen once
> > >>>
> > >>>
> > >>> given the input of 3 lines. CamelSplitSize is only set at the end of
> > the
> > >>> split. so only the 3rd time has the 3 displayed which is correct.
> > >>>
> > >>> however notice it says  Processed  updates, because the property is
> > only
> > >>> set within the split..end block
> > >>>
> > >>> that's what I meant by out of scope
> > >>>
> > >>>
> > >>>
> > >>> On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller <
> > >>> christian.mueller@gmail.com> wrote:
> > >>>
> > >>>> What do you mean with "is out of scope"?
> > >>>> You can use the message header to get this information.
> > >>>>
> > >>>> Best,
> > >>>>
> > >>>> Christian
> > >>>> -----------------
> > >>>>
> > >>>> Software Integration Specialist
> > >>>>
> > >>>> Apache Member
> > >>>> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> > >>>> Apache Incubator PMC Member
> > >>>>
> > >>>> https://www.linkedin.com/pub/christian-mueller/11/551/642
> > >>>>
> > >>>> On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <
> wmacgyver@gmail.com>
> > >>>> wrote:
> > >>>>
> > >>>>> I figured out what I was doing wrong.  It's because I was using
> > >> filter
> > >>>> with
> > >>>>> bean. I didn't realize I had to add an end() to terminate the
> > >> filtering
> > >>>>>
> > >>>>>
> > >>>>> from()
> > >>>>>
> > >>>>> .split(body().tokenize("\n")).streaming()
> > >>>>>
> > >>>>> .process() /do stuff
> > >>>>>
> > >>>>> .filter().method(MyFilter.class, "keepIt")
> > >>>>>
> > >>>>>  .to("mock:result")
> > >>>>>
> > >>>>> .end()
> > >>>>>
> > >>>>> .log("final time ${property.CamelSplitSize}")
> > >>>>>
> > >>>>> .to(smtp://)
> > >>>>>
> > >>>>>
> > >>>>> now I have a different problem. I need to know the # of total
> > >>> processed.
> > >>>>> But the CamelSplitSize property is out of scope. Anyway to work
> > >> around
> > >>>>> that?
> > >>>>>
> > >>>>>
> > >>>>> Thanks
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>> On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <
> claus.ibsen@gmail.com>
> > >>>>> wrote:
> > >>>>>
> > >>>>>> You must be doing some more inside the splitter and you may need 2
> > >> x
> > >>>> end
> > >>>>>>
> > >>>>>> On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <
> > >>> wmacgyver@gmail.com>
> > >>>>>> wrote:
> > >>>>>>> hmm, if I understand you correctly, this isn't working for me.
> > >>>>>>>
> > >>>>>>> I have
> > >>>>>>>
> > >>>>>>> from()
> > >>>>>>>
> > >>>>>>> .split(body().tokenize("\n")).streaming()
> > >>>>>>>
> > >>>>>>> .process() /do stuff
> > >>>>>>>
> > >>>>>>> .end()
> > >>>>>>>
> > >>>>>>> .log("${in.body}")
> > >>>>>>>
> > >>>>>>> .to(smtp://)
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> say if the file has 100 lines, I'd except to see the log once if
> > >> I
> > >>>>>>> understand what you are saying correctly. but I see the log 100
> > >>>> times.
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> Thanks,
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <
> > >>> claus.ibsen@gmail.com>
> > >>>>>> wrote:
> > >>>>>>>
> > >>>>>>>> You can do that after the splitter
> > >>>>>>>>
> > >>>>>>>> <from>
> > >>>>>>>>  <split>
> > >>>>>>>>    ... inside splitter
> > >>>>>>>>  </split>
> > >>>>>>>> .. split done
> > >>>>>>>>  <to email> send email here
> > >>>>>>>>
> > >>>>>>>> In Java DSL you can use .end() to end the split block.
> > >>>>>>>>
> > >>>>>>>> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <
> > >>>> wmacgyver@gmail.com
> > >>>>>>
> > >>>>>>>> wrote:
> > >>>>>>>>> Hi,
> > >>>>>>>>>
> > >>>>>>>>> I'm processing a large file. so I use .split and .streaming to
> > >>>>> process
> > >>>>>>>> it a
> > >>>>>>>>> record at a time.
> > >>>>>>>>>
> > >>>>>>>>> I would like to send an email alert upon completion of
> > >>> processing
> > >>>>> the
> > >>>>>>>> file.
> > >>>>>>>>>
> > >>>>>>>>> but I can't figure out where to do that.
> > >>>>>>>>>
> > >>>>>>>>> I know I can check to see if it's the last exchange using
> > >>> property
> > >>>>>>>>> "CamelSplitComplete", but it's set to true on the last
> > >> exchange.
> > >>>> So
> > >>>>> I
> > >>>>>>>> still
> > >>>>>>>>> need to let it finish.
> > >>>>>>>>>
> > >>>>>>>>> Is there a good way to this?
> > >>>>>>>>>
> > >>>>>>>>> Thanks,
> > >>>>>>>>> Mac
> > >>>>>>>>>
> > >>>>>>>>> --
> > >>>>>>>>> Omnem crede diem tibi diluxisse supremum.
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>> --
> > >>>>>>>> Claus Ibsen
> > >>>>>>>> -----------------
> > >>>>>>>> http://davsclaus.com @davsclaus
> > >>>>>>>> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> --
> > >>>>>>> Omnem crede diem tibi diluxisse supremum.
> > >>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>>> --
> > >>>>>> Claus Ibsen
> > >>>>>> -----------------
> > >>>>>> http://davsclaus.com @davsclaus
> > >>>>>> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>> --
> > >>>>> Omnem crede diem tibi diluxisse supremum.
> > >>>
> > >>>
> > >>>
> > >>> --
> > >>> Omnem crede diem tibi diluxisse supremum.
> > >>
> >
>
>
>
> --
> Omnem crede diem tibi diluxisse supremum.
>

Re: action at the end of the split

Posted by Wilson MacGyver <wm...@gmail.com>.
tried that, sadly no go. any header I set within the split, isn't
accessible outside of the split block either.

On Tue, Aug 11, 2015 at 4:54 AM, mailinglist@j-b-s.de <ma...@j-b-s.de>
wrote:

> Hi!
>
> Try the following: in your split route just set a new header field with
> the value of "splitsize". Ok, this assignment is made more than once
> redundantly per each splitted element, but header properties you create on
> the original message are retained (hopefully :-)
>
> Jens
>
> Von meinem iPhone gesendet
>
> > Am 10.08.2015 um 21:49 schrieb Wilson MacGyver <wm...@gmail.com>:
> >
> > I'm sorry my message isn't clear. I've read the docs and the chapter that
> > deal with this in the camel book. The issue I have isn't with the each
> time
> > part.
> >
> > It's the final log part after the split is done. My goal is after the end
> > of the split block to send an email logging the total number updates.
> >
> > But as you can see, CamelSplitSize is no longer set outside of the split
> > block. So I have no way of sending that to a SMTP route.
> >
> > On Mon, Aug 10, 2015 at 4:15 PM Christian Müller <
> > christian.mueller@gmail.com> wrote:
> >
> >> Sure, that's how stream works. We do not load the entire payload into
> >> memory.
> >> Why don't you use the property CamelSplitIndex? In this case, the output
> >> will be
> >>
> >> [Test worker] INFO route1 - each time 0
> >>
> >> [Test worker] INFO route1 - each time 1
> >>
> >> [Test worker] INFO route1 - each time 2
> >>
> >> Best,
> >>
> >> Christian
> >> -----------------
> >>
> >> Software Integration Specialist
> >>
> >> Apache Member
> >> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> >> Apache Incubator PMC Member
> >>
> >> https://www.linkedin.com/pub/christian-mueller/11/551/642
> >>
> >> On Mon, Aug 10, 2015 at 4:35 AM, Wilson MacGyver <wm...@gmail.com>
> >> wrote:
> >>
> >>> public class SplitTest extends CamelTestSupport {
> >>>
> >>>    @EndpointInject(uri = "mock:result")
> >>>
> >>>    protected MockEndpoint resultEndpoint;
> >>>
> >>>
> >>>    @Produce(uri = "direct:testSplit")
> >>>
> >>>    protected org.apache.camel.ProducerTemplate template;
> >>>
> >>>
> >>>    @Test
> >>>
> >>>    public void testWithString() throws Exception{
> >>>
> >>>        String content = "a\nb\nc";
> >>>
> >>>
> >>>        resultEndpoint.expectedMessageCount(3);
> >>>
> >>>
> >>>        template.sendBodyAndHeader(
> >>>
> >>>                content,
> >>>
> >>>                "foo", "bar");
> >>>
> >>>
> >>>        resultEndpoint.assertIsSatisfied();
> >>>
> >>>    }
> >>>
> >>>
> >>>    @Override
> >>>
> >>>    protected RouteBuilder createRouteBuilder() {
> >>>
> >>>        return new RouteBuilder() {
> >>>
> >>>            public void configure() {
> >>>
> >>>                from("direct:testSplit")
> >>>
> >>>                        .split(body().tokenize("\n")).streaming()
> >>>
> >>>                            .log("each time ${property.CamelSplitSize}")
> >>>
> >>>                            .to("mock:result")
> >>>
> >>>                        .end()
> >>>
> >>>                        .log("Processed ${property.CamelSplitSize}
> >>> updates")
> >>>
> >>>                        .log("should only happen once");
> >>>
> >>>            }
> >>>
> >>>        };
> >>>
> >>>    }
> >>>
> >>> }
> >>>
> >>>
> >>> running this, I get the following
> >>>
> >>>
> >>>
> >>> [Test worker] INFO route1 - each time
> >>>
> >>> [Test worker] INFO route1 - each time
> >>>
> >>> [Test worker] INFO route1 - each time 3
> >>>
> >>> [Test worker] INFO route1 - Processed  updates
> >>>
> >>> [Test worker] INFO route1 - should only happen once
> >>>
> >>>
> >>> given the input of 3 lines. CamelSplitSize is only set at the end of
> the
> >>> split. so only the 3rd time has the 3 displayed which is correct.
> >>>
> >>> however notice it says  Processed  updates, because the property is
> only
> >>> set within the split..end block
> >>>
> >>> that's what I meant by out of scope
> >>>
> >>>
> >>>
> >>> On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller <
> >>> christian.mueller@gmail.com> wrote:
> >>>
> >>>> What do you mean with "is out of scope"?
> >>>> You can use the message header to get this information.
> >>>>
> >>>> Best,
> >>>>
> >>>> Christian
> >>>> -----------------
> >>>>
> >>>> Software Integration Specialist
> >>>>
> >>>> Apache Member
> >>>> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> >>>> Apache Incubator PMC Member
> >>>>
> >>>> https://www.linkedin.com/pub/christian-mueller/11/551/642
> >>>>
> >>>> On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <wm...@gmail.com>
> >>>> wrote:
> >>>>
> >>>>> I figured out what I was doing wrong.  It's because I was using
> >> filter
> >>>> with
> >>>>> bean. I didn't realize I had to add an end() to terminate the
> >> filtering
> >>>>>
> >>>>>
> >>>>> from()
> >>>>>
> >>>>> .split(body().tokenize("\n")).streaming()
> >>>>>
> >>>>> .process() /do stuff
> >>>>>
> >>>>> .filter().method(MyFilter.class, "keepIt")
> >>>>>
> >>>>>  .to("mock:result")
> >>>>>
> >>>>> .end()
> >>>>>
> >>>>> .log("final time ${property.CamelSplitSize}")
> >>>>>
> >>>>> .to(smtp://)
> >>>>>
> >>>>>
> >>>>> now I have a different problem. I need to know the # of total
> >>> processed.
> >>>>> But the CamelSplitSize property is out of scope. Anyway to work
> >> around
> >>>>> that?
> >>>>>
> >>>>>
> >>>>> Thanks
> >>>>>
> >>>>>
> >>>>>
> >>>>> On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <cl...@gmail.com>
> >>>>> wrote:
> >>>>>
> >>>>>> You must be doing some more inside the splitter and you may need 2
> >> x
> >>>> end
> >>>>>>
> >>>>>> On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <
> >>> wmacgyver@gmail.com>
> >>>>>> wrote:
> >>>>>>> hmm, if I understand you correctly, this isn't working for me.
> >>>>>>>
> >>>>>>> I have
> >>>>>>>
> >>>>>>> from()
> >>>>>>>
> >>>>>>> .split(body().tokenize("\n")).streaming()
> >>>>>>>
> >>>>>>> .process() /do stuff
> >>>>>>>
> >>>>>>> .end()
> >>>>>>>
> >>>>>>> .log("${in.body}")
> >>>>>>>
> >>>>>>> .to(smtp://)
> >>>>>>>
> >>>>>>>
> >>>>>>> say if the file has 100 lines, I'd except to see the log once if
> >> I
> >>>>>>> understand what you are saying correctly. but I see the log 100
> >>>> times.
> >>>>>>>
> >>>>>>>
> >>>>>>> Thanks,
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <
> >>> claus.ibsen@gmail.com>
> >>>>>> wrote:
> >>>>>>>
> >>>>>>>> You can do that after the splitter
> >>>>>>>>
> >>>>>>>> <from>
> >>>>>>>>  <split>
> >>>>>>>>    ... inside splitter
> >>>>>>>>  </split>
> >>>>>>>> .. split done
> >>>>>>>>  <to email> send email here
> >>>>>>>>
> >>>>>>>> In Java DSL you can use .end() to end the split block.
> >>>>>>>>
> >>>>>>>> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <
> >>>> wmacgyver@gmail.com
> >>>>>>
> >>>>>>>> wrote:
> >>>>>>>>> Hi,
> >>>>>>>>>
> >>>>>>>>> I'm processing a large file. so I use .split and .streaming to
> >>>>> process
> >>>>>>>> it a
> >>>>>>>>> record at a time.
> >>>>>>>>>
> >>>>>>>>> I would like to send an email alert upon completion of
> >>> processing
> >>>>> the
> >>>>>>>> file.
> >>>>>>>>>
> >>>>>>>>> but I can't figure out where to do that.
> >>>>>>>>>
> >>>>>>>>> I know I can check to see if it's the last exchange using
> >>> property
> >>>>>>>>> "CamelSplitComplete", but it's set to true on the last
> >> exchange.
> >>>> So
> >>>>> I
> >>>>>>>> still
> >>>>>>>>> need to let it finish.
> >>>>>>>>>
> >>>>>>>>> Is there a good way to this?
> >>>>>>>>>
> >>>>>>>>> Thanks,
> >>>>>>>>> Mac
> >>>>>>>>>
> >>>>>>>>> --
> >>>>>>>>> Omnem crede diem tibi diluxisse supremum.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> Claus Ibsen
> >>>>>>>> -----------------
> >>>>>>>> http://davsclaus.com @davsclaus
> >>>>>>>> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> Omnem crede diem tibi diluxisse supremum.
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> --
> >>>>>> Claus Ibsen
> >>>>>> -----------------
> >>>>>> http://davsclaus.com @davsclaus
> >>>>>> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Omnem crede diem tibi diluxisse supremum.
> >>>
> >>>
> >>>
> >>> --
> >>> Omnem crede diem tibi diluxisse supremum.
> >>
>



-- 
Omnem crede diem tibi diluxisse supremum.

Re: action at the end of the split

Posted by "mailinglist@j-b-s.de" <ma...@j-b-s.de>.
Hi!

Try the following: in your split route just set a new header field with the value of "splitsize". Ok, this assignment is made more than once redundantly per each splitted element, but header properties you create on the original message are retained (hopefully :-)

Jens

Von meinem iPhone gesendet

> Am 10.08.2015 um 21:49 schrieb Wilson MacGyver <wm...@gmail.com>:
> 
> I'm sorry my message isn't clear. I've read the docs and the chapter that
> deal with this in the camel book. The issue I have isn't with the each time
> part.
> 
> It's the final log part after the split is done. My goal is after the end
> of the split block to send an email logging the total number updates.
> 
> But as you can see, CamelSplitSize is no longer set outside of the split
> block. So I have no way of sending that to a SMTP route.
> 
> On Mon, Aug 10, 2015 at 4:15 PM Christian Müller <
> christian.mueller@gmail.com> wrote:
> 
>> Sure, that's how stream works. We do not load the entire payload into
>> memory.
>> Why don't you use the property CamelSplitIndex? In this case, the output
>> will be
>> 
>> [Test worker] INFO route1 - each time 0
>> 
>> [Test worker] INFO route1 - each time 1
>> 
>> [Test worker] INFO route1 - each time 2
>> 
>> Best,
>> 
>> Christian
>> -----------------
>> 
>> Software Integration Specialist
>> 
>> Apache Member
>> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
>> Apache Incubator PMC Member
>> 
>> https://www.linkedin.com/pub/christian-mueller/11/551/642
>> 
>> On Mon, Aug 10, 2015 at 4:35 AM, Wilson MacGyver <wm...@gmail.com>
>> wrote:
>> 
>>> public class SplitTest extends CamelTestSupport {
>>> 
>>>    @EndpointInject(uri = "mock:result")
>>> 
>>>    protected MockEndpoint resultEndpoint;
>>> 
>>> 
>>>    @Produce(uri = "direct:testSplit")
>>> 
>>>    protected org.apache.camel.ProducerTemplate template;
>>> 
>>> 
>>>    @Test
>>> 
>>>    public void testWithString() throws Exception{
>>> 
>>>        String content = "a\nb\nc";
>>> 
>>> 
>>>        resultEndpoint.expectedMessageCount(3);
>>> 
>>> 
>>>        template.sendBodyAndHeader(
>>> 
>>>                content,
>>> 
>>>                "foo", "bar");
>>> 
>>> 
>>>        resultEndpoint.assertIsSatisfied();
>>> 
>>>    }
>>> 
>>> 
>>>    @Override
>>> 
>>>    protected RouteBuilder createRouteBuilder() {
>>> 
>>>        return new RouteBuilder() {
>>> 
>>>            public void configure() {
>>> 
>>>                from("direct:testSplit")
>>> 
>>>                        .split(body().tokenize("\n")).streaming()
>>> 
>>>                            .log("each time ${property.CamelSplitSize}")
>>> 
>>>                            .to("mock:result")
>>> 
>>>                        .end()
>>> 
>>>                        .log("Processed ${property.CamelSplitSize}
>>> updates")
>>> 
>>>                        .log("should only happen once");
>>> 
>>>            }
>>> 
>>>        };
>>> 
>>>    }
>>> 
>>> }
>>> 
>>> 
>>> running this, I get the following
>>> 
>>> 
>>> 
>>> [Test worker] INFO route1 - each time
>>> 
>>> [Test worker] INFO route1 - each time
>>> 
>>> [Test worker] INFO route1 - each time 3
>>> 
>>> [Test worker] INFO route1 - Processed  updates
>>> 
>>> [Test worker] INFO route1 - should only happen once
>>> 
>>> 
>>> given the input of 3 lines. CamelSplitSize is only set at the end of the
>>> split. so only the 3rd time has the 3 displayed which is correct.
>>> 
>>> however notice it says  Processed  updates, because the property is only
>>> set within the split..end block
>>> 
>>> that's what I meant by out of scope
>>> 
>>> 
>>> 
>>> On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller <
>>> christian.mueller@gmail.com> wrote:
>>> 
>>>> What do you mean with "is out of scope"?
>>>> You can use the message header to get this information.
>>>> 
>>>> Best,
>>>> 
>>>> Christian
>>>> -----------------
>>>> 
>>>> Software Integration Specialist
>>>> 
>>>> Apache Member
>>>> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
>>>> Apache Incubator PMC Member
>>>> 
>>>> https://www.linkedin.com/pub/christian-mueller/11/551/642
>>>> 
>>>> On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <wm...@gmail.com>
>>>> wrote:
>>>> 
>>>>> I figured out what I was doing wrong.  It's because I was using
>> filter
>>>> with
>>>>> bean. I didn't realize I had to add an end() to terminate the
>> filtering
>>>>> 
>>>>> 
>>>>> from()
>>>>> 
>>>>> .split(body().tokenize("\n")).streaming()
>>>>> 
>>>>> .process() /do stuff
>>>>> 
>>>>> .filter().method(MyFilter.class, "keepIt")
>>>>> 
>>>>>  .to("mock:result")
>>>>> 
>>>>> .end()
>>>>> 
>>>>> .log("final time ${property.CamelSplitSize}")
>>>>> 
>>>>> .to(smtp://)
>>>>> 
>>>>> 
>>>>> now I have a different problem. I need to know the # of total
>>> processed.
>>>>> But the CamelSplitSize property is out of scope. Anyway to work
>> around
>>>>> that?
>>>>> 
>>>>> 
>>>>> Thanks
>>>>> 
>>>>> 
>>>>> 
>>>>> On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <cl...@gmail.com>
>>>>> wrote:
>>>>> 
>>>>>> You must be doing some more inside the splitter and you may need 2
>> x
>>>> end
>>>>>> 
>>>>>> On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <
>>> wmacgyver@gmail.com>
>>>>>> wrote:
>>>>>>> hmm, if I understand you correctly, this isn't working for me.
>>>>>>> 
>>>>>>> I have
>>>>>>> 
>>>>>>> from()
>>>>>>> 
>>>>>>> .split(body().tokenize("\n")).streaming()
>>>>>>> 
>>>>>>> .process() /do stuff
>>>>>>> 
>>>>>>> .end()
>>>>>>> 
>>>>>>> .log("${in.body}")
>>>>>>> 
>>>>>>> .to(smtp://)
>>>>>>> 
>>>>>>> 
>>>>>>> say if the file has 100 lines, I'd except to see the log once if
>> I
>>>>>>> understand what you are saying correctly. but I see the log 100
>>>> times.
>>>>>>> 
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <
>>> claus.ibsen@gmail.com>
>>>>>> wrote:
>>>>>>> 
>>>>>>>> You can do that after the splitter
>>>>>>>> 
>>>>>>>> <from>
>>>>>>>>  <split>
>>>>>>>>    ... inside splitter
>>>>>>>>  </split>
>>>>>>>> .. split done
>>>>>>>>  <to email> send email here
>>>>>>>> 
>>>>>>>> In Java DSL you can use .end() to end the split block.
>>>>>>>> 
>>>>>>>> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <
>>>> wmacgyver@gmail.com
>>>>>> 
>>>>>>>> wrote:
>>>>>>>>> Hi,
>>>>>>>>> 
>>>>>>>>> I'm processing a large file. so I use .split and .streaming to
>>>>> process
>>>>>>>> it a
>>>>>>>>> record at a time.
>>>>>>>>> 
>>>>>>>>> I would like to send an email alert upon completion of
>>> processing
>>>>> the
>>>>>>>> file.
>>>>>>>>> 
>>>>>>>>> but I can't figure out where to do that.
>>>>>>>>> 
>>>>>>>>> I know I can check to see if it's the last exchange using
>>> property
>>>>>>>>> "CamelSplitComplete", but it's set to true on the last
>> exchange.
>>>> So
>>>>> I
>>>>>>>> still
>>>>>>>>> need to let it finish.
>>>>>>>>> 
>>>>>>>>> Is there a good way to this?
>>>>>>>>> 
>>>>>>>>> Thanks,
>>>>>>>>> Mac
>>>>>>>>> 
>>>>>>>>> --
>>>>>>>>> Omnem crede diem tibi diluxisse supremum.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Claus Ibsen
>>>>>>>> -----------------
>>>>>>>> http://davsclaus.com @davsclaus
>>>>>>>> Camel in Action 2nd edition: http://www.manning.com/ibsen2
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> Omnem crede diem tibi diluxisse supremum.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> Claus Ibsen
>>>>>> -----------------
>>>>>> http://davsclaus.com @davsclaus
>>>>>> Camel in Action 2nd edition: http://www.manning.com/ibsen2
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Omnem crede diem tibi diluxisse supremum.
>>> 
>>> 
>>> 
>>> --
>>> Omnem crede diem tibi diluxisse supremum.
>> 

Re: action at the end of the split

Posted by Wilson MacGyver <wm...@gmail.com>.
I'm sorry my message isn't clear. I've read the docs and the chapter that
deal with this in the camel book. The issue I have isn't with the each time
part.

It's the final log part after the split is done. My goal is after the end
of the split block to send an email logging the total number updates.

But as you can see, CamelSplitSize is no longer set outside of the split
block. So I have no way of sending that to a SMTP route.

On Mon, Aug 10, 2015 at 4:15 PM Christian Müller <
christian.mueller@gmail.com> wrote:

> Sure, that's how stream works. We do not load the entire payload into
> memory.
> Why don't you use the property CamelSplitIndex? In this case, the output
> will be
>
> [Test worker] INFO route1 - each time 0
>
> [Test worker] INFO route1 - each time 1
>
> [Test worker] INFO route1 - each time 2
>
> Best,
>
> Christian
> -----------------
>
> Software Integration Specialist
>
> Apache Member
> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> Apache Incubator PMC Member
>
> https://www.linkedin.com/pub/christian-mueller/11/551/642
>
> On Mon, Aug 10, 2015 at 4:35 AM, Wilson MacGyver <wm...@gmail.com>
> wrote:
>
> > public class SplitTest extends CamelTestSupport {
> >
> >     @EndpointInject(uri = "mock:result")
> >
> >     protected MockEndpoint resultEndpoint;
> >
> >
> >     @Produce(uri = "direct:testSplit")
> >
> >     protected org.apache.camel.ProducerTemplate template;
> >
> >
> >     @Test
> >
> >     public void testWithString() throws Exception{
> >
> >         String content = "a\nb\nc";
> >
> >
> >         resultEndpoint.expectedMessageCount(3);
> >
> >
> >         template.sendBodyAndHeader(
> >
> >                 content,
> >
> >                 "foo", "bar");
> >
> >
> >         resultEndpoint.assertIsSatisfied();
> >
> >     }
> >
> >
> >     @Override
> >
> >     protected RouteBuilder createRouteBuilder() {
> >
> >         return new RouteBuilder() {
> >
> >             public void configure() {
> >
> >                 from("direct:testSplit")
> >
> >                         .split(body().tokenize("\n")).streaming()
> >
> >                             .log("each time ${property.CamelSplitSize}")
> >
> >                             .to("mock:result")
> >
> >                         .end()
> >
> >                         .log("Processed ${property.CamelSplitSize}
> > updates")
> >
> >                         .log("should only happen once");
> >
> >             }
> >
> >         };
> >
> >     }
> >
> > }
> >
> >
> > running this, I get the following
> >
> >
> >
> > [Test worker] INFO route1 - each time
> >
> > [Test worker] INFO route1 - each time
> >
> > [Test worker] INFO route1 - each time 3
> >
> > [Test worker] INFO route1 - Processed  updates
> >
> > [Test worker] INFO route1 - should only happen once
> >
> >
> > given the input of 3 lines. CamelSplitSize is only set at the end of the
> > split. so only the 3rd time has the 3 displayed which is correct.
> >
> > however notice it says  Processed  updates, because the property is only
> > set within the split..end block
> >
> > that's what I meant by out of scope
> >
> >
> >
> > On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller <
> > christian.mueller@gmail.com> wrote:
> >
> > > What do you mean with "is out of scope"?
> > > You can use the message header to get this information.
> > >
> > > Best,
> > >
> > > Christian
> > > -----------------
> > >
> > > Software Integration Specialist
> > >
> > > Apache Member
> > > V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> > > Apache Incubator PMC Member
> > >
> > > https://www.linkedin.com/pub/christian-mueller/11/551/642
> > >
> > > On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <wm...@gmail.com>
> > > wrote:
> > >
> > > > I figured out what I was doing wrong.  It's because I was using
> filter
> > > with
> > > > bean. I didn't realize I had to add an end() to terminate the
> filtering
> > > >
> > > >
> > > > from()
> > > >
> > > > .split(body().tokenize("\n")).streaming()
> > > >
> > > > .process() /do stuff
> > > >
> > > > .filter().method(MyFilter.class, "keepIt")
> > > >
> > > >   .to("mock:result")
> > > >
> > > > .end()
> > > >
> > > > .log("final time ${property.CamelSplitSize}")
> > > >
> > > > .to(smtp://)
> > > >
> > > >
> > > > now I have a different problem. I need to know the # of total
> > processed.
> > > > But the CamelSplitSize property is out of scope. Anyway to work
> around
> > > > that?
> > > >
> > > >
> > > > Thanks
> > > >
> > > >
> > > >
> > > > On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <cl...@gmail.com>
> > > > wrote:
> > > >
> > > > > You must be doing some more inside the splitter and you may need 2
> x
> > > end
> > > > >
> > > > > On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <
> > wmacgyver@gmail.com>
> > > > > wrote:
> > > > > > hmm, if I understand you correctly, this isn't working for me.
> > > > > >
> > > > > > I have
> > > > > >
> > > > > > from()
> > > > > >
> > > > > > .split(body().tokenize("\n")).streaming()
> > > > > >
> > > > > > .process() /do stuff
> > > > > >
> > > > > > .end()
> > > > > >
> > > > > > .log("${in.body}")
> > > > > >
> > > > > > .to(smtp://)
> > > > > >
> > > > > >
> > > > > > say if the file has 100 lines, I'd except to see the log once if
> I
> > > > > > understand what you are saying correctly. but I see the log 100
> > > times.
> > > > > >
> > > > > >
> > > > > > Thanks,
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <
> > claus.ibsen@gmail.com>
> > > > > wrote:
> > > > > >
> > > > > >> You can do that after the splitter
> > > > > >>
> > > > > >> <from>
> > > > > >>   <split>
> > > > > >>     ... inside splitter
> > > > > >>   </split>
> > > > > >>  .. split done
> > > > > >>   <to email> send email here
> > > > > >>
> > > > > >> In Java DSL you can use .end() to end the split block.
> > > > > >>
> > > > > >> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <
> > > wmacgyver@gmail.com
> > > > >
> > > > > >> wrote:
> > > > > >> > Hi,
> > > > > >> >
> > > > > >> > I'm processing a large file. so I use .split and .streaming to
> > > > process
> > > > > >> it a
> > > > > >> > record at a time.
> > > > > >> >
> > > > > >> > I would like to send an email alert upon completion of
> > processing
> > > > the
> > > > > >> file.
> > > > > >> >
> > > > > >> > but I can't figure out where to do that.
> > > > > >> >
> > > > > >> > I know I can check to see if it's the last exchange using
> > property
> > > > > >> > "CamelSplitComplete", but it's set to true on the last
> exchange.
> > > So
> > > > I
> > > > > >> still
> > > > > >> > need to let it finish.
> > > > > >> >
> > > > > >> > Is there a good way to this?
> > > > > >> >
> > > > > >> > Thanks,
> > > > > >> > Mac
> > > > > >> >
> > > > > >> > --
> > > > > >> > Omnem crede diem tibi diluxisse supremum.
> > > > > >>
> > > > > >>
> > > > > >>
> > > > > >> --
> > > > > >> Claus Ibsen
> > > > > >> -----------------
> > > > > >> http://davsclaus.com @davsclaus
> > > > > >> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > > > >>
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Omnem crede diem tibi diluxisse supremum.
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Claus Ibsen
> > > > > -----------------
> > > > > http://davsclaus.com @davsclaus
> > > > > Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Omnem crede diem tibi diluxisse supremum.
> > > >
> > >
> >
> >
> >
> > --
> > Omnem crede diem tibi diluxisse supremum.
> >
>

Re: action at the end of the split

Posted by Christian Müller <ch...@gmail.com>.
http://camel.apache.org/splitter.html

Best,

Christian
-----------------

Software Integration Specialist

Apache Member
V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
Apache Incubator PMC Member

https://www.linkedin.com/pub/christian-mueller/11/551/642

On Mon, Aug 10, 2015 at 10:15 PM, Christian Müller <
christian.mueller@gmail.com> wrote:

> Sure, that's how stream works. We do not load the entire payload into
> memory.
> Why don't you use the property CamelSplitIndex? In this case, the output
> will be
>
> [Test worker] INFO route1 - each time 0
>
> [Test worker] INFO route1 - each time 1
>
> [Test worker] INFO route1 - each time 2
>
> Best,
>
> Christian
> -----------------
>
> Software Integration Specialist
>
> Apache Member
> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> Apache Incubator PMC Member
>
> https://www.linkedin.com/pub/christian-mueller/11/551/642
>
> On Mon, Aug 10, 2015 at 4:35 AM, Wilson MacGyver <wm...@gmail.com>
> wrote:
>
>> public class SplitTest extends CamelTestSupport {
>>
>>     @EndpointInject(uri = "mock:result")
>>
>>     protected MockEndpoint resultEndpoint;
>>
>>
>>     @Produce(uri = "direct:testSplit")
>>
>>     protected org.apache.camel.ProducerTemplate template;
>>
>>
>>     @Test
>>
>>     public void testWithString() throws Exception{
>>
>>         String content = "a\nb\nc";
>>
>>
>>         resultEndpoint.expectedMessageCount(3);
>>
>>
>>         template.sendBodyAndHeader(
>>
>>                 content,
>>
>>                 "foo", "bar");
>>
>>
>>         resultEndpoint.assertIsSatisfied();
>>
>>     }
>>
>>
>>     @Override
>>
>>     protected RouteBuilder createRouteBuilder() {
>>
>>         return new RouteBuilder() {
>>
>>             public void configure() {
>>
>>                 from("direct:testSplit")
>>
>>                         .split(body().tokenize("\n")).streaming()
>>
>>                             .log("each time ${property.CamelSplitSize}")
>>
>>                             .to("mock:result")
>>
>>                         .end()
>>
>>                         .log("Processed ${property.CamelSplitSize}
>> updates")
>>
>>                         .log("should only happen once");
>>
>>             }
>>
>>         };
>>
>>     }
>>
>> }
>>
>>
>> running this, I get the following
>>
>>
>>
>> [Test worker] INFO route1 - each time
>>
>> [Test worker] INFO route1 - each time
>>
>> [Test worker] INFO route1 - each time 3
>>
>> [Test worker] INFO route1 - Processed  updates
>>
>> [Test worker] INFO route1 - should only happen once
>>
>>
>> given the input of 3 lines. CamelSplitSize is only set at the end of the
>> split. so only the 3rd time has the 3 displayed which is correct.
>>
>> however notice it says  Processed  updates, because the property is only
>> set within the split..end block
>>
>> that's what I meant by out of scope
>>
>>
>>
>> On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller <
>> christian.mueller@gmail.com> wrote:
>>
>> > What do you mean with "is out of scope"?
>> > You can use the message header to get this information.
>> >
>> > Best,
>> >
>> > Christian
>> > -----------------
>> >
>> > Software Integration Specialist
>> >
>> > Apache Member
>> > V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
>> > Apache Incubator PMC Member
>> >
>> > https://www.linkedin.com/pub/christian-mueller/11/551/642
>> >
>> > On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <wm...@gmail.com>
>> > wrote:
>> >
>> > > I figured out what I was doing wrong.  It's because I was using filter
>> > with
>> > > bean. I didn't realize I had to add an end() to terminate the
>> filtering
>> > >
>> > >
>> > > from()
>> > >
>> > > .split(body().tokenize("\n")).streaming()
>> > >
>> > > .process() /do stuff
>> > >
>> > > .filter().method(MyFilter.class, "keepIt")
>> > >
>> > >   .to("mock:result")
>> > >
>> > > .end()
>> > >
>> > > .log("final time ${property.CamelSplitSize}")
>> > >
>> > > .to(smtp://)
>> > >
>> > >
>> > > now I have a different problem. I need to know the # of total
>> processed.
>> > > But the CamelSplitSize property is out of scope. Anyway to work around
>> > > that?
>> > >
>> > >
>> > > Thanks
>> > >
>> > >
>> > >
>> > > On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <cl...@gmail.com>
>> > > wrote:
>> > >
>> > > > You must be doing some more inside the splitter and you may need 2 x
>> > end
>> > > >
>> > > > On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <
>> wmacgyver@gmail.com>
>> > > > wrote:
>> > > > > hmm, if I understand you correctly, this isn't working for me.
>> > > > >
>> > > > > I have
>> > > > >
>> > > > > from()
>> > > > >
>> > > > > .split(body().tokenize("\n")).streaming()
>> > > > >
>> > > > > .process() /do stuff
>> > > > >
>> > > > > .end()
>> > > > >
>> > > > > .log("${in.body}")
>> > > > >
>> > > > > .to(smtp://)
>> > > > >
>> > > > >
>> > > > > say if the file has 100 lines, I'd except to see the log once if I
>> > > > > understand what you are saying correctly. but I see the log 100
>> > times.
>> > > > >
>> > > > >
>> > > > > Thanks,
>> > > > >
>> > > > >
>> > > > >
>> > > > > On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <
>> claus.ibsen@gmail.com>
>> > > > wrote:
>> > > > >
>> > > > >> You can do that after the splitter
>> > > > >>
>> > > > >> <from>
>> > > > >>   <split>
>> > > > >>     ... inside splitter
>> > > > >>   </split>
>> > > > >>  .. split done
>> > > > >>   <to email> send email here
>> > > > >>
>> > > > >> In Java DSL you can use .end() to end the split block.
>> > > > >>
>> > > > >> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <
>> > wmacgyver@gmail.com
>> > > >
>> > > > >> wrote:
>> > > > >> > Hi,
>> > > > >> >
>> > > > >> > I'm processing a large file. so I use .split and .streaming to
>> > > process
>> > > > >> it a
>> > > > >> > record at a time.
>> > > > >> >
>> > > > >> > I would like to send an email alert upon completion of
>> processing
>> > > the
>> > > > >> file.
>> > > > >> >
>> > > > >> > but I can't figure out where to do that.
>> > > > >> >
>> > > > >> > I know I can check to see if it's the last exchange using
>> property
>> > > > >> > "CamelSplitComplete", but it's set to true on the last
>> exchange.
>> > So
>> > > I
>> > > > >> still
>> > > > >> > need to let it finish.
>> > > > >> >
>> > > > >> > Is there a good way to this?
>> > > > >> >
>> > > > >> > Thanks,
>> > > > >> > Mac
>> > > > >> >
>> > > > >> > --
>> > > > >> > Omnem crede diem tibi diluxisse supremum.
>> > > > >>
>> > > > >>
>> > > > >>
>> > > > >> --
>> > > > >> Claus Ibsen
>> > > > >> -----------------
>> > > > >> http://davsclaus.com @davsclaus
>> > > > >> Camel in Action 2nd edition: http://www.manning.com/ibsen2
>> > > > >>
>> > > > >
>> > > > >
>> > > > >
>> > > > > --
>> > > > > Omnem crede diem tibi diluxisse supremum.
>> > > >
>> > > >
>> > > >
>> > > > --
>> > > > Claus Ibsen
>> > > > -----------------
>> > > > http://davsclaus.com @davsclaus
>> > > > Camel in Action 2nd edition: http://www.manning.com/ibsen2
>> > > >
>> > >
>> > >
>> > >
>> > > --
>> > > Omnem crede diem tibi diluxisse supremum.
>> > >
>> >
>>
>>
>>
>> --
>> Omnem crede diem tibi diluxisse supremum.
>>
>
>

Re: action at the end of the split

Posted by Christian Müller <ch...@gmail.com>.
Sure, that's how stream works. We do not load the entire payload into
memory.
Why don't you use the property CamelSplitIndex? In this case, the output
will be

[Test worker] INFO route1 - each time 0

[Test worker] INFO route1 - each time 1

[Test worker] INFO route1 - each time 2

Best,

Christian
-----------------

Software Integration Specialist

Apache Member
V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
Apache Incubator PMC Member

https://www.linkedin.com/pub/christian-mueller/11/551/642

On Mon, Aug 10, 2015 at 4:35 AM, Wilson MacGyver <wm...@gmail.com>
wrote:

> public class SplitTest extends CamelTestSupport {
>
>     @EndpointInject(uri = "mock:result")
>
>     protected MockEndpoint resultEndpoint;
>
>
>     @Produce(uri = "direct:testSplit")
>
>     protected org.apache.camel.ProducerTemplate template;
>
>
>     @Test
>
>     public void testWithString() throws Exception{
>
>         String content = "a\nb\nc";
>
>
>         resultEndpoint.expectedMessageCount(3);
>
>
>         template.sendBodyAndHeader(
>
>                 content,
>
>                 "foo", "bar");
>
>
>         resultEndpoint.assertIsSatisfied();
>
>     }
>
>
>     @Override
>
>     protected RouteBuilder createRouteBuilder() {
>
>         return new RouteBuilder() {
>
>             public void configure() {
>
>                 from("direct:testSplit")
>
>                         .split(body().tokenize("\n")).streaming()
>
>                             .log("each time ${property.CamelSplitSize}")
>
>                             .to("mock:result")
>
>                         .end()
>
>                         .log("Processed ${property.CamelSplitSize}
> updates")
>
>                         .log("should only happen once");
>
>             }
>
>         };
>
>     }
>
> }
>
>
> running this, I get the following
>
>
>
> [Test worker] INFO route1 - each time
>
> [Test worker] INFO route1 - each time
>
> [Test worker] INFO route1 - each time 3
>
> [Test worker] INFO route1 - Processed  updates
>
> [Test worker] INFO route1 - should only happen once
>
>
> given the input of 3 lines. CamelSplitSize is only set at the end of the
> split. so only the 3rd time has the 3 displayed which is correct.
>
> however notice it says  Processed  updates, because the property is only
> set within the split..end block
>
> that's what I meant by out of scope
>
>
>
> On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller <
> christian.mueller@gmail.com> wrote:
>
> > What do you mean with "is out of scope"?
> > You can use the message header to get this information.
> >
> > Best,
> >
> > Christian
> > -----------------
> >
> > Software Integration Specialist
> >
> > Apache Member
> > V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> > Apache Incubator PMC Member
> >
> > https://www.linkedin.com/pub/christian-mueller/11/551/642
> >
> > On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <wm...@gmail.com>
> > wrote:
> >
> > > I figured out what I was doing wrong.  It's because I was using filter
> > with
> > > bean. I didn't realize I had to add an end() to terminate the filtering
> > >
> > >
> > > from()
> > >
> > > .split(body().tokenize("\n")).streaming()
> > >
> > > .process() /do stuff
> > >
> > > .filter().method(MyFilter.class, "keepIt")
> > >
> > >   .to("mock:result")
> > >
> > > .end()
> > >
> > > .log("final time ${property.CamelSplitSize}")
> > >
> > > .to(smtp://)
> > >
> > >
> > > now I have a different problem. I need to know the # of total
> processed.
> > > But the CamelSplitSize property is out of scope. Anyway to work around
> > > that?
> > >
> > >
> > > Thanks
> > >
> > >
> > >
> > > On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <cl...@gmail.com>
> > > wrote:
> > >
> > > > You must be doing some more inside the splitter and you may need 2 x
> > end
> > > >
> > > > On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <
> wmacgyver@gmail.com>
> > > > wrote:
> > > > > hmm, if I understand you correctly, this isn't working for me.
> > > > >
> > > > > I have
> > > > >
> > > > > from()
> > > > >
> > > > > .split(body().tokenize("\n")).streaming()
> > > > >
> > > > > .process() /do stuff
> > > > >
> > > > > .end()
> > > > >
> > > > > .log("${in.body}")
> > > > >
> > > > > .to(smtp://)
> > > > >
> > > > >
> > > > > say if the file has 100 lines, I'd except to see the log once if I
> > > > > understand what you are saying correctly. but I see the log 100
> > times.
> > > > >
> > > > >
> > > > > Thanks,
> > > > >
> > > > >
> > > > >
> > > > > On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <
> claus.ibsen@gmail.com>
> > > > wrote:
> > > > >
> > > > >> You can do that after the splitter
> > > > >>
> > > > >> <from>
> > > > >>   <split>
> > > > >>     ... inside splitter
> > > > >>   </split>
> > > > >>  .. split done
> > > > >>   <to email> send email here
> > > > >>
> > > > >> In Java DSL you can use .end() to end the split block.
> > > > >>
> > > > >> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <
> > wmacgyver@gmail.com
> > > >
> > > > >> wrote:
> > > > >> > Hi,
> > > > >> >
> > > > >> > I'm processing a large file. so I use .split and .streaming to
> > > process
> > > > >> it a
> > > > >> > record at a time.
> > > > >> >
> > > > >> > I would like to send an email alert upon completion of
> processing
> > > the
> > > > >> file.
> > > > >> >
> > > > >> > but I can't figure out where to do that.
> > > > >> >
> > > > >> > I know I can check to see if it's the last exchange using
> property
> > > > >> > "CamelSplitComplete", but it's set to true on the last exchange.
> > So
> > > I
> > > > >> still
> > > > >> > need to let it finish.
> > > > >> >
> > > > >> > Is there a good way to this?
> > > > >> >
> > > > >> > Thanks,
> > > > >> > Mac
> > > > >> >
> > > > >> > --
> > > > >> > Omnem crede diem tibi diluxisse supremum.
> > > > >>
> > > > >>
> > > > >>
> > > > >> --
> > > > >> Claus Ibsen
> > > > >> -----------------
> > > > >> http://davsclaus.com @davsclaus
> > > > >> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > > >>
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Omnem crede diem tibi diluxisse supremum.
> > > >
> > > >
> > > >
> > > > --
> > > > Claus Ibsen
> > > > -----------------
> > > > http://davsclaus.com @davsclaus
> > > > Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > >
> > >
> > >
> > >
> > > --
> > > Omnem crede diem tibi diluxisse supremum.
> > >
> >
>
>
>
> --
> Omnem crede diem tibi diluxisse supremum.
>

Re: action at the end of the split

Posted by Wilson MacGyver <wm...@gmail.com>.
public class SplitTest extends CamelTestSupport {

    @EndpointInject(uri = "mock:result")

    protected MockEndpoint resultEndpoint;


    @Produce(uri = "direct:testSplit")

    protected org.apache.camel.ProducerTemplate template;


    @Test

    public void testWithString() throws Exception{

        String content = "a\nb\nc";


        resultEndpoint.expectedMessageCount(3);


        template.sendBodyAndHeader(

                content,

                "foo", "bar");


        resultEndpoint.assertIsSatisfied();

    }


    @Override

    protected RouteBuilder createRouteBuilder() {

        return new RouteBuilder() {

            public void configure() {

                from("direct:testSplit")

                        .split(body().tokenize("\n")).streaming()

                            .log("each time ${property.CamelSplitSize}")

                            .to("mock:result")

                        .end()

                        .log("Processed ${property.CamelSplitSize} updates")

                        .log("should only happen once");

            }

        };

    }

}


running this, I get the following



[Test worker] INFO route1 - each time

[Test worker] INFO route1 - each time

[Test worker] INFO route1 - each time 3

[Test worker] INFO route1 - Processed  updates

[Test worker] INFO route1 - should only happen once


given the input of 3 lines. CamelSplitSize is only set at the end of the
split. so only the 3rd time has the 3 displayed which is correct.

however notice it says  Processed  updates, because the property is only
set within the split..end block

that's what I meant by out of scope



On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller <
christian.mueller@gmail.com> wrote:

> What do you mean with "is out of scope"?
> You can use the message header to get this information.
>
> Best,
>
> Christian
> -----------------
>
> Software Integration Specialist
>
> Apache Member
> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> Apache Incubator PMC Member
>
> https://www.linkedin.com/pub/christian-mueller/11/551/642
>
> On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <wm...@gmail.com>
> wrote:
>
> > I figured out what I was doing wrong.  It's because I was using filter
> with
> > bean. I didn't realize I had to add an end() to terminate the filtering
> >
> >
> > from()
> >
> > .split(body().tokenize("\n")).streaming()
> >
> > .process() /do stuff
> >
> > .filter().method(MyFilter.class, "keepIt")
> >
> >   .to("mock:result")
> >
> > .end()
> >
> > .log("final time ${property.CamelSplitSize}")
> >
> > .to(smtp://)
> >
> >
> > now I have a different problem. I need to know the # of total processed.
> > But the CamelSplitSize property is out of scope. Anyway to work around
> > that?
> >
> >
> > Thanks
> >
> >
> >
> > On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <cl...@gmail.com>
> > wrote:
> >
> > > You must be doing some more inside the splitter and you may need 2 x
> end
> > >
> > > On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <wm...@gmail.com>
> > > wrote:
> > > > hmm, if I understand you correctly, this isn't working for me.
> > > >
> > > > I have
> > > >
> > > > from()
> > > >
> > > > .split(body().tokenize("\n")).streaming()
> > > >
> > > > .process() /do stuff
> > > >
> > > > .end()
> > > >
> > > > .log("${in.body}")
> > > >
> > > > .to(smtp://)
> > > >
> > > >
> > > > say if the file has 100 lines, I'd except to see the log once if I
> > > > understand what you are saying correctly. but I see the log 100
> times.
> > > >
> > > >
> > > > Thanks,
> > > >
> > > >
> > > >
> > > > On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <cl...@gmail.com>
> > > wrote:
> > > >
> > > >> You can do that after the splitter
> > > >>
> > > >> <from>
> > > >>   <split>
> > > >>     ... inside splitter
> > > >>   </split>
> > > >>  .. split done
> > > >>   <to email> send email here
> > > >>
> > > >> In Java DSL you can use .end() to end the split block.
> > > >>
> > > >> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <
> wmacgyver@gmail.com
> > >
> > > >> wrote:
> > > >> > Hi,
> > > >> >
> > > >> > I'm processing a large file. so I use .split and .streaming to
> > process
> > > >> it a
> > > >> > record at a time.
> > > >> >
> > > >> > I would like to send an email alert upon completion of processing
> > the
> > > >> file.
> > > >> >
> > > >> > but I can't figure out where to do that.
> > > >> >
> > > >> > I know I can check to see if it's the last exchange using property
> > > >> > "CamelSplitComplete", but it's set to true on the last exchange.
> So
> > I
> > > >> still
> > > >> > need to let it finish.
> > > >> >
> > > >> > Is there a good way to this?
> > > >> >
> > > >> > Thanks,
> > > >> > Mac
> > > >> >
> > > >> > --
> > > >> > Omnem crede diem tibi diluxisse supremum.
> > > >>
> > > >>
> > > >>
> > > >> --
> > > >> Claus Ibsen
> > > >> -----------------
> > > >> http://davsclaus.com @davsclaus
> > > >> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > > >>
> > > >
> > > >
> > > >
> > > > --
> > > > Omnem crede diem tibi diluxisse supremum.
> > >
> > >
> > >
> > > --
> > > Claus Ibsen
> > > -----------------
> > > http://davsclaus.com @davsclaus
> > > Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > >
> >
> >
> >
> > --
> > Omnem crede diem tibi diluxisse supremum.
> >
>



-- 
Omnem crede diem tibi diluxisse supremum.

Re: action at the end of the split

Posted by Christian Müller <ch...@gmail.com>.
What do you mean with "is out of scope"?
You can use the message header to get this information.

Best,

Christian
-----------------

Software Integration Specialist

Apache Member
V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
Apache Incubator PMC Member

https://www.linkedin.com/pub/christian-mueller/11/551/642

On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <wm...@gmail.com> wrote:

> I figured out what I was doing wrong.  It's because I was using filter with
> bean. I didn't realize I had to add an end() to terminate the filtering
>
>
> from()
>
> .split(body().tokenize("\n")).streaming()
>
> .process() /do stuff
>
> .filter().method(MyFilter.class, "keepIt")
>
>   .to("mock:result")
>
> .end()
>
> .log("final time ${property.CamelSplitSize}")
>
> .to(smtp://)
>
>
> now I have a different problem. I need to know the # of total processed.
> But the CamelSplitSize property is out of scope. Anyway to work around
> that?
>
>
> Thanks
>
>
>
> On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen <cl...@gmail.com>
> wrote:
>
> > You must be doing some more inside the splitter and you may need 2 x end
> >
> > On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver <wm...@gmail.com>
> > wrote:
> > > hmm, if I understand you correctly, this isn't working for me.
> > >
> > > I have
> > >
> > > from()
> > >
> > > .split(body().tokenize("\n")).streaming()
> > >
> > > .process() /do stuff
> > >
> > > .end()
> > >
> > > .log("${in.body}")
> > >
> > > .to(smtp://)
> > >
> > >
> > > say if the file has 100 lines, I'd except to see the log once if I
> > > understand what you are saying correctly. but I see the log 100 times.
> > >
> > >
> > > Thanks,
> > >
> > >
> > >
> > > On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen <cl...@gmail.com>
> > wrote:
> > >
> > >> You can do that after the splitter
> > >>
> > >> <from>
> > >>   <split>
> > >>     ... inside splitter
> > >>   </split>
> > >>  .. split done
> > >>   <to email> send email here
> > >>
> > >> In Java DSL you can use .end() to end the split block.
> > >>
> > >> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver <wmacgyver@gmail.com
> >
> > >> wrote:
> > >> > Hi,
> > >> >
> > >> > I'm processing a large file. so I use .split and .streaming to
> process
> > >> it a
> > >> > record at a time.
> > >> >
> > >> > I would like to send an email alert upon completion of processing
> the
> > >> file.
> > >> >
> > >> > but I can't figure out where to do that.
> > >> >
> > >> > I know I can check to see if it's the last exchange using property
> > >> > "CamelSplitComplete", but it's set to true on the last exchange. So
> I
> > >> still
> > >> > need to let it finish.
> > >> >
> > >> > Is there a good way to this?
> > >> >
> > >> > Thanks,
> > >> > Mac
> > >> >
> > >> > --
> > >> > Omnem crede diem tibi diluxisse supremum.
> > >>
> > >>
> > >>
> > >> --
> > >> Claus Ibsen
> > >> -----------------
> > >> http://davsclaus.com @davsclaus
> > >> Camel in Action 2nd edition: http://www.manning.com/ibsen2
> > >>
> > >
> > >
> > >
> > > --
> > > Omnem crede diem tibi diluxisse supremum.
> >
> >
> >
> > --
> > Claus Ibsen
> > -----------------
> > http://davsclaus.com @davsclaus
> > Camel in Action 2nd edition: http://www.manning.com/ibsen2
> >
>
>
>
> --
> Omnem crede diem tibi diluxisse supremum.
>