1 package org.apache.turbine.services.schedule; 2 3 /* 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 import java.util.ArrayList; 23 import java.util.List; 24 25 import org.apache.commons.configuration2.Configuration; 26 import org.apache.commons.lang3.StringUtils; 27 import org.apache.turbine.util.TurbineException; 28 29 /** 30 * Service for a cron like scheduler that uses the 31 * TurbineResources.properties file instead of the database. 32 * The methods that operate on jobs ( get,add,update,remove ) 33 * only operate on the queue in memory and changes are not reflected 34 * to the properties file which was used to initialize the jobs. 35 * An example is given below. The job names are the class names that 36 * extend ScheduledJob. 37 * 38 * <PRE> 39 * 40 * services.SchedulerService.scheduler.jobs=scheduledJobName,scheduledJobName2 41 * 42 * services.SchedulerService.scheduler.job.scheduledJobName.ID=1 43 * services.SchedulerService.scheduler.job.scheduledJobName.SECOND=-1 44 * services.SchedulerService.scheduler.job.scheduledJobName.MINUTE=-1 45 * services.SchedulerService.scheduler.job.scheduledJobName.HOUR=7 46 * services.SchedulerService.scheduler.job.scheduledJobName.WEEKDAY=-1 47 * services.SchedulerService.scheduler.job.scheduledJobName.DAY_OF_MONTH=-1 48 * 49 * services.SchedulerService.scheduler.job.scheduledJobName2.ID=1 50 * services.SchedulerService.scheduler.job.scheduledJobName2.SECOND=-1 51 * services.SchedulerService.scheduler.job.scheduledJobName2.MINUTE=-1 52 * services.SchedulerService.scheduler.job.scheduledJobName2.HOUR=7 53 * services.SchedulerService.scheduler.job.scheduledJobName2.WEEKDAY=-1 54 * services.SchedulerService.scheduler.job.scheduledJobName2.DAY_OF_MONTH=-1 55 * 56 * </PRE> 57 * 58 * Based on TamboraSchedulerService written by John Thorhauer. 59 * 60 * @author <a href="mailto:ekkerbj@netscpae.net">Jeff Brekke</a> 61 * @author <a href="mailto:john@zenplex.com">John Thorhauer</a> 62 * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a> 63 * @version $Id: TurbineNonPersistentSchedulerService.java 534527 2007-05-02 16:10:59Z tv $ 64 * 65 * @deprecated Use QuartzSchedulerService instead 66 */ 67 @Deprecated 68 public class TurbineNonPersistentSchedulerService extends AbstractSchedulerService 69 { 70 /** 71 * @see org.apache.turbine.services.schedule.AbstractSchedulerService#loadJobs() 72 */ 73 @Override 74 protected List<? extends JobEntry> loadJobs() throws TurbineException 75 { 76 Configuration conf = getConfiguration(); 77 List<Object> jobProps = conf.getList("scheduler.jobs"); 78 List<JobEntry> jobs = new ArrayList<>(); 79 80 // If there are scheduler.jobs defined then set up a job vector 81 // for the scheduleQueue 82 if (!jobProps.isEmpty()) 83 { 84 for (int i = 0; i < jobProps.size(); i++) 85 { 86 String jobName = (String)jobProps.get(i); 87 String jobPrefix = "scheduler.job." + jobName; 88 89 String jobId = conf.getString(jobPrefix + ".ID", null); 90 if (StringUtils.isEmpty(jobId)) 91 { 92 throw new TurbineException( 93 "There is an error in the TurbineResources.properties file. \n" 94 + jobPrefix + ".ID is not found.\n"); 95 } 96 97 int sec = conf.getInt(jobPrefix + ".SECOND", -1); 98 int min = conf.getInt(jobPrefix + ".MINUTE", -1); 99 int hr = conf.getInt(jobPrefix + ".HOUR", -1); 100 int wkday = conf.getInt(jobPrefix + ".WEEKDAY", -1); 101 int dayOfMonth = conf.getInt(jobPrefix + ".DAY_OF_MONTH", -1); 102 103 JobEntry je = newJob( 104 sec, 105 min, 106 hr, 107 wkday, 108 dayOfMonth, 109 jobName); 110 je.setJobId(Integer.parseInt(jobId)); 111 jobs.add(je); 112 } 113 } 114 115 return jobs; 116 } 117 118 /** 119 * @see org.apache.turbine.services.schedule.ScheduleService#newJob(int, int, int, int, int, java.lang.String) 120 */ 121 @Override 122 public JobEntry newJob(int sec, int min, int hour, int wd, int day_mo, String task) throws TurbineException 123 { 124 return new JobEntryNonPersistent(sec, min, hour, wd, day_mo, task); 125 } 126 127 /** 128 * This method returns the job element from the internal queue. 129 * 130 * @param oid The int id for the job. 131 * @return A JobEntry. 132 * @throws TurbineException could not retrieve job 133 */ 134 @Override 135 public JobEntry getJob(int oid) 136 throws TurbineException 137 { 138 JobEntry je = new JobEntryNonPersistent(); 139 je.setJobId(oid); 140 return scheduleQueue.getJob(je); 141 } 142 143 /** 144 * Remove a job from the queue. 145 * 146 * @param je A JobEntry with the job to remove. 147 */ 148 @Override 149 public void removeJob(JobEntry je) 150 { 151 // Remove from the queue. 152 scheduleQueue.remove(je); 153 restart(); 154 } 155 156 /** 157 * Add/update a job 158 * 159 * @param je A JobEntry with the job to modify 160 * @throws TurbineException job could not be updated 161 */ 162 @Override 163 public void updateJob(JobEntry je) 164 throws TurbineException 165 { 166 try 167 { 168 je.calcRunTime(); 169 170 // Update the queue. 171 scheduleQueue.modify(je); 172 restart(); 173 } 174 catch (Exception e) 175 { 176 throw new TurbineException("Problem updating Scheduled Job: " + je.getTask(), e); 177 } 178 } 179 }