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

Claus Ibsen commented on CAMEL-26742:
-------------------------------------

Merged to main in https://github.com/apache/camel/pull/29436 (fixed in 4.24.0).

> camel-core - on completion listener SPI for the exchange sanitizer
> ------------------------------------------------------------------
>
>                 Key: CAMEL-26742
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26742
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>            Reporter: shashank
>            Assignee: shashank
>            Priority: Major
>             Fix For: 4.24.0
>
>
> Step 3 of the order of work in the exchange sanitizer design 
> ({{design/exchange-sanitizer.adoc}}, CAMEL-26630), first part: the SPI that 
> rule R2 (each consumer commit runs exactly once, for the unit of work that 
> owns it) needs. R2 itself comes in the next step.
> As in the design ("The listener SPIs", "Where they are called"):
> * A new SPI {{org.apache.camel.spi.OnCompletionListener}} in camel-api, with 
> empty default methods: {{onUnitOfWork}} (an exchange gets a unit of work, 
> with the on completions that move into it), {{onCompletionAdded}}, 
> {{onCompletionHandover}}, {{onCompletionTaken}} and {{onCompletionRun}}, plus 
> {{onCompletionRemoved}} (a commit removed with 
> {{UnitOfWork.removeSynchronization}} does not run, so R2 must see the 
> removal). A listener only observes; what it throws is caught and logged at 
> WARN once per listener.
> * {{ExtendedCamelContext}}: {{addOnCompletionListener}}, 
> {{removeOnCompletionListener}}, {{getOnCompletionListeners}} (default 
> methods), next to the step listener methods of CAMEL-26688.
> * {{UnitOfWork}}: a new default method {{handoverSynchronization(Exchange 
> from, Exchange target, Predicate<Synchronization> filter)}} that hands over 
> and returns what moved, as only {{DefaultUnitOfWork}} knows which on 
> completions a {{SynchronizationVetoable}} kept. The default hands over as 
> today and returns {{null}} (not known), so a custom unit of work keeps 
> working.
> * The calls, where Camel changes or runs on completions today: 
> {{setUnitOfWork}} and {{handoverCompletions}} of the exchange, 
> {{DefaultUnitOfWork.addSynchronization}} and {{removeSynchronization}}, and 
> {{UnitOfWorkHelper.doneSynchronizations}}.
> With no listener installed each place only checks that the list of listeners 
> is empty and goes on as today. The design asks for a JMH run that shows no 
> cost without a listener.
> _Filed with Claude Code on behalf of allthingssecurity._



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to