use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class DefaultSchedulerManager method updateTask.
@Override
public Task updateTask(String taskId, Task newTask) {
Assert.notNull(taskId);
Task task = getTask(taskId);
String description = newTask.getDescription();
if (StringUtils.isEmpty(description)) {
description = AutowireHelper.getBeanDescription(task.getTaskType());
}
try {
// job properties
JobDataMap jobDataMap = new JobDataMap();
newTask.getParameters().entrySet().forEach(entry -> {
jobDataMap.put(entry.getKey(), entry.getValue());
});
jobDataMap.put(SchedulableTaskExecutor.PARAMETER_INSTANCE_ID, newTask.getInstanceId());
// validate init method
try {
LongRunningTaskExecutor<?> taskExecutor = AutowireHelper.createBean(task.getTaskType());
taskExecutor.init(jobDataMap);
} catch (ResultCodeException ex) {
throw ex;
} catch (Exception ex) {
throw new ResultCodeException(CoreResultCode.LONG_RUNNING_TASK_INIT_FAILED, ImmutableMap.of("taskId", taskId, "taskType", task.getTaskType().getSimpleName(), "instanceId", task.getInstanceId()), ex);
}
// create job detail - job definition
JobDetail jobDetail = JobBuilder.newJob().withIdentity(task.getId(), DEFAULT_GROUP_NAME).withDescription(description).ofType(task.getTaskType()).usingJobData(jobDataMap).storeDurably().build();
// add job
scheduler.addJob(jobDetail, true);
//
LOG.debug("Job '{}' ({}) was updated and registered", task.getId(), task.getTaskType());
//
} catch (org.quartz.SchedulerException ex) {
throw new SchedulerException(CoreResultCode.SCHEDULER_CREATE_TASK_FAILED, ex);
}
return getTask(task.getId());
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class DefaultSchedulerManager method getSupportedTasks.
@Override
@SuppressWarnings({ "unchecked" })
public List<Task> getSupportedTasks() {
return context.getBeansOfType(SchedulableTaskExecutor.class).entrySet().stream().map(entry -> {
SchedulableTaskExecutor<?> taskExecutor = entry.getValue();
Task task = new Task();
task.setId(entry.getKey());
task.setModule(taskExecutor.getModule());
task.setTaskType((Class<? extends SchedulableTaskExecutor<?>>) taskExecutor.getClass());
task.setDescription(AutowireHelper.getBeanDescription(entry.getKey()));
for (String parameterName : taskExecutor.getPropertyNames()) {
task.getParameters().put(parameterName, null);
}
return task;
}).sorted(Comparator.comparing(task -> task.getTaskType().getSimpleName(), Comparator.naturalOrder())).collect(Collectors.toList());
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class DefaultSchedulerManagerIntegrationTest method createDryRunTask.
private Task createDryRunTask(String result) {
Task task = new Task();
task.setInstanceId(configurationService.getInstanceId());
task.setTaskType(TestSchedulableDryRunTask.class);
task.setDescription("test");
task.getParameters().put(RESULT_PROPERTY, result);
//
return manager.createTask(task);
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class DefaultSchedulerManagerIntegrationTest method testCreateAndDeleteCronTrigger.
@Test
public void testCreateAndDeleteCronTrigger() {
Task task = createTask(null);
//
CronTaskTrigger trigger = new CronTaskTrigger();
trigger.setTaskId(task.getId());
trigger.setCron("5 * * * * ?");
//
manager.createTrigger(task.getId(), trigger);
//
task = manager.getTask(task.getId());
//
assertEquals(1, task.getTriggers().size());
assertEquals(CronTaskTrigger.class, task.getTriggers().get(0).getClass());
assertEquals(task.getId(), task.getTriggers().get(0).getTaskId());
//
manager.deleteTrigger(task.getId(), task.getTriggers().get(0).getId());
//
task = manager.getTask(task.getId());
assertEquals(0, task.getTriggers().size());
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class DefaultSchedulerManagerIntegrationTest method testDependentTaskNoExecutionAfterInitiatorFails.
@Test
public void testDependentTaskNoExecutionAfterInitiatorFails() throws Exception {
helper.setConfigurationValue(SchedulerConfiguration.PROPERTY_TASK_ASYNCHRONOUS_ENABLED, false);
try {
LongRunningTaskExecuteDependentProcessor processor = context.getBean(LongRunningTaskExecuteDependentProcessor.class);
//
IdmLongRunningTaskFilter filter = new IdmLongRunningTaskFilter();
filter.setOperationState(OperationState.CREATED);
filter.setTaskType(TestSchedulableTask.class.getCanonicalName());
filter.setFrom(new DateTime());
List<IdmLongRunningTaskDto> createdLrts = longRunningTaskService.find(filter, null).getContent();
Assert.assertEquals(0L, createdLrts.size());
//
Task task = createTask("dependent-task-initiator");
DependentTaskTrigger trigger = new DependentTaskTrigger();
trigger.setInitiatorTaskId(task.getId());
//
// initiator = dependent task => circular execution
manager.createTrigger(task.getId(), trigger);
manager.runTask(task.getId());
helper.waitForResult(getContinueFunction());
createdLrts = longRunningTaskService.find(filter, null).getContent();
Assert.assertEquals(1L, createdLrts.size());
IdmLongRunningTaskDto lrt = createdLrts.get(0);
lrt.setResult(new OperationResult(OperationState.EXCEPTION));
// not executed
EventResult<IdmLongRunningTaskDto> result = processor.process(new LongRunningTaskEvent(LongRunningTaskEventType.END, lrt));
Assert.assertEquals(OperationState.NOT_EXECUTED, result.getResults().get(0).getState());
lrt.setResult(new OperationResult(OperationState.BLOCKED));
result = processor.process(new LongRunningTaskEvent(LongRunningTaskEventType.END, lrt));
Assert.assertEquals(OperationState.NOT_EXECUTED, result.getResults().get(0).getState());
lrt.setResult(new OperationResult(OperationState.NOT_EXECUTED));
result = processor.process(new LongRunningTaskEvent(LongRunningTaskEventType.END, lrt));
Assert.assertEquals(OperationState.NOT_EXECUTED, result.getResults().get(0).getState());
lrt.setResult(new OperationResult(OperationState.CANCELED));
result = processor.process(new LongRunningTaskEvent(LongRunningTaskEventType.END, lrt));
Assert.assertEquals(OperationState.NOT_EXECUTED, result.getResults().get(0).getState());
lrt.setResult(new OperationResult(OperationState.CREATED));
result = processor.process(new LongRunningTaskEvent(LongRunningTaskEventType.END, lrt));
Assert.assertEquals(OperationState.NOT_EXECUTED, result.getResults().get(0).getState());
lrt.setResult(new OperationResult(OperationState.RUNNING));
result = processor.process(new LongRunningTaskEvent(LongRunningTaskEventType.END, lrt));
Assert.assertEquals(OperationState.NOT_EXECUTED, result.getResults().get(0).getState());
//
longRunningTaskManager.cancel(lrt.getId());
//
longRunningTaskService.find(filter, null).getContent();
// cancel - clean up
Assert.assertEquals(0L, longRunningTaskService.find(filter, null).getTotalElements());
} finally {
helper.setConfigurationValue(SchedulerConfiguration.PROPERTY_TASK_ASYNCHRONOUS_ENABLED, true);
}
}
Aggregations