What camel version do you use?

On Tue, Nov 8, 2022 at 11:53 AM Claus Ibsen <claus.ib...@gmail.com> wrote:

> 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
>


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

Reply via email to