Ejemplo n.º 1
0
  /**
   * 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);
    }
  }
  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();
  }