001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.activemq.broker.scheduler;
018    
019    import java.util.List;
020    import org.apache.kahadb.util.ByteSequence;
021    
022    public interface JobScheduler {
023    
024        /**
025         * @return the name of the scheduler
026         * @throws Exception 
027         */
028        public abstract String getName() throws Exception;
029    /**
030     * Add a Job listener
031     * @param l
032     * @throws Exception 
033     */
034        public abstract void addListener(JobListener l) throws Exception;
035    /**
036     * remove a JobListener
037     * @param l
038     * @throws Exception 
039     */
040        public abstract void removeListener(JobListener l) throws Exception;
041    
042        /**
043         * Add a job to be scheduled
044         * @param jobId a unique identifier for the job
045         * @param payload the message to be sent when the job is scheduled
046         * @param delay the time in milliseconds before the job will be run
047         * @throws Exception
048         */
049        public abstract void schedule(String jobId, ByteSequence payload,long delay) throws Exception;
050    
051        /**
052         * Add a job to be scheduled
053         * @param jobId a unique identifier for the job
054         * @param payload the message to be sent when the job is scheduled
055         * @param cronEntry - cron entry
056         * @throws Exception
057         */
058        public abstract void schedule(String jobId, ByteSequence payload,String cronEntry) throws Exception;
059    
060        
061        /**
062         * Add a job to be scheduled
063         * @param jobId a unique identifier for the job
064         * @param payload the message to be sent when the job is scheduled
065         * @param cronEntry - cron entry
066         * @param delay time in ms to wait before scheduling
067         * @param period the time in milliseconds between successive executions of the Job
068         * @param repeat the number of times to execute the job - less than 0 will be repeated forever
069         * @throws Exception
070         */
071        public abstract void schedule(String jobId, ByteSequence payload,String cronEntry,long delay, long period, int repeat) throws Exception;
072    
073        /**
074         * remove all jobs scheduled to run at this time
075         * @param time
076         * @throws Exception 
077         */
078        public abstract void remove(long time) throws  Exception;
079    
080        /**
081         * remove a job with the matching jobId
082         * @param jobId
083         * @throws Exception 
084         */
085        public abstract void remove(String jobId) throws  Exception;
086        
087        /**
088         * remove all the Jobs from the scheduler
089         * @throws Exception
090         */
091        public abstract void removeAllJobs() throws Exception;
092        
093        /**
094         * remove all the Jobs from the scheduler that are due between the start and finish times
095         * @param start time in milliseconds
096         * @param finish time in milliseconds
097         * @throws Exception
098         */
099        public abstract void removeAllJobs(long start,long finish) throws Exception;
100        
101    
102        
103        /**
104         * Get the next time jobs will be fired
105         * @return the time in milliseconds
106         * @throws Exception 
107         */
108        public abstract long getNextScheduleTime() throws Exception;
109        
110        /**
111         * Get all the jobs scheduled to run next
112         * @return a list of jobs that will be scheduled next
113         * @throws Exception
114         */
115        public abstract List<Job> getNextScheduleJobs() throws Exception;
116        
117        /**
118         * Get all the outstanding Jobs
119         * @return a  list of all jobs
120         * @throws Exception 
121         */
122        public abstract List<Job> getAllJobs() throws Exception;
123        
124        /**
125         * Get all outstanding jobs due to run between start and finish
126         * @param start
127         * @param finish
128         * @return a list of jobs
129         * @throws Exception
130         */
131        public abstract List<Job> getAllJobs(long start,long finish)throws Exception;
132    
133    }