Class DbSchedulerDeadlineManager
- All Implemented Interfaces:
DeadlineManager
DeadlineManager that delegates scheduling and triggering to a db-scheduler
Scheduler.
Each deadline is stored as an instance of the task named AxonDeadline, whose data is a
DbSchedulerBinaryDeadlineDetails or, without useBinaryPojo, a
DbSchedulerHumanReadableDeadlineDetails. The scheduler has to know the matching task, from
binaryTask(Supplier) or humanReadableTask(Supplier). The details keep the layout of Axon Framework
4.13, so that tasks scheduled by Axon Framework 4 fire here, and tasks scheduled here fire on Axon Framework 4 nodes
sharing the scheduler's table. The deadline's 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 fails the task, which db-scheduler then retries.
The configuration calls start() when the application starts, which starts the scheduler unless the
startScheduler setting leaves that to the application. It calls
shutdown() when the application stops, which stops the scheduler unless the
stopScheduler setting leaves that to the application. A manager that is not
part of the configuration is started and shut down by the application.
DbSchedulerDeadlineManager deadlineManager =
DbSchedulerDeadlineManager.builder()
.scheduler(scheduler)
.scopeAwareProvider(scopeAwareProvider)
.unitOfWorkFactory(configuration.getComponent(UnitOfWorkFactory.class))
.converter(new JacksonConverter())
.build();
- Since:
- 4.8.0
- Author:
- Gerard Klijs, Jakob Hatzl
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder class to instantiate aDbSchedulerDeadlineManager. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedInstantiate aDbSchedulerDeadlineManagerbased on the fields contained in theDbSchedulerDeadlineManager.Builder. -
Method Summary
Modifier and TypeMethodDescriptionstatic com.github.kagkarlsson.scheduler.task.Task<DbSchedulerBinaryDeadlineDetails> binaryTask(Supplier<DbSchedulerDeadlineManager> deadlineManagerSupplier) builder()Instantiate a Builder to be able to create aDbSchedulerDeadlineManager.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.static com.github.kagkarlsson.scheduler.task.Task<DbSchedulerHumanReadableDeadlineDetails> humanReadableTask(Supplier<DbSchedulerDeadlineManager> deadlineManagerSupplier) schedule(Instant triggerDateTime, String deadlineName, @Nullable Object messageOrPayload, ScopeDescriptor deadlineScope) Schedules a deadline at giventriggerDateTimewith provided context.voidshutdown()Shuts down this deadline manager.voidstart()Will start theSchedulerdepending on its current state and the value ofstartScheduler.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
-
DbSchedulerDeadlineManager
Instantiate aDbSchedulerDeadlineManagerbased on the fields contained in theDbSchedulerDeadlineManager.Builder.Will assert that the
Scheduler,ScopeAwareProvider,UnitOfWorkFactoryandConverterare notnull, and will throw anAxonConfigurationExceptionif any of them isnull.- Parameters:
builder- theDbSchedulerDeadlineManager.Builderused to instantiate aDbSchedulerDeadlineManagerinstance
-
-
Method Details
-
builder
Instantiate a Builder to be able to create aDbSchedulerDeadlineManager.The
useBinaryPojo,startSchedulerandstopSchedulersettings are defaulted totrue. TheScheduler,ScopeAwareProvider,UnitOfWorkFactoryandConverterare hard requirements and as such should be provided.- Returns:
- a Builder to be able to create a
DbSchedulerDeadlineManager
-
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
-
binaryTask
public static com.github.kagkarlsson.scheduler.task.Task<DbSchedulerBinaryDeadlineDetails> binaryTask(Supplier<DbSchedulerDeadlineManager> deadlineManagerSupplier) Gives theTaskusingDbSchedulerBinaryDeadlineDetailsto execute a deadline via aScheduler. To be able to execute the task, this should be added to the task list, used to create the scheduler.- Parameters:
deadlineManagerSupplier- aSupplierof aDbSchedulerDeadlineManager, preferably one using dependency injection, or aDbSchedulerDeadlineManagerSupplierwhere that is not available- Returns:
- a
Taskto execute a deadline
-
humanReadableTask
public static com.github.kagkarlsson.scheduler.task.Task<DbSchedulerHumanReadableDeadlineDetails> humanReadableTask(Supplier<DbSchedulerDeadlineManager> deadlineManagerSupplier) Gives theTaskusingDbSchedulerHumanReadableDeadlineDetailsto execute a deadline via aScheduler. To be able to execute the task, this should be added to the task list, used to create the scheduler.- Parameters:
deadlineManagerSupplier- aSupplierof aDbSchedulerDeadlineManager, preferably one using dependency injection, or aDbSchedulerDeadlineManagerSupplierwhere that is not available- Returns:
- a
Taskto execute a deadline
-
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.The given
scopeis converted to its stored form, and compared with the stored form of each scheduled deadline's scope. The converter therefore has to produce exactly the form the stored scopes were written in. The stored class name of the scope is compared as well, as descriptors of different classes, such as anAggregateScopeDescriptorand aSagaScopeDescriptorof equal type and identifier, can have the same stored form. Axon Framework 4 compared the stored form only, and cancelled both.- Parameters:
deadlineName- aStringrepresenting the name of the deadlines to cancelscope- aScopeDescriptordescribing the scope within which the deadline was scheduled
-
start
public void start()Will start theSchedulerdepending on its current state and the value ofstartScheduler. -
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.Stops the
Scheduleronce, unlessstopSchedulerisfalse.
-