public interface UnitOfWork extends Service
Exchange
which allows the use of Synchronization
hooks. This object might map one-to-one with
a transaction in JPA or Spring; or might not.Modifier and Type | Method and Description |
---|---|
void |
addSynchronization(Synchronization synchronization)
Adds a synchronization hook
|
void |
afterProcess(Processor processor,
Exchange exchange,
AsyncCallback callback,
boolean doneSync)
Strategy for optional work to be executed after the processing
|
void |
afterRoute(Exchange exchange,
Route route)
Invoked when this unit of work is done being routed by the given route.
|
AsyncCallback |
beforeProcess(Processor processor,
Exchange exchange,
AsyncCallback callback)
Strategy for optional work to be execute before processing
For example the
MDCUnitOfWork leverages this
to ensure MDC is handled correctly during routing exchanges using the
asynchronous routing engine. |
void |
beforeRoute(Exchange exchange,
Route route)
Invoked when this unit of work is about to be routed by the given route.
|
void |
beginSubUnitOfWork(Exchange exchange)
Begins a
SubUnitOfWork , where sub (child) unit of works participate in a parent unit of work. |
void |
beginTransactedBy(Object key)
Mark this UnitOfWork as being transacted by the given transaction key.
|
boolean |
containsSynchronization(Synchronization synchronization)
Checks if the passed synchronization hook is already part of this unit of work.
|
UnitOfWork |
createChildUnitOfWork(Exchange childExchange)
Create a child unit of work, which is associated to this unit of work as its parent.
|
void |
done(Exchange exchange)
Invoked when this unit of work has been completed, whether it has failed or completed
|
void |
endSubUnitOfWork(Exchange exchange)
Ends a
SubUnitOfWork . |
void |
endTransactedBy(Object key)
Mark this UnitOfWork as not transacted anymore by the given transaction definition.
|
String |
getId()
Returns the unique ID of this unit of work, lazily creating one if it does not yet have one
|
Message |
getOriginalInMessage()
Gets the original IN
Message this Unit of Work was started with. |
RouteContext |
getRouteContext()
Gets the
RouteContext that this UnitOfWork currently is being routed through. |
SubUnitOfWorkCallback |
getSubUnitOfWorkCallback()
Gets the
SubUnitOfWorkCallback if this unit of work participates in a sub unit of work. |
TracedRouteNodes |
getTracedRouteNodes()
Deprecated.
|
void |
handoverSynchronization(Exchange target)
Handover all the registered synchronizations to the target
Exchange . |
void |
handoverSynchronization(Exchange target,
Predicate<Synchronization> filter)
Handover all the registered synchronizations to the target
Exchange . |
boolean |
isTransacted()
Are we transacted?
|
boolean |
isTransactedBy(Object key)
Are we already transacted by the given transaction key?
|
RouteContext |
popRouteContext()
When finished being routed under the current
RouteContext
it should be removed. |
void |
pushRouteContext(RouteContext routeContext)
Pushes the
RouteContext that this UnitOfWork currently is being routed through. |
void |
removeSynchronization(Synchronization synchronization)
Removes a synchronization hook
|
void |
setParentUnitOfWork(UnitOfWork parentUnitOfWork)
Sets the parent unit of work.
|
void addSynchronization(Synchronization synchronization)
synchronization
- the hookvoid removeSynchronization(Synchronization synchronization)
synchronization
- the hookboolean containsSynchronization(Synchronization synchronization)
synchronization
- the hookvoid handoverSynchronization(Exchange target)
Exchange
.
This is used when a route turns into asynchronous and the Exchange
that
is continued and routed in the async thread should do the on completion callbacks instead of the
original synchronous thread.target
- the target exchangevoid handoverSynchronization(Exchange target, Predicate<Synchronization> filter)
Exchange
.
This is used when a route turns into asynchronous and the Exchange
that
is continued and routed in the async thread should do the on completion callbacks instead of the
original synchronous thread.target
- the target exchangefilter
- optional filter to only handover if filter returns truevoid done(Exchange exchange)
exchange
- the current exchangevoid beforeRoute(Exchange exchange, Route route)
exchange
- the current exchangeroute
- the routevoid afterRoute(Exchange exchange, Route route)
exchange
- the current exchangeroute
- the routeString getId()
Message getOriginalInMessage()
Message
this Unit of Work was started with.
The original message is only returned if the option RuntimeConfiguration.isAllowUseOriginalMessage()
is enabled. If its disabled an IllegalStateException is thrown.Message
, or null if using original message is disabled.@Deprecated TracedRouteNodes getTracedRouteNodes()
boolean isTransacted()
boolean isTransactedBy(Object key)
key
- the transaction keyvoid beginTransactedBy(Object key)
endTransactedBy(Object)
method using the same key.key
- the transaction keyvoid endTransactedBy(Object key)
key
- the transaction keyRouteContext getRouteContext()
RouteContext
that this UnitOfWork
currently is being routed through.
Notice that an Exchange
can be routed through multiple routes and thus the
RouteContext
can change over time.pushRouteContext(RouteContext)
,
popRouteContext()
void pushRouteContext(RouteContext routeContext)
RouteContext
that this UnitOfWork
currently is being routed through.
Notice that an Exchange
can be routed through multiple routes and thus the
RouteContext
can change over time.routeContext
- the route contextRouteContext popRouteContext()
RouteContext
it should be removed.AsyncCallback beforeProcess(Processor processor, Exchange exchange, AsyncCallback callback)
MDCUnitOfWork
leverages this
to ensure MDC is handled correctly during routing exchanges using the
asynchronous routing engine.processor
- the processor to be executedexchange
- the current exchangecallback
- the callbackvoid afterProcess(Processor processor, Exchange exchange, AsyncCallback callback, boolean doneSync)
processor
- the processor executedexchange
- the current exchangecallback
- the callback useddoneSync
- whether the process was done synchronously or asynchronouslyUnitOfWork createChildUnitOfWork(Exchange childExchange)
SubUnitOfWork
s. For example a splitter,
where the sub messages of the splitter all participate in the same sub unit of work.
That sub unit of work then decides whether the Splitter (in general) is failed or a
processed successfully.childExchange
- the child exchangeSubUnitOfWork
,
SubUnitOfWorkCallback
void setParentUnitOfWork(UnitOfWork parentUnitOfWork)
parentUnitOfWork
- the parentSubUnitOfWorkCallback getSubUnitOfWorkCallback()
SubUnitOfWorkCallback
if this unit of work participates in a sub unit of work.beginSubUnitOfWork(org.apache.camel.Exchange)
void beginSubUnitOfWork(Exchange exchange)
SubUnitOfWork
, where sub (child) unit of works participate in a parent unit of work.
The SubUnitOfWork
will callback to the parent unit of work using SubUnitOfWorkCallback
s.exchange
- the exchangevoid endSubUnitOfWork(Exchange exchange)
SubUnitOfWork
.
The beginSubUnitOfWork(org.apache.camel.Exchange)
must have been invoked
prior to this operation.exchange
- the exchangeApache Camel