/** * Register listener. * * @param trigger the trigger */ private void registerListener(Trigger trigger) { String jobKey = getJobKey(trigger); if (jobs.containsKey(jobKey)) { _log.fatal("Listener already exists for " + jobKey); jobs.get(jobKey); } else { SchedulerEventMessageListenerWrapper schedulerEventMessageListenerWrapper = new SchedulerEventMessageListenerWrapper(); SchedulerEntryImpl schedulerEntry = new SchedulerEntryImpl(); schedulerEntry.setTrigger(trigger); schedulerEntry.setDescription("sample description"); schedulerEntry.setEventListenerClass(LogMessageListener.class.getName()); schedulerEventMessageListenerWrapper.setSchedulerEntry(schedulerEntry); schedulerEventMessageListenerWrapper.setMessageListener(new LogMessageListener()); _log.fatal( "Register listener for:: jobName[" + trigger.getJobName() + "] groupName[" + trigger.getGroupName() + "] startDate[" + trigger.getStartDate() + "]"); MessageBusUtil.registerMessageListener( DestinationNames.SCHEDULER_DISPATCH, schedulerEventMessageListenerWrapper); jobs.put(jobKey, schedulerEventMessageListenerWrapper); } }
@Override public void update(Trigger trigger) throws SchedulerException { SchedulerResponse schedulerResponse = getScheduledJob(trigger.getJobName(), trigger.getGroupName()); schedulerResponse.setTrigger(trigger); }
@Override public void schedule( com.liferay.portal.kernel.scheduler.Trigger trigger, String description, String destination, Message message, StorageType storageType) throws SchedulerException { try { Scheduler scheduler = getScheduler(storageType); Trigger quartzTrigger = (Trigger) trigger.getWrappedTrigger(); if (quartzTrigger == null) { return; } description = fixMaxLength(description, _descriptionMaxLength, storageType); message = message.clone(); message.put(SchedulerEngine.GROUP_NAME, trigger.getGroupName()); message.put(SchedulerEngine.JOB_NAME, trigger.getJobName()); schedule(scheduler, storageType, quartzTrigger, description, destination, message); } catch (RuntimeException re) { if (PortalRunMode.isTestMode()) { StackTraceElement[] stackTraceElements = re.getStackTrace(); for (StackTraceElement stackTraceElement : stackTraceElements) { String className = stackTraceElement.getClassName(); if (className.contains(ServerDetector.class.getName())) { if (_log.isInfoEnabled()) { _log.info(re, re); } return; } throw new SchedulerException("Unable to schedule job", re); } } else { throw new SchedulerException("Unable to schedule job", re); } } catch (Exception e) { throw new SchedulerException("Unable to schedule job", e); } }
@Override public void schedule( Trigger trigger, String description, String destinationName, Message message) throws SchedulerException { String jobName = trigger.getJobName(); if (!jobName.startsWith(_TEST_JOB_NAME_PREFIX)) { throw new SchedulerException("Invalid job name " + jobName); } String groupName = trigger.getGroupName(); StorageType storageType = _getStorageType(groupName); _addJobs(trigger.getJobName(), groupName, storageType, trigger, message); }
/** * Gets the job key. * * @param trigger the trigger * @return the job key */ public String getJobKey(Trigger trigger) { return trigger.getGroupName() + "_" + trigger.getJobName(); }
protected Trigger getQuartzTrigger( com.liferay.portal.kernel.scheduler.Trigger trigger, StorageType storageType) throws SchedulerException { if (trigger == null) { return null; } Date endDate = trigger.getEndDate(); String jobName = fixMaxLength(trigger.getJobName(), _jobNameMaxLength, storageType); String groupName = fixMaxLength(trigger.getGroupName(), _groupNameMaxLength, storageType); Date startDate = trigger.getStartDate(); if (startDate == null) { startDate = new Date(System.currentTimeMillis()); } TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger(); triggerBuilder.endAt(endDate); triggerBuilder.forJob(jobName, groupName); triggerBuilder.startAt(startDate); triggerBuilder.withIdentity(jobName, groupName); TriggerType triggerType = trigger.getTriggerType(); if (triggerType == TriggerType.CRON) { triggerBuilder.withSchedule( CronScheduleBuilder.cronSchedule((String) trigger.getTriggerContent())); return triggerBuilder.build(); } ObjectValuePair<Integer, TimeUnit> objectValuePair = (ObjectValuePair<Integer, TimeUnit>) trigger.getTriggerContent(); int interval = objectValuePair.getKey(); if (interval < 0) { if (_log.isWarnEnabled()) { _log.warn("Not scheduling " + trigger.getJobName() + " because interval is less than 0"); } return null; } else if (interval == 0) { return triggerBuilder.build(); } TimeUnit timeUnit = objectValuePair.getValue(); if (timeUnit == TimeUnit.MILLISECOND) { SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule(); simpleScheduleBuilder.withIntervalInMilliseconds(interval); simpleScheduleBuilder.withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY); triggerBuilder.withSchedule(simpleScheduleBuilder); } else { CalendarIntervalScheduleBuilder calendarIntervalScheduleBuilder = CalendarIntervalScheduleBuilder.calendarIntervalSchedule(); calendarIntervalScheduleBuilder.withInterval(interval, IntervalUnit.valueOf(timeUnit.name())); triggerBuilder.withSchedule(calendarIntervalScheduleBuilder); } return triggerBuilder.build(); }