class TaskData {
int id;
String status;
}
class TaskDbScheduler() {
private final SchedulerClient schedulerClient;
private final OneTimeTask<TaskData> oenTimeTask;
public TaskInstance<TaskData> schedule(TaskData taskData) {
Instant nextExecutionTime = taskData.getNextAttempt();
TaskInstance<TaskData> instance =
oenTimeTask.instance(taskData.getId()(), taskData);
boolean scheduled = schedulerClient.scheduleIfNotExists(instance, nextExecutionTime);
return instance;
}
}
class TaskHandler{
TaskDbScheduler scheduler; // causes circular dependency
void handle(TaskInstance<TaskData> taskInstance, ExecutionContext executionContext) {
var read = xyzservice.run(taskInstance.getData());
if(read == fail) {
// reschedule it after two seconds, with taskdata.toBuilder().status("delayed").build();
}
}
}
I am using db-scheduler 15.3.0.
I am trying to reschedule a task within the handler on some conditions but it always end up in a circular dependency error. Using SchedulerClient directly in the handler also does not provide the functionality to alter taskdata. Is there a way to reschdule a task this way?
TaskHandlerreferences classTaskDbScheduler, however I don't see whether classTaskDbSchedulerreferences classTaskHandler. Did I miss something?