Package org.apache.camel.spi
Interface OptimisticLockingAggregationRepository
-
- All Superinterfaces:
AggregationRepository
public interface OptimisticLockingAggregationRepository extends AggregationRepository
A specializedAggregationRepository
which also supports optimistic locking. If the underlying implementation cannot perform optimistic locking, it should not implement this interface.- See Also:
org.apache.camel.processor.aggregate.MemoryAggregationRepository
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static class
OptimisticLockingAggregationRepository.OptimisticLockingException
Exception
used by anAggregationRepository
to indicate that an optimistic update error has occurred and that the operation should be retried by the caller.
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description Exchange
add(CamelContext camelContext, String key, Exchange oldExchange, Exchange newExchange)
Add the givenExchange
under the correlation key.void
remove(CamelContext camelContext, String key, Exchange exchange)
Removes the given Exchange when both the supplied key and Exchange are present in the repository.-
Methods inherited from interface org.apache.camel.spi.AggregationRepository
add, confirm, get, getKeys
-
-
-
-
Method Detail
-
add
Exchange add(CamelContext camelContext, String key, Exchange oldExchange, Exchange newExchange) throws OptimisticLockingAggregationRepository.OptimisticLockingException
Add the givenExchange
under the correlation key. Will perform optimistic locking to replace expected existing exchange with the new supplied exchange. If theoldExchange
is null the underlying implementation is to assume this is the very first Exchange for the supplied correlation key. When the implementation comes to store to the Exchange if there is already an existing Exchange present for this correlation key the implementation should throw an OptimisticLockingException. If theoldExchange
is not null the underlying implementation should use it to compare with the existing exchange when doing an atomic compare-and-set/swap operation. The implementation may achieve this by storing a version identifier in the Exchange as a parameter. Set before returning fromAggregationRepository.get(org.apache.camel.CamelContext, String)
} and retrieved from the exchange when passed toAggregationRepository.add(org.apache.camel.CamelContext, String, org.apache.camel.Exchange)
. Note: Theorg.apache.camel.processor.aggregate.MemoryAggregationRepository
is an exception to this recommendation. It uses theoldExchange
's Object identify to perform it's compare-and-set/swap operation, instead of a version parameter. This is not the recommended approach, and should be avoided. Theorg.apache.camel.processor.aggregate.AggregateProcessor
will ensure that the exchange received fromAggregationRepository.get(org.apache.camel.CamelContext, String)
is passed asoldExchange
, and that the aggregated exchange received from theorg.apache.camel.processor.aggregate.AggregationStrategy
is passed as thenewExchange
.- Parameters:
camelContext
- the current CamelContextkey
- the correlation keyoldExchange
- the old exchange that is expected to exist when replacing with the new exchangenewExchange
- the new aggregated exchange, to replace old exchange- Returns:
- the old exchange if any existed
- Throws:
OptimisticLockingAggregationRepository.OptimisticLockingException
- This should be thrown when the currently stored exchange differs from the supplied oldExchange.
-
remove
void remove(CamelContext camelContext, String key, Exchange exchange) throws OptimisticLockingAggregationRepository.OptimisticLockingException
Removes the given Exchange when both the supplied key and Exchange are present in the repository. If the supplied Exchange does not match the Exchange actually stored against the key this method should throw an OptimisticLockingException to indicate that the value of the correlation key has changed from the expected value.- Specified by:
remove
in interfaceAggregationRepository
- Parameters:
camelContext
- the current CamelContextkey
- the correlation keyexchange
- the exchange to remove- Throws:
OptimisticLockingAggregationRepository.OptimisticLockingException
- This should be thrown when the exchange has already been deleted, or otherwise modified.
-
-