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