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
.