[ 
https://issues.apache.org/jira/browse/CAMEL-24140?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18097050#comment-18097050
 ] 

Claus Ibsen commented on CAMEL-24140:
-------------------------------------

Fixed via https://github.com/apache/camel/pull/24820

> camel-core - UseOriginalAggregationStrategy still not honored when 
> shareUnitOfWork is enabled (Multicast/Split/RecipientList)
> -----------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24140
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24140
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core, eip
>    Affects Versions: 4.21.0, 4.22.0
>            Reporter: Federico Mariani
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.22.0
>
>         Attachments: MulticastUseOriginalShareUnitOfWorkIssueTest.java
>
>
> CAMEL-24062 moved the {{UseOriginalAggregationStrategy}} binding into 
> {{MulticastProcessor.process()}}:
> {code:java}
> if (strategy instanceof UseOriginalAggregationStrategy original) {
>     AggregationStrategy clone = original.newInstance(exchange);
>     if (isShareUnitOfWork()) {
>         clone = new ShareUnitOfWorkAggregationStrategy(clone);
>     }
>     setAggregationStrategyOnExchange(exchange, clone);
> }
> {code}
> However, when {{shareUnitOfWork=true}} the reifiers 
> ({{MulticastReifier.createAggregationStrategy}}, same in Split/RecipientList 
> reifiers) have *already wrapped* the configured strategy in 
> {{ShareUnitOfWorkAggregationStrategy}} at route-build time. So 
> {{getAggregationStrategy()}} returns the wrapper, the {{instanceof}} never 
> matches, and the strategy is never bound to the original exchange — the exact 
> "silently ineffective" problem CAMEL-24062 set out to fix. (The inner 
> {{isShareUnitOfWork()}} re-wrap in the processor shows the code expects an 
> unwrapped strategy at that point.)
> In the error scenario described in CAMEL-24062: a branch fails → the unbound 
> {{UseOriginalAggregationStrategy}} returns the failed *branch copy* → 
> {{doDone}} copies its results onto the original → the original body is 
> replaced by the branch's partial body.
> This affects Multicast, Splitter and RecipientList alike (for 
> Splitter/RecipientList it is the same pre-existing gap, since the code moved 
> by CAMEL-24062 was identical — so 4.21.0 and earlier are affected in those 
> EIPs too).
> *Reproducer (attached, fails on main):* 
> {{MulticastUseOriginalShareUnitOfWorkIssueTest}} — identical routes with and 
> without {{shareUnitOfWork()}}, branch B sets body "B" then throws. Without 
> shareUnitOfWork the body stays {{original}} (CAMEL-24062 fix works); with it 
> the failed branch body wins:
> {noformat}
> org.opentest4j.AssertionFailedError: expected: <original> but was: <B>
> {noformat}
> Suggested fix direction: unwrap in the check ({{strategy instanceof 
> ShareUnitOfWorkAggregationStrategy share && share.getDelegate() instanceof 
> UseOriginalAggregationStrategy}}), or stop pre-wrapping in the reifiers and 
> let the processor do the wrapping (it already does for the per-exchange 
> clone).
> _Filed by Claude Code on behalf of Federico Mariani (fmariani)_



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to