Search in sources :

Example 1 with PersistentTask

use of org.olat.core.commons.services.taskexecutor.model.PersistentTask in project OpenOLAT by OpenOLAT.

the class TaskExecutorManagerImpl method execute.

@Override
public void execute(Runnable task) {
    // wrap call to the task here to catch all errors that are may not catched yet in the task itself
    // like outOfMemory or other system errors.
    Task persistentTask = null;
    if (task instanceof LongRunnable) {
        persistentTask = persistentTaskDao.createTask(UUID.randomUUID().toString(), (LongRunnable) task);
        dbInstance.commit();
    } else {
        execute(task, persistentTask, (task instanceof Sequential));
    }
}
Also used : LongRunnable(org.olat.core.commons.services.taskexecutor.LongRunnable) Task(org.olat.core.commons.services.taskexecutor.Task) PersistentTask(org.olat.core.commons.services.taskexecutor.model.PersistentTask) Sequential(org.olat.core.commons.services.taskexecutor.Sequential)

Example 2 with PersistentTask

use of org.olat.core.commons.services.taskexecutor.model.PersistentTask in project OpenOLAT by OpenOLAT.

the class TaskExecutorManagerImpl method processTaskToDo.

protected void processTaskToDo() {
    try {
        List<Long> todos = persistentTaskDao.tasksToDo();
        for (Long todo : todos) {
            PersistentTask task = persistentTaskDao.loadTaskById(todo);
            Runnable runnable = persistentTaskDao.deserializeTask(task);
            PersistentTaskRunnable command = new PersistentTaskRunnable(todo);
            execute(command, null, (runnable instanceof Sequential));
        }
    } catch (Exception e) {
        // ups, something went completely wrong! We log this but continue next time
        log.error("Error while executing task todo", e);
    }
}
Also used : Sequential(org.olat.core.commons.services.taskexecutor.Sequential) PersistentTaskRunnable(org.olat.core.commons.services.taskexecutor.model.PersistentTaskRunnable) DBSecureRunnable(org.olat.core.commons.services.taskexecutor.model.DBSecureRunnable) PersistentTaskRunnable(org.olat.core.commons.services.taskexecutor.model.PersistentTaskRunnable) TaskAwareRunnable(org.olat.core.commons.services.taskexecutor.TaskAwareRunnable) LongRunnable(org.olat.core.commons.services.taskexecutor.LongRunnable) PersistentTask(org.olat.core.commons.services.taskexecutor.model.PersistentTask) AssertException(org.olat.core.logging.AssertException) SchedulerException(org.quartz.SchedulerException)

Example 3 with PersistentTask

use of org.olat.core.commons.services.taskexecutor.model.PersistentTask in project OpenOLAT by OpenOLAT.

the class PersistentTaskDAO method delete.

public boolean delete(Task task) {
    PersistentTask reloadedTask = dbInstance.getCurrentEntityManager().find(PersistentTask.class, task.getKey(), LockModeType.PESSIMISTIC_WRITE);
    dbInstance.getCurrentEntityManager().createQuery("delete from extaskmodifier taskmod where taskmod.task.key=:taskKey").setParameter("taskKey", task.getKey()).executeUpdate();
    dbInstance.getCurrentEntityManager().remove(reloadedTask);
    dbInstance.commit();
    return true;
}
Also used : PersistentTask(org.olat.core.commons.services.taskexecutor.model.PersistentTask)

Example 4 with PersistentTask

use of org.olat.core.commons.services.taskexecutor.model.PersistentTask in project OpenOLAT by OpenOLAT.

the class PersistentTaskDAO method pickTaskForRun.

public PersistentTask pickTaskForRun(Long taskKey) {
    PersistentTask task = dbInstance.getCurrentEntityManager().find(PersistentTask.class, taskKey, LockModeType.PESSIMISTIC_WRITE);
    if (task != null) {
        if (TaskStatus.newTask.equals(task.getStatus())) {
            task.setStatus(TaskStatus.inWork);
            task.setExecutorNode(Integer.toString(WebappHelper.getNodeId()));
            task.setExecutorBootId(WebappHelper.getBootId());
            task = dbInstance.getCurrentEntityManager().merge(task);
        } else if (TaskStatus.inWork.equals(task.getStatus())) {
            task.setExecutorNode(Integer.toString(WebappHelper.getNodeId()));
            task.setExecutorBootId(WebappHelper.getBootId());
            task = dbInstance.getCurrentEntityManager().merge(task);
        } else if (TaskStatus.edition.equals(task.getStatus())) {
            task = null;
        }
    }
    dbInstance.commit();
    return task;
}
Also used : PersistentTask(org.olat.core.commons.services.taskexecutor.model.PersistentTask)

