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));
}
}
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);
}
}
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;
}
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;
}
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));
}
Aggregations