java.lang.Object
org.axonframework.messaging.core.sequencing.FallbackSequencingPolicy<E,M>
- Type Parameters:
E- the type of exception to catch and handleM- the type of message to sequence
- All Implemented Interfaces:
SequencingPolicy<M>
public class FallbackSequencingPolicy<E extends Exception,M extends Message>
extends Object
implements SequencingPolicy<M>
Implementation of
SequencingPolicy that provides exception-based fallback behavior. When the delegate policy
throws a specified exception type, this implementation will catch it and delegate to a fallback policy.
This allows for composing sequencing strategies where certain policies might fail with exceptions for unsupported message types, falling back to more generic approaches when exceptions occur.
- Since:
- 5.0.0
- Author:
- Mateusz Nowak
-
Constructor Summary
ConstructorsConstructorDescriptionFallbackSequencingPolicy(SequencingPolicy<? super M> delegate, SequencingPolicy<? super M> fallback, Class<E> exceptionType) Initializes a new instance with the givendelegatepolicy,fallbackpolicy, andexceptionTypeto catch. -
Method Summary
Modifier and TypeMethodDescriptionsequenceIdentifierFor(M message, ProcessingContext context) Returns the sequence identifier for the givenmessage.
-
Constructor Details
-
FallbackSequencingPolicy
public FallbackSequencingPolicy(SequencingPolicy<? super M> delegate, SequencingPolicy<? super M> fallback, Class<E> exceptionType) Initializes a new instance with the givendelegatepolicy,fallbackpolicy, andexceptionTypeto catch.- Parameters:
delegate- The primary policy to attempt sequence identification with first, notnull.fallback- The fallback policy to use when the delegate throws the specified exception, notnull.exceptionType- The type of exception to catch from the delegate policy, notnull.- Throws:
NullPointerException- When any of the parameters isnull.
-
-
Method Details
-
sequenceIdentifierFor
Description copied from interface:SequencingPolicyReturns the sequence identifier for the givenmessage. When two messages 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 message.The
Optional#empty()should only be returned when the policy cannot determine a sequence identifier for the given message. This typically happens when the policy is not applicable for the specific message type. WhenOptional#empty()is returned, it is up to the component using this policy to provide a default behavior, use another policy, throw an exception or react in any other way - as appropriate.- Specified by:
sequenceIdentifierForin interfaceSequencingPolicy<E extends Exception>- Parameters:
message- the message for which to get the sequencing identifier.context- the processing context in which the message is being handled. There might be limitations to the instance of theProcessingContextdepending on where theSequencingPolicyis being applied. When handling Events for example, 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 message, or
Optional#empty()if this policy cannot determine a sequence identifier for the given message.
-