List of usage examples for com.liferay.portal.kernel.scheduler TriggerState UNSCHEDULED
TriggerState UNSCHEDULED
To view the source code for com.liferay.portal.kernel.scheduler TriggerState UNSCHEDULED.
Click Source Link
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"); } }