Class HierarchicalSequencingPolicy
java.lang.Object
org.axonframework.messaging.eventhandling.sequencing.HierarchicalSequencingPolicy
- All Implemented Interfaces:
SequencingPolicy
Implementation of
SequencingPolicy that combines two policies in a fallback pattern. When the primary policy
fails to determine a sequence identifier for an event (returns Optional.empty()), this implementation will
delegate to a secondary fallback policy.
This allows for composing sequencing strategies where certain event types might be handled by specialized policies, falling back to more generic approaches when specialized sequencing fails.
- Since:
- 5.0.0
- Author:
- Mateusz Nowak
-
Constructor Summary
ConstructorsConstructorDescriptionHierarchicalSequencingPolicy(SequencingPolicy primary, SequencingPolicy secondary) Initializes a new instance with the given primarydelegateandfallbackpolicies. -
Method Summary
Modifier and TypeMethodDescriptiongetSequenceIdentifierFor(EventMessage event, ProcessingContext context) Returns the sequence identifier for the givenevent.
-
Constructor Details
-
HierarchicalSequencingPolicy
public HierarchicalSequencingPolicy(@Nonnull SequencingPolicy primary, @Nonnull SequencingPolicy secondary) Initializes a new instance with the given primarydelegateandfallbackpolicies.- Parameters:
primary- The primary policy to attempt sequence identification with first, notnull.secondary- The fallback policy to use when the delegate fails, notnull.- Throws:
NullPointerException- When either thedelegateorfallbackisnull.
-
-
Method Details
-
getSequenceIdentifierFor
public Optional<Object> getSequenceIdentifierFor(@Nonnull EventMessage event, @Nonnull ProcessingContext context) Description copied from interface:SequencingPolicyReturns the sequence identifier for the givenevent. When two events have the same identifier (as defined by their equals method), they will be executed sequentially. AOptional#empty()value indicates that there are no sequencing requirements for the handling of this event.The
Optional#empty()should ONLY be returned when the policy cannot determine a sequence identifier for the given event. This typically happens when the policy is not applicable for the specific event type. WhenOptional#empty()is returned, it is up to the component using this policy to provide a default behavior, use another policy, or throw an exception / react in any other way - as appropriate.- Specified by:
getSequenceIdentifierForin interfaceSequencingPolicy- Parameters:
event- The event for which to get the sequencing identifier.context- The processing context in which the event is being handled. This instance of theProcessingContextdoesn't allow you to register phases actions by for exampleProcessingLifecycle.on(org.axonframework.messaging.core.unitofwork.ProcessingLifecycle.Phase, java.util.function.Function<org.axonframework.messaging.core.unitofwork.ProcessingContext, java.util.concurrent.CompletableFuture<?>>)or retrieving components byApplicationContext.component(java.lang.Class<C>).- Returns:
- A sequence identifier for the given event, or
Optional#empty()if this policy cannot determine a sequence identifier for the given event.
-