Example usage for com.liferay.portal.kernel.scheduler TriggerState UNSCHEDULED

List of usage examples for com.liferay.portal.kernel.scheduler TriggerState UNSCHEDULED

Introduction

In this page you can find the example usage for com.liferay.portal.kernel.scheduler TriggerState UNSCHEDULED.

Prototype

TriggerState UNSCHEDULED

To view the source code for com.liferay.portal.kernel.scheduler TriggerState UNSCHEDULED.

Click Source Link

Usage

From source file:de.uhh.l2g.plugins.util.PortletScheduler.java

License:Open Source License

/**
 * Assembles (adds and schedules) an missing SchedulerEntry
 * //from   w  w w.ja v  a  2 s .c o  m
 * @return SchedulerEntry
 */
public SchedulerEntry assembleEntryFromSettings(String portletId, TriggerState state) {
    Portlet portlet = PortletLocalServiceUtil.getPortletById(portletId);
    SchedulerEntry entry = new SchedulerEntryImpl();
    String cron = "";
    try {
        cron = GetterUtil
                .getString(ScheduledThreadLocalServiceUtil.getCronBySchedulerName(this.schedulerClassName));
        // TODO: Persist Description String description;
        this.generalTrigger = new CronTrigger(this.schedulerClassName, this.schedulerClassName, cron);
        LOG.info("Building Trigger: " + cron);
        entry.setDescription(this.schedulerClassName);
        entry.setEventListenerClass(this.schedulerClassName);
        entry.setTriggerType(TriggerType.CRON);
        entry.setTriggerValue(cron);

        this.schedulerEntry = entry;

    } catch (Exception e) {
        LOG.error("Scheduler CronText was lost. Requires server restart to recover.");
    }
    // Add and schedule if it is supposed to be running
    if (state != TriggerState.UNSCHEDULED) {
        portlet.getSchedulerEntries().add(entry);
        // , description=This scheduler is used to collect Statistical Data
        // from Database,
        // eventListenerClass=de.uhh.l2g.plugins.util.StatisticsScheduler,
        // propertyKey=, timeUnit=null, trigger={cronText=0 */1 * * * ?,
        // {endDate=null,
        // groupName=de.uhh.l2g.plugins.util.StatisticsScheduler,
        // jobName=de.uhh.l2g.plugins.util.StatisticsScheduler,
        // startDate=null, triggerType=CRON}}, triggerType=CRON,
        // triggerValue=0 */1 * * * ?}
        try {
            SchedulerEngineHelperUtil.schedule(entry, this.STOR, portletId, 0);
        } catch (SchedulerException e) {
            LOG.error("Failed adding Scheduler!");
        }
    }
    return this.schedulerEntry;

}

From source file:de.uhh.l2g.plugins.util.PortletScheduler.java

License:Open Source License

/**
 * Schedule unscheduled Scheduler (requires valid SchedulerEntry Data &&
 * Message Date)/*  w w w. j a  v  a  2  s .  c o m*/
 * 
 * There is no Issue in Liferay Tracker about this: Manually assembling.
 * Message, Trigger and Job from previously "working" Job, in order to use
 * 
 * SchedulerEngineHelperUtil.schedule(Trigger, StorageType, Description,
 * Destination, Message, exceptionsMaxSize);
 * 
 * Currently (6.2 GA 4 - GA 6) also fails to register the MessageListener
 * correctly for a single consumer. This might be a configuration detail
 * issue, which is not documented in liferays SchedulerEngineHelperUtil, at
 * first sight source investigation does not reveal conclusive hints.
 * 
 * Though the more complicated issue is that Quartz does persist the Job on
 * UNSCHEDULE but not the Trigger.
 * 
 * Therefore a SchedulerEntry must be available in Memory, to schedule an
 * unscheduled Job Liferay SchedulerEntry however does persit the Trigger...
 * but does not check for duplicates on deploy.
 * 
 * If we keep the SchedulerEntry in the List we have the Trigger but
 * unregister fails and duplicates the Scheduler If we remove the
 * SchedulerEntry unregister works correctly but we lose the Trigger
 * 
 * @throws ClassNotFoundException
 * @throws IllegalAccessException
 * @throws SchedulerException
 * @throws Exception
 * @throws InstantiationException
 *             *
 */
