camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Wilson MacGyver <wmacgy...@gmail.com>
Subject Re: action at the end of the split
Date Mon, 10 Aug 2015 20:49:50 GMT
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.
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message