Class QuartzDeadlineManager
- All Implemented Interfaces:
DeadlineManager
DeadlineManager that delegates scheduling and triggering to a Quartz Scheduler.
Each deadline is stored as a Quartz job of type DeadlineJob, in the job group named after the deadline. The
job data keeps the layout of Axon Framework 4.13, so that jobs scheduled by Axon Framework 4 fire here, and jobs
scheduled here fire on Axon Framework 4 nodes sharing the scheduler's store. The payload, metadata and scope
descriptor are converted with the configured Converter, which has to match the serializer the Axon Framework
4 deadline manager used.
A fired deadline runs in a unit of work from the configured UnitOfWorkFactory, with the registered handler
interceptors around its delivery to the ScopeAware components of the
ScopeAwareProvider. A failing delivery is refired immediately, unless the
refire policy decides otherwise.
QuartzDeadlineManager deadlineManager =
QuartzDeadlineManager.builder()
.scheduler(scheduler)
.scopeAwareProvider(scopeAwareProvider)
.unitOfWorkFactory(configuration.getComponent(UnitOfWorkFactory.class))
.converter(new JacksonConverter())
.build();
- Since:
- 3.3
- Author:
- Milan Savic, Steven van Beelen, Jakob Hatzl
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder class to instantiate aQuartzDeadlineManager. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedInstantiate aQuartzDeadlineManagerbased on the fields contained in theQuartzDeadlineManager.Builder. -
Method Summary
Modifier and TypeMethodDescriptionbuilder()Instantiate a Builder to be able to create aQuartzDeadlineManager.voidCancels all the deadlines corresponding to the givendeadlineName.voidcancelAllWithinScope(String deadlineName, ScopeDescriptor scope) Cancels all deadlines corresponding to the givendeadlineNameandscope.voidcancelSchedule(String deadlineName, String scheduleId) Cancels the deadline corresponding to the givendeadlineName/scheduleIdcombination.schedule(Instant triggerDateTime, String deadlineName, @Nullable Object messageOrPayload, ScopeDescriptor deadlineScope) Schedules a deadline at giventriggerDateTimewith provided context.voidshutdown()Shuts down this deadline manager.Methods inherited from class org.axonframework.deadline.AbstractDeadlineManager
asDeadlineMessage, dispatchInterceptors, handlerInterceptors, processDispatchInterceptors, registerDispatchInterceptor, registerHandlerInterceptor, runOnPrepareCommitOrNowMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.axonframework.deadline.DeadlineManager
cancelAllWithinScope, schedule, schedule, schedule, schedule, schedule
-
Constructor Details
-
QuartzDeadlineManager
Instantiate aQuartzDeadlineManagerbased on the fields contained in theQuartzDeadlineManager.Builder.Will assert that the
Scheduler,ScopeAwareProvider,UnitOfWorkFactoryandConverterare notnull, and will throw anAxonConfigurationExceptionif any of them isnull. The components theDeadlineJobneeds are tied to the Scheduler's context. If this initialization step fails, this will too result in an AxonConfigurationException.- Parameters:
builder- theQuartzDeadlineManager.Builderused to instantiate aQuartzDeadlineManagerinstance
-
-
Method Details
-
builder
Instantiate a Builder to be able to create aQuartzDeadlineManager.The refire policy defaults to refiring immediately for every failure that is not an
AxonNonTransientException. TheScheduler,ScopeAwareProvider,UnitOfWorkFactoryandConverterare hard requirements and as such should be provided.- Returns:
- a Builder to be able to create a
QuartzDeadlineManager
-
schedule
public String schedule(Instant triggerDateTime, String deadlineName, @Nullable Object messageOrPayload, ScopeDescriptor deadlineScope) Description copied from interface:DeadlineManagerSchedules a deadline at giventriggerDateTimewith provided context. The returnedscheduleIdand provideddeadlineNamecombination can be used to cancel the scheduled deadline.The given
messageOrPayloadmay be any object, as well as a DeadlineMessage. In the latter case, the instance provided is the donor for the payload andMetadataof the actual deadline being used. In the former case, the givenmessageOrPayloadwill be wrapped as the payload of aDeadlineMessage.- Parameters:
triggerDateTime- aInstantdenoting the moment to trigger the deadline handlingdeadlineName- aStringrepresenting the name of the deadline to schedulemessageOrPayload- aMessageor payload for a message as anObjectdeadlineScope- aScopeDescriptordescribing the scope within which the deadline was scheduled- Returns:
- the
scheduleIdas aStringto use when cancelling the schedule
-
cancelSchedule
Description copied from interface:DeadlineManagerCancels the deadline corresponding to the givendeadlineName/scheduleIdcombination. This method has no impact on deadlines which have already been triggered. -
cancelAll
Description copied from interface:DeadlineManagerCancels all the deadlines corresponding to the givendeadlineName. This method has no impact on deadlines which have already been triggered.- Parameters:
deadlineName- aStringrepresenting the name of the deadlines to cancel
-
cancelAllWithinScope
Cancels all deadlines corresponding to the givendeadlineNameandscope. This method has no impact on deadlines which have already been triggered.Cancels immediately, as Axon Framework 4 did, even when called while a Saga is handled. Each stored scope is converted back into its class and compared with the given
scopethroughequals. The given scope is first converted to its stored form and back, so that both sides lose the same type information, such as theUUIDtype of an identifier that JSON stores as a string.- Parameters:
deadlineName- aStringrepresenting the name of the deadlines to cancelscope- aScopeDescriptordescribing the scope within which the deadline was scheduled
-
shutdown
public void shutdown()Shuts down this deadline manager.The configuration calls this method for every
DeadlineManagerit holds when the application shuts down, through theDeadlineManagerLifecycleConfigurationEnhancer. As the method may be called more than once, for example by Spring as the destroy method it infers for a@Bean, implementations have to allow repeated calls: every call after the first has no effect.Shuts down the
Scheduleronce, waiting for running jobs to complete. Every further call has no effect, as not everySchedulerimplementation allows a repeated shutdown.
-