Example 5 with PersistentTask

use of org.olat.core.commons.services.taskexecutor.model.PersistentTask in project OpenOLAT by OpenOLAT.

the class PersistentTaskDAOTest method todo_workflow_withModifiers.

@Test
public void todo_workflow_withModifiers() {
    String tname = UUID.randomUUID().toString();
    persistentTaskDao.createTask(tname, new DummyTask());
    dbInstance.commitAndCloseSession();
    RepositoryEntry re = JunitTestHelper.createAndPersistRepositoryEntry();
    Identity creator = JunitTestHelper.createAndPersistIdentityAsUser("extask-12-" + UUID.randomUUID().toString());
    Identity modifier1 = JunitTestHelper.createAndPersistIdentityAsUser("extask-13-" + UUID.randomUUID().toString());
    Identity modifier2 = JunitTestHelper.createAndPersistIdentityAsUser("extask-14-" + UUID.randomUUID().toString());
    Identity modifier3 = JunitTestHelper.createAndPersistIdentityAsUser("extask-15-" + UUID.randomUUID().toString());
    String taskName = UUID.randomUUID().toString();
    PersistentTask task = persistentTaskDao.createTask(taskName, new DummyTask(), creator, re.getOlatResource(), "test", null);
    Assert.assertNotNull(task);
    dbInstance.commitAndCloseSession();
    // updates
    persistentTaskDao.updateTask(task, new DummyTask(), modifier1, null);
    dbInstance.commitAndCloseSession();
    persistentTaskDao.updateTask(task, new DummyTask(), modifier2, null);
    dbInstance.commitAndCloseSession();
    persistentTaskDao.updateTask(task, new DummyTask(), modifier3, null);
    dbInstance.commitAndCloseSession();
    persistentTaskDao.updateTask(task, new DummyTask(), modifier1, null);
    dbInstance.commitAndCloseSession();
    int count = 0;
    List<Long> todos = persistentTaskDao.tasksToDo();
    for (Long todo : todos) {
        PersistentTask taskToDo = persistentTaskDao.pickTaskForRun(todo);
        persistentTaskDao.taskDone(taskToDo);
        count++;
    }
    dbInstance.commitAndCloseSession();
    Assert.assertTrue(count > 0);
    List<Long> nothingTodos = persistentTaskDao.tasksToDo();
    Assert.assertNotNull(nothingTodos);
    Assert.assertFalse(nothingTodos.contains(task));
}
Also used : RepositoryEntry(org.olat.repository.RepositoryEntry) Identity(org.olat.core.id.Identity) PersistentTask(org.olat.core.commons.services.taskexecutor.model.PersistentTask) Test(org.junit.Test)

Aggregations

PersistentTask (org.olat.core.commons.services.taskexecutor.model.PersistentTask)56 Test (org.junit.Test)36 Identity (org.olat.core.id.Identity)24 RepositoryEntry (org.olat.repository.RepositoryEntry)24 Date (java.util.Date)14 LongRunnable (org.olat.core.commons.services.taskexecutor.LongRunnable)4 Sequential (org.olat.core.commons.services.taskexecutor.Sequential)4 EntityNotFoundException (javax.persistence.EntityNotFoundException)2 Task (org.olat.core.commons.services.taskexecutor.Task)2 TaskAwareRunnable (org.olat.core.commons.services.taskexecutor.TaskAwareRunnable)2 DBSecureRunnable (org.olat.core.commons.services.taskexecutor.model.DBSecureRunnable)2 PersistentTaskModifier (org.olat.core.commons.services.taskexecutor.model.PersistentTaskModifier)2 PersistentTaskRunnable (org.olat.core.commons.services.taskexecutor.model.PersistentTaskRunnable)2 AssertException (org.olat.core.logging.AssertException)2 SchedulerException (org.quartz.SchedulerException)2