Adding a Custom Evaluation Task Manager

Follow these steps to define your own implementation of the IEvaluationTaskManager interface:

1. Create the Spring Bean

Create a class that implements the IEvaluationTaskManager interface. You will need to implement the following methods:

public interface IEvaluationTaskManager {

  /**
   * Create appropriate {@link java.util.concurrent.Future} given a {@code limitStructureDTO}
   *
   * @param limitStructureDTO the {@link LimitStructureDTO} to evaluate.
   * @param evaluationService the {@link IEvaluationService} to evaluate the limit structure
   */
  void addChronFutureJob(LimitStructureDTO limitStructureDTO, IEvaluationService evaluationService);

  /**
   * Cancel ScheduledFuture for given KpiTaskKey and remove from futureAlertTasks HashMap.
   *
   * @param futureKey KpiTaskKey.
   */
  boolean removeChronFutureJob(String futureKey);

  /**
   * Checks if {@link ScheduledFuture } has been created for given kpiKey
   *
   * @param futureKey key
   * @return true if it exists, false otherwise.
   */
  boolean containsChronFutureJob(String futureKey);

  /**
   * Wait for the futures for the running {@code limitEvaluationTasks} to complete
   *
   * @param limitEvaluationTasks - the limit tasks to wait for
   */
  void waitForLimitTasks(Collection<LimitEvaluationTask> limitEvaluationTasks);

  /**
   * Wait for the futures for the running {@code structureTasks} to complete
   *
   * @param structureTasks - the structure tasks to wait for
   */
  void waitForLimitStructureTasks(Collection<LimitStructureEvaluationTask> structureTasks);

  /**
   * Add the future for a limit task to the manager
   *
   * @param limitTaskKey - the key of the limit task
   * @param future - the submitted future of the limit task
   */
  void addLimitTask(String limitTaskKey, Future future);

  /**
   * Add the future for a structure task to the manager
   *
   * @param structureTaskKey - the key of the structure task
   * @param future - the submitted future of the structure task
   */
  void addLimitStructureTask(String structureTaskKey, Future future);
}

note

Make sure to include the @Primary annotation in your class, which tells Spring to use your implementation instead of DefaultEvaluationTaskManager.

The waitFor*Tasks methods are responsible for blocking the current thread until all running tasks have completed. The other methods are used to add/remove futures being managed by the IEvaluationTaskManager.

2. Import the Spring Bean

Once the bean is created, import it into the project. See Importing Spring Beans into the Project on how to do this. Once done, Spring injects it in all classes that use IEvaluationService.