public void schedule() {
    int exceptionsMaxSize = 0;
    try {
        String messageText = GetterUtil.getString((this.getMessage().toString()));
        LOG.info("Starting :" + messageText);

        Map<String, Object> map = this.getMessage().getValues();

        String portletId = "";
        String listenerName = "";

        if (map.containsKey(SchedulerEngine.PORTLET_ID))
            portletId = map.get(SchedulerEngine.PORTLET_ID).toString();
        if (map.containsKey(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME))
            listenerName = map.get(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME).toString();
        if (map.containsKey(SchedulerEngine.EXCEPTIONS_MAX_SIZE))
            exceptionsMaxSize = Integer.valueOf(map.get(SchedulerEngine.EXCEPTIONS_MAX_SIZE).toString());

        LOG.info("Message :" + portletId + " " + listenerName + " " + this.destination);

        if (this.getTrigger() == null)
            this.setTrigger(this.generalTrigger);
        TriggerState state = SchedulerEngineHelperUtil.getJobState(this.getJobName(), this.getGroupName(),
                this.getStorageType());
        LOG.info("Trigger :" + GetterUtil.getString(this.getTrigger().toString()) + state);
        if (state != null && state.equals(TriggerState.UNSCHEDULED)) {
            this.getMessage().put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, this.schedulerClassName);
            this.getMessage().setDestinationName(this.DEST);
            this.getMessage().put(SchedulerEngine.RECEIVER_KEY,
                    this.getMessage().getValues().get(SchedulerEngine.RECEIVER_KEY).toString());
            LOG.info("Scheduling :" + this.schedulerClassName + " ");
            LOG.info("New Message " + this.getMessage().toString());
            Thread thread = Thread.currentThread();
            LOG.info("Thread :" + thread.getContextClassLoader() + thread.toString());
            if (this.schedulerEntry != null && this.getTrigger() != null)
                SchedulerEngineHelperUtil.schedule(schedulerEntry, this.getStorageType(), portletId,
                        exceptionsMaxSize);
            else
                assembleEntryFromSettings(this.schedulerClassName, TriggerState.NORMAL);
        } else {
            if (state == null)
                LOG.error("Could not find Job with Name: " + this.schedulerClassName);
            else
                LOG.info("Could not schedule Job with State: " + state);
        }

    } catch (SchedulerException e) {
        LOG.warn("", e);
    } catch (IllegalArgumentException e) {
        LOG.warn(e);
    }
}

From source file:de.uhh.l2g.plugins.util.PortletScheduler.java

License:Open Source License

/**
 * Unschedules Quartz Job but keeps SchedulerEntry in Memory (Scheduler will
 * be not correctly (re)deployed if in state UNSCHEDULED
 * /*from  w ww  .  j  a  v  a2 s  .  co  m*/
 */
public void unschedule() {
    try {
        List<SchedulerResponse> scheduledJobs = SchedulerEngineHelperUtil.getScheduledJobs();
        for (SchedulerResponse resp : scheduledJobs) {
            if (resp.getJobName().equalsIgnoreCase(this.schedulerClassName)) {

                LOG.info("Stopping :" + resp.toString());
                Map<String, Object> map = resp.getMessage().getValues();

                String portletId = "";
                String listenerName = "";

                if (map.containsKey(SchedulerEngine.PORTLET_ID))
                    portletId = map.get(SchedulerEngine.PORTLET_ID).toString();
                if (map.containsKey(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME))
                    listenerName = map.get(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME).toString();

                LOG.info("Associated to :" + portletId + " " + listenerName + " " + this.destination);

                TriggerState state = SchedulerEngineHelperUtil.getJobState(resp.getJobName(),
                        resp.getGroupName(), resp.getStorageType());

                if (state != (TriggerState.UNSCHEDULED)) {

                    Thread thread = Thread.currentThread();
                    LOG.info("Thread :" + thread.getContextClassLoader() + thread.toString());

                    LOG.info("Unscheduling :" + this.schedulerClassName + " " + resp.getTrigger().toString());
                    SchedulerEngineHelperUtil.unschedule(schedulerEntry, resp.getStorageType());
                    // TODO: Check Workaround
                    // This removes the SchedulerEntry from Liferay's
                    // Scheduler List so it is not started aditionally on
                    // re-deploy
                    // BUT, removing this entry will also destroy our
                    // Trigger (as Quartz unschedule(), removes the Trigger
                    // from QuartzJob
                    this.removeFromEntries();
                } else {
                    LOG.warn("Scheduler could not be unscheduled beacuse it was in state " + state);
                }
            }
        }

    } catch (SchedulerException e) {
        LOG.warn("Failed to unschedule job" + this.schedulerClassName, e);
    }
}

From source file:de.uhh.l2g.plugins.util.PortletScheduler.java

License:Open Source License

/**
 * Unschedules and removes all Jobs associated with this Listener Class'
 * //w ww .  j  a  v  a 2s  .co m
 * Assumes Job and Group Name are equal
 */
public static void removeAllJobs(String portletId) {
    List<SchedulerResponse> scheduledJobs;
    List<SchedulerEntry> entries;
    Portlet portlet = PortletLocalServiceUtil.getPortletById(portletId);
    List<SchedulerEntry> toRemove = new LinkedList<SchedulerEntry>();
    TriggerState state;

    try {
        scheduledJobs = SchedulerEngineHelperUtil.getScheduledJobs();
        for (SchedulerResponse resp : scheduledJobs) {
            if (resp.getJobName().startsWith(PortletScheduler.class.getPackage().getName())) {
                state = SchedulerEngineHelperUtil.getJobState(resp.getJobName(), resp.getGroupName(),
                        resp.getStorageType());
                if (state != (TriggerState.UNSCHEDULED))
                    SchedulerEngineHelperUtil.unschedule(resp.getJobName(), resp.getGroupName(),
                            resp.getStorageType());
                entries = portlet.getSchedulerEntries();
                for (SchedulerEntry entry : entries) {
                    if (entry.getEventListenerClass().equalsIgnoreCase(resp.getJobName())) {
                        LOG.info("SchedulerEntry: " + entry.toString());
                        toRemove.add(entry);
                    }
                }
                entries.removeAll(toRemove);
            }
        }
        LOG.warn("Removed all Schedulers associated with " + PortletScheduler.class.getPackage().getName());
    } catch (SchedulerException e) {
        LOG.error("Could not retrieve ScheduledJobs");
    }
}