Class QuartzDeadlineManager

java.lang.Object
org.axonframework.deadline.AbstractDeadlineManager
org.axonframework.deadline.quartz.QuartzDeadlineManager
All Implemented Interfaces:
DeadlineManager

public class QuartzDeadlineManager extends AbstractDeadlineManager
Implementation of 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
  • Constructor Details

  • Method Details

    • builder

      public static QuartzDeadlineManager.Builder builder()
      Instantiate a Builder to be able to create a QuartzDeadlineManager.

      The refire policy defaults to refiring immediately for every failure that is not an AxonNonTransientException. The Scheduler, ScopeAwareProvider, UnitOfWorkFactory and Converter are 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: DeadlineManager
      Schedules a deadline at given triggerDateTime with provided context. The returned scheduleId and provided deadlineName combination can be used to cancel the scheduled deadline.

      The given messageOrPayload may be any object, as well as a DeadlineMessage. In the latter case, the instance provided is the donor for the payload and Metadata of the actual deadline being used. In the former case, the given messageOrPayload will be wrapped as the payload of a DeadlineMessage.

      Parameters:
      triggerDateTime - a Instant denoting the moment to trigger the deadline handling
      deadlineName - a String representing the name of the deadline to schedule
      messageOrPayload - a Message or payload for a message as an Object
      deadlineScope - a ScopeDescriptor describing the scope within which the deadline was scheduled
      Returns:
      the scheduleId as a String to use when cancelling the schedule
    • cancelSchedule

      public void cancelSchedule(String deadlineName, String scheduleId)
      Description copied from interface: DeadlineManager
      Cancels the deadline corresponding to the given deadlineName / scheduleId combination. This method has no impact on deadlines which have already been triggered.
      Parameters:
      deadlineName - a String representing the name of the deadline to cancel
      scheduleId - the String denoting the scheduled deadline to cancel
    • cancelAll

      public void cancelAll(String deadlineName)
      Description copied from interface: DeadlineManager
      Cancels all the deadlines corresponding to the given deadlineName. This method has no impact on deadlines which have already been triggered.
      Parameters:
      deadlineName - a String representing the name of the deadlines to cancel
    • cancelAllWithinScope

      public void cancelAllWithinScope(String deadlineName, ScopeDescriptor scope)
      Cancels all deadlines corresponding to the given deadlineName and scope. 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 scope through equals. The given scope is first converted to its stored form and back, so that both sides lose the same type information, such as the UUID type of an identifier that JSON stores as a string.

      Parameters:
      deadlineName - a String representing the name of the deadlines to cancel
      scope - a ScopeDescriptor describing the scope within which the deadline was scheduled
    • shutdown

      public void shutdown()
      Shuts down this deadline manager.

      The configuration calls this method for every DeadlineManager it holds when the application shuts down, through the DeadlineManagerLifecycleConfigurationEnhancer. 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 Scheduler once, waiting for running jobs to complete. Every further call has no effect, as not every Scheduler implementation allows a repeated shutdown.