/** * Set a list of positional parameters on a query. * <p> * Values of type {@link java.util.Date} and {@link org.joda.time.base.AbstractInstant} * are recognized and set as a timestamp ({@link javax.persistence.TemporalType#TIMESTAMP}. */ public static <A extends Query> A setParams(A q, Object... params) { for (int i = 0; i < params.length; i++) { final Object value = params[i]; if (value instanceof Date) { q.setParameter(i + 1, (Date) value, TemporalType.TIMESTAMP); } if (value instanceof AbstractInstant) { q.setParameter(i + 1, ((AbstractInstant) value).toDate(), TemporalType.TIMESTAMP); } else { q.setParameter(i + 1, value); } } return q; }
/** * Set a list of positional parameters on a query. * * Values of type {@link java.util.Date} and {@link org.joda.time.base.AbstractInstant} * are recognized and set as a timestamp ({@link javax.persistence.TemporalType#TIMESTAMP}. */ public static <A extends Query> A setParams(A q, Object... params) { for (int i = 0; i < params.length; i++) { final Object value = params[i]; if (value instanceof Date) { q.setParameter(i + 1, (Date) value, TemporalType.TIMESTAMP); } if (value instanceof AbstractInstant) { q.setParameter(i + 1, ((AbstractInstant) value).toDate(), TemporalType.TIMESTAMP); } else { q.setParameter(i + 1, value); } } return q; }
private Date asDate(Object value) { if (value == null) { return null; } else if (value instanceof Date) { return (Date) value; } if (value instanceof LocalDate) { return ((LocalDate) value).toDate(); } else if (value instanceof LocalDateTime) { return ((LocalDateTime) value).toDate(); } else if (value instanceof AbstractInstant) { return ((AbstractInstant) value).toDate(); } return null; }
@Override public boolean reschedule(AbstractInstant newTime) { try { Trigger trigger = newTrigger().startAt(newTime.toDate()).build(); Date nextTriggerTime = scheduler.rescheduleJob(triggerKey, trigger); if (nextTriggerTime == null) { logger.debug("Scheduling a new job job '{}' because the original has already run", jobKey.toString()); JobDetail job = newJob(TimerExecutionJob.class).withIdentity(jobKey).usingJobData(dataMap).build(); TimerImpl.scheduler.scheduleJob(job, trigger); } this.triggerKey = trigger.getKey(); this.cancelled = false; this.terminated = false; return true; } catch (SchedulerException e) { logger.warn("An error occurred while rescheduling the job '{}': {}", jobKey.toString(), e.getMessage()); return false; } }
/** * Set a list of named parameters on a query. * * Values of type {@link java.util.Date} and {@link org.joda.time.base.AbstractInstant} * are recognized and set as a timestamp ({@link javax.persistence.TemporalType#TIMESTAMP}. */ public static <A extends Query> A setParams(A q, Tuple<String, ?>... params) { for (Tuple<String, ?> p : params) { final Object value = p.getB(); if (value instanceof Date) { q.setParameter(p.getA(), (Date) value, TemporalType.TIMESTAMP); } if (value instanceof AbstractInstant) { q.setParameter(p.getA(), ((AbstractInstant) value).toDate(), TemporalType.TIMESTAMP); } else { q.setParameter(p.getA(), p.getB()); } } return q; }
/** * Set a list of named parameters on a query. * <p> * Values of type {@link java.util.Date} and {@link org.joda.time.base.AbstractInstant} * are recognized and set as a timestamp ({@link javax.persistence.TemporalType#TIMESTAMP}. */ public static <A extends Query> A setParams(A q, P2<String, ?>... params) { for (P2<String, ?> p : params) { final Object value = p.get2(); if (value instanceof Date) { q.setParameter(p.get1(), (Date) value, TemporalType.TIMESTAMP); } if (value instanceof AbstractInstant) { q.setParameter(p.get1(), ((AbstractInstant) value).toDate(), TemporalType.TIMESTAMP); } else { q.setParameter(p.get1(), p.get2()); } } return q; }
/** * helper function to create the timer * * @param instant the point in time when the code should be executed * @param closure string for job id * @param dataMap job data map, preconfigured with arguments * @return */ private static Timer makeTimer(AbstractInstant instant, String closure, JobDataMap dataMap) { Logger logger = LoggerFactory.getLogger(ScriptExecution.class); JobKey jobKey = new JobKey(instant.toString() + ": " + closure.toString()); Trigger trigger = newTrigger().startAt(instant.toDate()).build(); Timer timer = new TimerImpl(jobKey, trigger.getKey(), dataMap, instant); try { JobDetail job = newJob(TimerExecutionJob.class).withIdentity(jobKey).usingJobData(dataMap).build(); if (TimerImpl.scheduler.checkExists(job.getKey())) { TimerImpl.scheduler.deleteJob(job.getKey()); logger.debug("Deleted existing Job {}", job.getKey().toString()); } TimerImpl.scheduler.scheduleJob(job, trigger); logger.debug("Scheduled code for execution at {}", instant.toString()); return timer; } catch (SchedulerException e) { logger.error("Failed to schedule code for execution.", e); return null; } } }