Hi

Ah sorry there is both an onCompletion EIP you can use in routes.
And then AggregationStrategy with overloaded/default methods for various
callbacks.



On Tue, Nov 8, 2022 at 11:39 AM Reto Peter <reto.pe...@advanceit.ch> wrote:

> Hi Claus
>
> Thanks, but the Aggregator has its interface AggregationStrategy and there
> is the 'onCompletion' method.
> And this method is invoked in case of the following route:
>
> from("direct:processAndAggregate")
>         .toD("xslt-saxon:mm/transform- -${header.doctype}-to-EDI-XML.xsl")
>         .aggregate(header("doctype"), new
> EDIMessageToInterchangeAggregatorMM())
>                 .forceCompletionOnStop()
>                 .to("sql:INSERT something");
>
> So that means, in this route the onCompletion of the Aggregator is called
> cause the entire route is completed?
>
> -----Original Message-----
> From: Claus Ibsen <claus.ib...@gmail.com>
> Sent: Tuesday, 8 November 2022 09:50
> To: users@camel.apache.org
> Subject: Re: Splitter and Aggregater onCompletion
>
> Hi
>
> onCompletion is its own EIP
> https://camel.apache.org/manual/oncompletion.html
>
> The onCompletion works on the incoming exchange in the route, and the
> aggregator is separated from that incoming exchange, as the output of the
> aggregator runs its own "lifecycle", in its own exchange.
> So it has no onCompletion.
>
> The route above you show, is that when the split end() then you are
> continuing the incoming exchange which has onCompletion.
>
> Its a bit difficult to explain, if you have the CiA2 book then take a look
> in the EIP chapter about the aggregator.
>
>
>
> On Tue, Nov 8, 2022 at 9:43 AM Reto Peter <reto.pe...@advanceit.ch> wrote:
>
> > Hi all
> >
> > I am using a Splitter and an Aggregator.
> > All of the output are written into the final result. But at the end of
> > the Split, I wanted to add something more.
> > This is where the 'onCompletion' method inside the Aggregator can be
> > used (in my mind, cause that works for scenarios without a Splitter).
> >
> > But if have the 'onCompletion' method, then the Aggregator does not
> > finish his job (cause it probably doesn't know when to stop) If I have
> > no 'onCompletion' method, then the Aggregator does finish his job and
> > the route does go on
> >
> > My question is: Why I cannot use the onCompletion method on the
> > Aggregator. Cause that Aggregator does the start work and should also
> > do the end work of the aggregation. I have used the Aggregator in
> > other scenarios (without the Splitter), and there it worked smoothly
> >
> > Route where it does work, but I needed to call a bean after the end of
> > the Splitter.
> > from("direct:anything")
> >        .to("direct:getSomething")
> >        .split(simple("${body}"), new EdiInterchangeAggregator()) //
> > For each document
> >              .to("direct:prepareSomething")
> >              .to("direct:createSomethingMore")
> >        .end()
> >        .log("CamelSplitSize: ${exchangeProperty.CamelSplitSize}
> documents")
> >        .bean(EDIFinalizer.class, "finalizeInterchange");
> >
> > So what I want is to implement the onCompletion method on the class
> > EdiInterchangeAggregator.
> > Is this really not possible?
> >
> > Regards
> > Reto
> >
>
>
> --
> Claus Ibsen
> -----------------
> @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2
>


-- 
Claus Ibsen
-----------------
@davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to