Example usage for com.liferay.portal.kernel.scheduler SchedulerEntry getTrigger

List of usage examples for com.liferay.portal.kernel.scheduler SchedulerEntry getTrigger

Introduction

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

Prototype

public Trigger getTrigger();

Source Link

Usage

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

License:Open Source License

/**
 * Reads Scheduler entries from Portlet Preferences
 * /*from  w  ww.  j  a v  a  2  s  . com*/
 * WARN: This will disable Multiple Quartz Jobs (Triggers) per Listener Feature
 * 
 * @param schedulerClassName
 * @param portletId
 */
public void initScheduler(String schedulerClassName, ServiceContext serviceContext) {
    Portlet portlet = PortletLocalServiceUtil.getPortletById(serviceContext.getPortletId());
    List<SchedulerEntry> jobs = new LinkedList<SchedulerEntry>();
    List<SchedulerEntry> duplicates = new LinkedList<SchedulerEntry>();

    LOG.info("Initializing schedulers for " + schedulerClassName + " " + portletId);

    this.schedulerClassName = schedulerClassName;
    this.portletId = serviceContext.getPortletId();

    // Load Quartz Job (Unique for ClassName!)
    assembleMessageFromResponses();

    // Fetch List of Schedulers started on portlet initialization (maybe we
    // do have a Trigger,...)
    jobs = portlet.getSchedulerEntries();
    for (SchedulerEntry job : jobs) {
        // Grab first scheduler associated with given Class
        if (job.getEventListenerClass().equalsIgnoreCase(this.schedulerClassName)) {
            if (this.schedulerEntry == null) {
                LOG.info(job.toString());
                this.schedulerEntry = job;
                // Get Trigger
                try {
                    this.generalTrigger = job.getTrigger();
                    if (this.generalTrigger != null) {
                        // Try persisting our Trigger in DB
                        String currentCron = GetterUtil
                                .getString(this.generalTrigger.getTriggerContent().toString());
                        this.triggerState = SchedulerEngineHelperUtil.getJobState(job.getEventListenerClass(),
                                job.getEventListenerClass(), this.getStorageType());
                        String persistCron = ScheduledThreadLocalServiceUtil
                                .getCronBySchedulerName(job.getEventListenerClass());
                        if (persistCron == null || persistCron.isEmpty())
                            ScheduledThreadLocalServiceUtil.addScheduledThread(schedulerClassName, currentCron,
                                    serviceContext);
                        // Overwrite if we encounter new value (assume
                        // PortletScheduler Names are unique)
                        if (!persistCron.equals(currentCron) && !currentCron.isEmpty())
                            ScheduledThreadLocalServiceUtil.updateScheduledThread(schedulerClassName,
                                    currentCron, serviceContext);
                    }
                } catch (SchedulerException t) {
                    LOG.warn(t);
                } catch (SystemException e) {
                    LOG.warn("Failed Loading Persitence - Recovery of Triggers will fail", e);
                } catch (PortalException e) {
                    LOG.warn("", e);
                }
            } else { // Collect duplicate SchedulerEntries
                LOG.warn("Multiple runnging Jobs found for same Scheduled Task! Removing ... " + job);
                duplicates.add(job);
            }
        }
    }
    // remove duplicates
    jobs.removeAll(duplicates);

    // Check if we got what we've been looking for
    if (schedulerEntry == null) {
        LOG.warn("No SchedulerEntry found for this Job. Generating new Entry...");
        assembleEntryFromSettings(portletId, this.triggerState);
    }

}