@Override public long getLastFinished(ScheduledTask task) { EntityManager em = persistence.getEntityManager(); Query query = em.createQuery( "select max(e.finishTime) from sys$ScheduledExecution e where e.task.id = ?1") .setParameter(1, task.getId()); Date date = (Date) query.getFirstResult(); return date == null ? 0 : date.getTime(); }
@Override public boolean isLastExecutionFinished(ScheduledTask task, long now) { EntityManager em = persistence.getEntityManager(); Query query = em.createQuery( "select e.finishTime from sys$ScheduledExecution e where e.task.id = ?1 and e.startTime = ?2"); query.setParameter(1, task.getId()); query.setParameter(2, task.getLastStartTime()); List list = query.getResultList(); if (list.isEmpty() || list.get(0) == null) { // Execution finish was not registered for some reason, so using timeout value or just return false boolean result = task.getTimeout() != null && (task.getLastStart() + task.getTimeout() * 1000) <= now; if (result) log.trace(task + ": considered finished because of timeout"); else log.trace(task + ": not finished and not timed out"); return result; } Date date = (Date) list.get(0); log.trace("{} : finished at {}", task, date.getTime()); return true; }
throw new IllegalStateException( String.format("\"Defined by\" field has illegal value: %s. Task id: [%s].", task.getDefinedBy(), task.getId()));
@Override public void setActive(Set<ScheduledTask> tasks, boolean active) { try (Transaction tx = persistence.createTransaction()) { EntityManager em = persistence.getEntityManager(); for (ScheduledTask task : tasks) { ScheduledTask t = em.find(ScheduledTask.class, task.getId()); t.setActive(active); } tx.commit(); } }
@Override public void setActive(ScheduledTask task, boolean active) { Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); ScheduledTask t = em.find(ScheduledTask.class, task.getId()); t.setActive(active); tx.commit(); } finally { tx.end(); } }
protected ScheduledExecution registerExecutionStart(ScheduledTask task, long now) { if (!BooleanUtils.isTrue(task.getLogStart()) && !BooleanUtils.isTrue(task.getSingleton()) && task.getSchedulingType() != SchedulingType.FIXED_DELAY) return null; log.trace("{}: registering execution start", task); Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); ScheduledExecution execution = metadata.create(ScheduledExecution.class); execution.setTask(em.getReference(ScheduledTask.class, task.getId())); execution.setStartTime(new Date(now)); execution.setServer(serverInfo.getServerId()); em.persist(execution); tx.commit(); return execution; } finally { tx.end(); } }