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