Interface OptimisticLockingAggregationRepository

All Superinterfaces:
AggregationRepository

public interface OptimisticLockingAggregationRepository extends AggregationRepository
A specialized AggregationRepository which also supports optimistic locking. If the underlying implementation cannot perform optimistic locking, it should not implement this interface.
See Also:
  • invalid reference
    org.apache.camel.processor.aggregate.MemoryAggregationRepository
  • Method Details

    • add

      Add the given Exchange under the correlation key.

      Will perform optimistic locking to replace expected existing exchange with the new supplied exchange.

      If the oldExchange 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 the oldExchange 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 from AggregationRepository.get(org.apache.camel.CamelContext, String)} and retrieved from the exchange when passed to AggregationRepository.add(org.apache.camel.CamelContext, String, org.apache.camel.Exchange).

      Note: The

      invalid reference
      org.apache.camel.processor.aggregate.MemoryAggregationRepository
      is an exception to this recommendation. It uses the oldExchange'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.

      The

      invalid reference
      org.apache.camel.processor.aggregate.AggregateProcessor
      will ensure that the exchange received from AggregationRepository.get(org.apache.camel.CamelContext, String) is passed as oldExchange, and that the aggregated exchange received from the
      invalid reference
      org.apache.camel.processor.aggregate.AggregationStrategy
      is passed as the newExchange.
      Parameters:
      camelContext - the current CamelContext
      key - the correlation key
      oldExchange - the old exchange that is expected to exist when replacing with the new exchange
      newExchange - 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

      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 interface AggregationRepository
      Parameters:
      camelContext - the current CamelContext
      key - the correlation key
      exchange - the exchange to remove
      Throws:
      OptimisticLockingAggregationRepository.OptimisticLockingException - This should be thrown when the exchange has already been deleted, or otherwise modified.