Search in sources :

Example 21 with Task

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());
}
Also used : Task(eu.bcvsolutions.idm.core.scheduler.api.dto.Task) JobDataMap(org.quartz.JobDataMap) JobDetail(org.quartz.JobDetail) SchedulerException(eu.bcvsolutions.idm.core.scheduler.exception.SchedulerException) ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) InvalidCronExpressionException(eu.bcvsolutions.idm.core.scheduler.exception.InvalidCronExpressionException) ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) CoreException(eu.bcvsolutions.idm.core.api.exception.CoreException) SchedulerException(eu.bcvsolutions.idm.core.scheduler.exception.SchedulerException) DryRunNotSupportedException(eu.bcvsolutions.idm.core.scheduler.api.exception.DryRunNotSupportedException)

Example 22 with Task

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());
}
Also used : Task(eu.bcvsolutions.idm.core.scheduler.api.dto.Task) SchedulableTaskExecutor(eu.bcvsolutions.idm.core.scheduler.api.service.SchedulableTaskExecutor)

Example 23 with Task

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);
}
Also used : FutureTask(java.util.concurrent.FutureTask) Task(eu.bcvsolutions.idm.core.scheduler.api.dto.Task) LongRunningFutureTask(eu.bcvsolutions.idm.core.scheduler.api.dto.LongRunningFutureTask)

Example 24 with 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());
}
Also used : FutureTask(java.util.concurrent.FutureTask) Task(eu.bcvsolutions.idm.core.scheduler.api.dto.Task) LongRunningFutureTask(eu.bcvsolutions.idm.core.scheduler.api.dto.LongRunningFutureTask) CronTaskTrigger(eu.bcvsolutions.idm.core.scheduler.api.dto.CronTaskTrigger) AbstractIntegrationTest(eu.bcvsolutions.idm.test.api.AbstractIntegrationTest) Test(org.junit.Test)

Example 25 with Task

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);
    }
}
Also used : IdmLongRunningTaskDto(eu.bcvsolutions.idm.core.scheduler.api.dto.IdmLongRunningTaskDto) FutureTask(java.util.concurrent.FutureTask) Task(eu.bcvsolutions.idm.core.scheduler.api.dto.Task) LongRunningFutureTask(eu.bcvsolutions.idm.core.scheduler.api.dto.LongRunningFutureTask) LongRunningTaskExecuteDependentProcessor(eu.bcvsolutions.idm.core.scheduler.event.processor.LongRunningTaskExecuteDependentProcessor) DependentTaskTrigger(eu.bcvsolutions.idm.core.scheduler.api.dto.DependentTaskTrigger) IdmLongRunningTaskFilter(eu.bcvsolutions.idm.core.scheduler.api.dto.filter.IdmLongRunningTaskFilter) OperationResult(eu.bcvsolutions.idm.core.api.entity.OperationResult) LongRunningTaskEvent(eu.bcvsolutions.idm.core.scheduler.api.event.LongRunningTaskEvent) DateTime(org.joda.time.DateTime) AbstractIntegrationTest(eu.bcvsolutions.idm.test.api.AbstractIntegrationTest) Test(org.junit.Test)

Aggregations

Task (eu.bcvsolutions.idm.core.scheduler.api.dto.Task)26 LongRunningFutureTask (eu.bcvsolutions.idm.core.scheduler.api.dto.LongRunningFutureTask)13 FutureTask (java.util.concurrent.FutureTask)13 AbstractIntegrationTest (eu.bcvsolutions.idm.test.api.AbstractIntegrationTest)12 Test (org.junit.Test)12 CronTaskTrigger (eu.bcvsolutions.idm.core.scheduler.api.dto.CronTaskTrigger)6 DependentTaskTrigger (eu.bcvsolutions.idm.core.scheduler.api.dto.DependentTaskTrigger)6 IdmLongRunningTaskDto (eu.bcvsolutions.idm.core.scheduler.api.dto.IdmLongRunningTaskDto)5 IdmLongRunningTaskFilter (eu.bcvsolutions.idm.core.scheduler.api.dto.filter.IdmLongRunningTaskFilter)5 SchedulableTaskExecutor (eu.bcvsolutions.idm.core.scheduler.api.service.SchedulableTaskExecutor)5 SimpleTaskTrigger (eu.bcvsolutions.idm.core.scheduler.api.dto.SimpleTaskTrigger)3 AbstractSysSyncConfigDto (eu.bcvsolutions.idm.acc.dto.AbstractSysSyncConfigDto)2 SysSyncContractConfigDto (eu.bcvsolutions.idm.acc.dto.SysSyncContractConfigDto)2 SysSyncLogDto (eu.bcvsolutions.idm.acc.dto.SysSyncLogDto)2 CoreException (eu.bcvsolutions.idm.core.api.exception.CoreException)2 AbstractTaskTrigger (eu.bcvsolutions.idm.core.scheduler.api.dto.AbstractTaskTrigger)2 IdmScheduledTaskDto (eu.bcvsolutions.idm.core.scheduler.api.dto.IdmScheduledTaskDto)2 DateTime (org.joda.time.DateTime)2 JobDetail (org.quartz.JobDetail)2 ImmutableMap (com.google.common.collect.ImmutableMap)1