1 /*
2 * Copyright 2004-2005 OpenSymphony
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy
6 * of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 *
16 */
17
18 /*
19 * Previously Copyright (c) 2001-2004 James House
20 */
21 package org.quartz.impl.jdbcjobstore;
22
23 import java.io.IOException;
24 import java.sql.Connection;
25 import java.sql.SQLException;
26 import java.util.List;
27 import java.util.Set;
28
29 import org.quartz.Calendar;
30 import org.quartz.CronTrigger;
31 import org.quartz.JobDataMap;
32 import org.quartz.JobDetail;
33 import org.quartz.SimpleTrigger;
34 import org.quartz.Trigger;
35 import org.quartz.spi.ClassLoadHelper;
36 import org.quartz.utils.Key;
37 import org.quartz.utils.TriggerStatus;
38
39 /**
40 * <p>
41 * This is the base interface for all driver delegate classes.
42 * </p>
43 *
44 * <p>
45 * This interface is very similar to the <code>{@link
46 * org.quartz.spi.JobStore}</code>
47 * interface except each method has an additional <code>{@link java.sql.Connection}</code>
48 * parameter.
49 * </p>
50 *
51 * <p>
52 * Unless a database driver has some <strong>extremely-DB-specific</strong>
53 * requirements, any DriverDelegate implementation classes should extend the
54 * <code>{@link org.quartz.impl.jdbcjobstore.StdJDBCDelegate}</code> class.
55 * </p>
56 *
57 * @author <a href="mailto:jeff@binaryfeed.org">Jeffrey Wescott</a>
58 * @author James House
59 */
60 interface DriverDelegate {
61
62 /*
63 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64 *
65 * Interface.
66 *
67 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68 */
69
70 //---------------------------------------------------------------------------
71 // startup / recovery
72 //---------------------------------------------------------------------------
73 /**
74 * <p>
75 * Update all triggers having one of the two given states, to the given new
76 * state.
77 * </p>
78 *
79 * @param conn
80 * the DB Connection
81 * @param newState
82 * the new state for the triggers
83 * @param oldState1
84 * the first old state to update
85 * @param oldState2
86 * the second old state to update
87 * @return number of rows updated
88 */
89 int updateTriggerStatesFromOtherStates(Connection conn,
90 String newState, String oldState1, String oldState2)
91 throws SQLException;
92
93 /**
94 * <p>
95 * Get the names of all of the triggers that have misfired - according to
96 * the given timestamp.
97 * </p>
98 *
99 * @param conn
100 * the DB Connection
101 * @return an array of <code>{@link
102 * org.quartz.utils.Key}</code> objects
103 */
104 Key[] selectMisfiredTriggers(Connection conn, long ts)
105 throws SQLException;
106
107 /**
108 * <p>
109 * Get the names of all of the triggers in the given state that have
110 * misfired - according to the given timestamp.
111 * </p>
112 *
113 * @param conn
114 * the DB Connection
115 * @return an array of <code>{@link
116 * org.quartz.utils.Key}</code> objects
117 */
118 Key[] selectMisfiredTriggersInState(Connection conn, String state,
119 long ts) throws SQLException;
120
121 /**
122 * <p>
123 * Get the names of all of the triggers in the given states that have
124 * misfired - according to the given timestamp. No more than count will
125 * be returned.
126 * </p>
127 *
128 * @param conn the DB Connection
129 * @param count the most misfired triggers to return, negative for all
130 * @param resultList Output parameter. A List of
131 * <code>{@link org.quartz.utils.Key}</code> objects. Must not be null.
132 *
133 * @return Whether there are more misfired triggers left to find beyond
134 * the given count.
135 */
136 boolean selectMisfiredTriggersInStates(Connection conn, String state1, String state2,
137 long ts, int count, List resultList) throws SQLException;
138
139 /**
140 * <p>
141 * Get the number of triggers in the given states that have
142 * misfired - according to the given timestamp.
143 * </p>
144 *
145 * @param conn the DB Connection
146 */
147 int countMisfiredTriggersInStates(
148 Connection conn, String state1, String state2, long ts) throws SQLException;
149
150 /**
151 * <p>
152 * Get the names of all of the triggers in the given group and state that
153 * have misfired - according to the given timestamp.
154 * </p>
155 *
156 * @param conn
157 * the DB Connection
158 * @return an array of <code>{@link
159 * org.quartz.utils.Key}</code> objects
160 */
161 Key[] selectMisfiredTriggersInGroupInState(Connection conn,
162 String groupName, String state, long ts) throws SQLException;
163
164
165 /**
166 * <p>
167 * Select all of the triggers for jobs that are requesting recovery. The
168 * returned trigger objects will have unique "recoverXXX" trigger names and
169 * will be in the <code>{@link
170 * org.quartz.Scheduler}.DEFAULT_RECOVERY_GROUP</code>
171 * trigger group.
172 * </p>
173 *
174 * <p>
175 * In order to preserve the ordering of the triggers, the fire time will be
176 * set from the <code>COL_FIRED_TIME</code> column in the <code>TABLE_FIRED_TRIGGERS</code>
177 * table. The caller is responsible for calling <code>computeFirstFireTime</code>
178 * on each returned trigger. It is also up to the caller to insert the
179 * returned triggers to ensure that they are fired.
180 * </p>
181 *
182 * @param conn
183 * the DB Connection
184 * @return an array of <code>{@link org.quartz.Trigger}</code> objects
185 */
186 Trigger[] selectTriggersForRecoveringJobs(Connection conn)
187 throws SQLException, IOException, ClassNotFoundException;
188
189 /**
190 * <p>
191 * Delete all fired triggers.
192 * </p>
193 *
194 * @param conn
195 * the DB Connection
196 * @return the number of rows deleted
197 */
198 int deleteFiredTriggers(Connection conn) throws SQLException;
199
200 /**
201 * <p>
202 * Delete all fired triggers of the given instance.
203 * </p>
204 *
205 * @param conn
206 * the DB Connection
207 * @return the number of rows deleted
208 */
209 int deleteFiredTriggers(Connection conn, String instanceId)
210 throws SQLException;
211
212 /**
213 * <p>
214 * Delete all volatile fired triggers.
215 * </p>
216 *
217 * @param conn
218 * the DB Connection
219 * @return the number of rows deleted
220 */
221 int deleteVolatileFiredTriggers(Connection conn) throws SQLException;
222
223 /**
224 * <p>
225 * Get the names of all of the triggers that are volatile.
226 * </p>
227 *
228 * @param conn
229 * the DB Connection
230 * @return an array of <code>{@link
231 * org.quartz.utils.Key}</code> objects
232 */
233 Key[] selectVolatileTriggers(Connection conn) throws SQLException;
234
235 /**
236 * <p>
237 * Get the names of all of the jobs that are volatile.
238 * </p>
239 *
240 * @param conn
241 * the DB Connection
242 * @return an array of <code>{@link
243 * org.quartz.utils.Key}</code> objects
244 */
245 Key[] selectVolatileJobs(Connection conn) throws SQLException;
246
247 //---------------------------------------------------------------------------
248 // jobs
249 //---------------------------------------------------------------------------
250
251 /**
252 * <p>
253 * Insert the job detail record.
254 * </p>
255 *
256 * @param conn
257 * the DB Connection
258 * @param job
259 * the job to insert
260 * @return number of rows inserted
261 * @throws IOException
262 * if there were problems serializing the JobDataMap
263 */
264 int insertJobDetail(Connection conn, JobDetail job)
265 throws IOException, SQLException;
266
267 /**
268 * <p>
269 * Update the job detail record.
270 * </p>
271 *
272 * @param conn
273 * the DB Connection
274 * @param job
275 * the job to update
276 * @return number of rows updated
277 * @throws IOException
278 * if there were problems serializing the JobDataMap
279 */
280 int updateJobDetail(Connection conn, JobDetail job)
281 throws IOException, SQLException;
282
283 /**
284 * <p>
285 * Get the names of all of the triggers associated with the given job.
286 * </p>
287 *
288 * @param conn
289 * the DB Connection
290 * @param jobName
291 * the job name
292 * @param groupName
293 * the job group
294 * @return an array of <code>{@link
295 * org.quartz.utils.Key}</code> objects
296 */
297 Key[] selectTriggerNamesForJob(Connection conn, String jobName,
298 String groupName) throws SQLException;
299
300 /**
301 * <p>
302 * Delete all job listeners for the given job.
303 * </p>
304 *
305 * @param conn
306 * the DB Connection
307 * @param jobName
308 * the name of the job
309 * @param groupName
310 * the group containing the job
311 * @return the number of rows deleted
312 */
313 int deleteJobListeners(Connection conn, String jobName,
314 String groupName) throws SQLException;
315
316 /**
317 * <p>
318 * Delete the job detail record for the given job.
319 * </p>
320 *
321 * @param conn
322 * the DB Connection
323 * @param jobName
324 * the name of the job
325 * @param groupName
326 * the group containing the job
327 * @return the number of rows deleted
328 */
329 int deleteJobDetail(Connection conn, String jobName, String groupName)
330 throws SQLException;
331
332 /**
333 * <p>
334 * Check whether or not the given job is stateful.
335 * </p>
336 *
337 * @param conn
338 * the DB Connection
339 * @param jobName
340 * the name of the job
341 * @param groupName
342 * the group containing the job
343 * @return true if the job exists and is stateful, false otherwise
344 */
345 boolean isJobStateful(Connection conn, String jobName,
346 String groupName) throws SQLException;
347
348 /**
349 * <p>
350 * Check whether or not the given job exists.
351 * </p>
352 *
353 * @param conn
354 * the DB Connection
355 * @param jobName
356 * the name of the job
357 * @param groupName
358 * the group containing the job
359 * @return true if the job exists, false otherwise
360 */
361 boolean jobExists(Connection conn, String jobName, String groupName)
362 throws SQLException;
363
364 /**
365 * <p>
366 * Update the job data map for the given job.
367 * </p>
368 *
369 * @param conn
370 * the DB Connection
371 * @param job
372 * the job to update
373 * @return the number of rows updated
374 * @throws IOException
375 * if there were problems serializing the JobDataMap
376 */
377 int updateJobData(Connection conn, JobDetail job)
378 throws IOException, SQLException;
379
380 /**
381 * <p>
382 * Associate a listener with a job.
383 * </p>
384 *
385 * @param conn
386 * the DB Connection
387 * @param job
388 * the job to associate with the listener
389 * @param listener
390 * the listener to insert
391 * @return the number of rows inserted
392 */
393 int insertJobListener(Connection conn, JobDetail job, String listener)
394 throws SQLException;
395
396 /**
397 * <p>
398 * Get all of the listeners for a given job.
399 * </p>
400 *
401 * @param conn
402 * the DB Connection
403 * @param jobName
404 * the job name whose listeners are wanted
405 * @param groupName
406 * the group containing the job
407 * @return array of <code>String</code> listener names
408 */
409 String[] selectJobListeners(Connection conn, String jobName,
410 String groupName) throws SQLException;
411
412 /**
413 * <p>
414 * Select the JobDetail object for a given job name / group name.
415 * </p>
416 *
417 * @param conn
418 * the DB Connection
419 * @param jobName
420 * the job name whose listeners are wanted
421 * @param groupName
422 * the group containing the job
423 * @return the populated JobDetail object
424 * @throws ClassNotFoundException
425 * if a class found during deserialization cannot be found or if
426 * the job class could not be found
427 * @throws IOException
428 * if deserialization causes an error
429 */
430 JobDetail selectJobDetail(Connection conn, String jobName,
431 String groupName, ClassLoadHelper loadHelper)
432 throws ClassNotFoundException, IOException, SQLException;
433
434 /**
435 * <p>
436 * Select the total number of jobs stored.
437 * </p>
438 *
439 * @param conn
440 * the DB Connection
441 * @return the total number of jobs stored
442 */
443 int selectNumJobs(Connection conn) throws SQLException;
444
445 /**
446 * <p>
447 * Select all of the job group names that are stored.
448 * </p>
449 *
450 * @param conn
451 * the DB Connection
452 * @return an array of <code>String</code> group names
453 */
454 String[] selectJobGroups(Connection conn) throws SQLException;
455
456 /**
457 * <p>
458 * Select all of the jobs contained in a given group.
459 * </p>
460 *
461 * @param conn
462 * the DB Connection
463 * @param groupName
464 * the group containing the jobs
465 * @return an array of <code>String</code> job names
466 */
467 String[] selectJobsInGroup(Connection conn, String groupName)
468 throws SQLException;
469
470 //---------------------------------------------------------------------------
471 // triggers
472 //---------------------------------------------------------------------------
473
474 /**
475 * <p>
476 * Insert the base trigger data.
477 * </p>
478 *
479 * @param conn
480 * the DB Connection
481 * @param trigger
482 * the trigger to insert
483 * @param state
484 * the state that the trigger should be stored in
485 * @return the number of rows inserted
486 */
487 int insertTrigger(Connection conn, Trigger trigger, String state,
488 JobDetail jobDetail) throws SQLException, IOException;
489
490 /**
491 * <p>
492 * Insert the simple trigger data.
493 * </p>
494 *
495 * @param conn
496 * the DB Connection
497 * @param trigger
498 * the trigger to insert
499 * @return the number of rows inserted
500 */
501 int insertSimpleTrigger(Connection conn, SimpleTrigger trigger)
502 throws SQLException;
503
504 /**
505 * <p>
506 * Insert the blob trigger data.
507 * </p>
508 *
509 * @param conn
510 * the DB Connection
511 * @param trigger
512 * the trigger to insert
513 * @return the number of rows inserted
514 */
515 int insertBlobTrigger(Connection conn, Trigger trigger)
516 throws SQLException, IOException;
517
518 /**
519 * <p>
520 * Insert the cron trigger data.
521 * </p>
522 *
523 * @param conn
524 * the DB Connection
525 * @param trigger
526 * the trigger to insert
527 * @return the number of rows inserted
528 */
529 int insertCronTrigger(Connection conn, CronTrigger trigger)
530 throws SQLException;
531
532 /**
533 * <p>
534 * Update the base trigger data.
535 * </p>
536 *
537 * @param conn
538 * the DB Connection
539 * @param trigger
540 * the trigger to insert
541 * @param state
542 * the state that the trigger should be stored in
543 * @return the number of rows updated
544 */
545 int updateTrigger(Connection conn, Trigger trigger, String state,
546 JobDetail jobDetail) throws SQLException, IOException;
547
548 /**
549 * <p>
550 * Update the simple trigger data.
551 * </p>
552 *
553 * @param conn
554 * the DB Connection
555 * @param trigger
556 * the trigger to insert
557 * @return the number of rows updated
558 */
559 int updateSimpleTrigger(Connection conn, SimpleTrigger trigger)
560 throws SQLException;
561
562 /**
563 * <p>
564 * Update the cron trigger data.
565 * </p>
566 *
567 * @param conn
568 * the DB Connection
569 * @param trigger
570 * the trigger to insert
571 * @return the number of rows updated
572 */
573 int updateCronTrigger(Connection conn, CronTrigger trigger)
574 throws SQLException;
575
576 /**
577 * <p>
578 * Update the blob trigger data.
579 * </p>
580 *
581 * @param conn
582 * the DB Connection
583 * @param trigger
584 * the trigger to insert
585 * @return the number of rows updated
586 */
587 int updateBlobTrigger(Connection conn, Trigger trigger)
588 throws SQLException, IOException;
589
590 /**
591 * <p>
592 * Check whether or not a trigger exists.
593 * </p>
594 *
595 * @param conn
596 * the DB Connection
597 * @param triggerName
598 * the name of the trigger
599 * @param groupName
600 * the group containing the trigger
601 * @return the number of rows updated
602 */
603 boolean triggerExists(Connection conn, String triggerName,
604 String groupName) throws SQLException;
605
606 /**
607 * <p>
608 * Update the state for a given trigger.
609 * </p>
610 *
611 * @param conn
612 * the DB Connection
613 * @param triggerName
614 * the name of the trigger
615 * @param groupName
616 * the group containing the trigger
617 * @param state
618 * the new state for the trigger
619 * @return the number of rows updated
620 */
621 int updateTriggerState(Connection conn, String triggerName,
622 String groupName, String state) throws SQLException;
623
624 /**
625 * <p>
626 * Update the given trigger to the given new state, if it is in the given
627 * old state.
628 * </p>
629 *
630 * @param conn
631 * the DB connection
632 * @param triggerName
633 * the name of the trigger
634 * @param groupName
635 * the group containing the trigger
636 * @param newState
637 * the new state for the trigger
638 * @param oldState
639 * the old state the trigger must be in
640 * @return int the number of rows updated
641 * @throws SQLException
642 */
643 int updateTriggerStateFromOtherState(Connection conn,
644 String triggerName, String groupName, String newState,
645 String oldState) throws SQLException;
646
647 /**
648 * <p>
649 * Update the given trigger to the given new state, if it is one of the
650 * given old states.
651 * </p>
652 *
653 * @param conn
654 * the DB connection
655 * @param triggerName
656 * the name of the trigger
657 * @param groupName
658 * the group containing the trigger
659 * @param newState
660 * the new state for the trigger
661 * @param oldState1
662 * one of the old state the trigger must be in
663 * @param oldState2
664 * one of the old state the trigger must be in
665 * @param oldState3
666 * one of the old state the trigger must be in
667 * @return int the number of rows updated
668 * @throws SQLException
669 */
670 int updateTriggerStateFromOtherStates(Connection conn,
671 String triggerName, String groupName, String newState,
672 String oldState1, String oldState2, String oldState3)
673 throws SQLException;
674
675 /**
676 * <p>
677 * Update the all triggers to the given new state, if they are in one of
678 * the given old states AND its next fire time is before the given time.
679 * </p>
680 *
681 * @param conn
682 * the DB connection
683 * @param newState
684 * the new state for the trigger
685 * @param oldState1
686 * one of the old state the trigger must be in
687 * @param oldState2
688 * one of the old state the trigger must be in
689 * @param time
690 * the time before which the trigger's next fire time must be
691 * @return int the number of rows updated
692 * @throws SQLException
693 */
694 int updateTriggerStateFromOtherStatesBeforeTime(Connection conn,
695 String newState, String oldState1, String oldState2, long time)
696 throws SQLException;
697
698 /**
699 * <p>
700 * Update all triggers in the given group to the given new state, if they
701 * are in one of the given old states.
702 * </p>
703 *
704 * @param conn
705 * the DB connection
706 * @param groupName
707 * the group containing the trigger
708 * @param newState
709 * the new state for the trigger
710 * @param oldState1
711 * one of the old state the trigger must be in
712 * @param oldState2
713 * one of the old state the trigger must be in
714 * @param oldState3
715 * one of the old state the trigger must be in
716 * @return int the number of rows updated
717 * @throws SQLException
718 */
719 int updateTriggerGroupStateFromOtherStates(Connection conn,
720 String groupName, String newState, String oldState1,
721 String oldState2, String oldState3) throws SQLException;
722
723 /**
724 * <p>
725 * Update all of the triggers of the given group to the given new state, if
726 * they are in the given old state.
727 * </p>
728 *
729 * @param conn
730 * the DB connection
731 * @param groupName
732 * the group containing the triggers
733 * @param newState
734 * the new state for the trigger group
735 * @param oldState
736 * the old state the triggers must be in
737 * @return int the number of rows updated
738 * @throws SQLException
739 */
740 int updateTriggerGroupStateFromOtherState(Connection conn,
741 String groupName, String newState, String oldState)
742 throws SQLException;
743
744 /**
745 * <p>
746 * Update the states of all triggers associated with the given job.
747 * </p>
748 *
749 * @param conn
750 * the DB Connection
751 * @param jobName
752 * the name of the job
753 * @param groupName
754 * the group containing the job
755 * @param state
756 * the new state for the triggers
757 * @return the number of rows updated
758 */
759 int updateTriggerStatesForJob(Connection conn, String jobName,
760 String groupName, String state) throws SQLException;
761
762 /**
763 * <p>
764 * Update the states of any triggers associated with the given job, that
765 * are the given current state.
766 * </p>
767 *
768 * @param conn
769 * the DB Connection
770 * @param jobName
771 * the name of the job
772 * @param groupName
773 * the group containing the job
774 * @param state
775 * the new state for the triggers
776 * @param oldState
777 * the old state of the triggers
778 * @return the number of rows updated
779 */
780 int updateTriggerStatesForJobFromOtherState(Connection conn,
781 String jobName, String groupName, String state, String oldState)
782 throws SQLException;
783
784 /**
785 * <p>
786 * Delete all of the listeners associated with a given trigger.
787 * </p>
788 *
789 * @param conn
790 * the DB Connection
791 * @param triggerName
792 * the name of the trigger whose listeners will be deleted
793 * @param groupName
794 * the name of the group containing the trigger
795 * @return the number of rows deleted
796 */
797 int deleteTriggerListeners(Connection conn, String triggerName,
798 String groupName) throws SQLException;
799
800 /**
801 * <p>
802 * Associate a listener with the given trigger.
803 * </p>
804 *
805 * @param conn
806 * the DB Connection
807 * @param trigger
808 * the trigger
809 * @param listener
810 * the name of the listener to associate with the trigger
811 * @return the number of rows inserted
812 */
813 int insertTriggerListener(Connection conn, Trigger trigger,
814 String listener) throws SQLException;
815
816 /**
817 * <p>
818 * Select the listeners associated with a given trigger.
819 * </p>
820 *
821 * @param conn
822 * the DB Connection
823 * @param triggerName
824 * the name of the trigger
825 * @param groupName
826 * the group containing the trigger
827 * @return array of <code>String</code> trigger listener names
828 */
829 String[] selectTriggerListeners(Connection conn, String triggerName,
830 String groupName) throws SQLException;
831
832 /**
833 * <p>
834 * Delete the simple trigger data for a trigger.
835 * </p>
836 *
837 * @param conn
838 * the DB Connection
839 * @param triggerName
840 * the name of the trigger
841 * @param groupName
842 * the group containing the trigger
843 * @return the number of rows deleted
844 */
845 int deleteSimpleTrigger(Connection conn, String triggerName,
846 String groupName) throws SQLException;
847
848 /**
849 * <p>
850 * Delete the BLOB trigger data for a trigger.
851 * </p>
852 *
853 * @param conn
854 * the DB Connection
855 * @param triggerName
856 * the name of the trigger
857 * @param groupName
858 * the group containing the trigger
859 * @return the number of rows deleted
860 */
861 int deleteBlobTrigger(Connection conn, String triggerName,
862 String groupName) throws SQLException;
863
864 /**
865 * <p>
866 * Delete the cron trigger data for a trigger.
867 * </p>
868 *
869 * @param conn
870 * the DB Connection
871 * @param triggerName
872 * the name of the trigger
873 * @param groupName
874 * the group containing the trigger
875 * @return the number of rows deleted
876 */
877 int deleteCronTrigger(Connection conn, String triggerName,
878 String groupName) throws SQLException;
879
880 /**
881 * <p>
882 * Delete the base trigger data for a trigger.
883 * </p>
884 *
885 * @param conn
886 * the DB Connection
887 * @param triggerName
888 * the name of the trigger
889 * @param groupName
890 * the group containing the trigger
891 * @return the number of rows deleted
892 */
893 int deleteTrigger(Connection conn, String triggerName,
894 String groupName) throws SQLException;
895
896 /**
897 * <p>
898 * Select the number of triggers associated with a given job.
899 * </p>
900 *
901 * @param conn
902 * the DB Connection
903 * @param jobName
904 * the name of the job
905 * @param groupName
906 * the group containing the job
907 * @return the number of triggers for the given job
908 */
909 int selectNumTriggersForJob(Connection conn, String jobName,
910 String groupName) throws SQLException;
911
912 /**
913 * <p>
914 * Select the job to which the trigger is associated.
915 * </p>
916 *
917 * @param conn
918 * the DB Connection
919 * @param triggerName
920 * the name of the trigger
921 * @param groupName
922 * the group containing the trigger
923 * @return the <code>{@link org.quartz.JobDetail}</code> object
924 * associated with the given trigger
925 */
926 JobDetail selectJobForTrigger(Connection conn, String triggerName,
927 String groupName, ClassLoadHelper loadHelper)
928 throws ClassNotFoundException, SQLException;
929
930 /**
931 * <p>
932 * Select the stateful jobs which are referenced by triggers in the given
933 * trigger group.
934 * </p>
935 *
936 * @param conn
937 * the DB Connection
938 * @param groupName
939 * the trigger group
940 * @return a List of Keys to jobs.
941 */
942 List selectStatefulJobsOfTriggerGroup(Connection conn,
943 String groupName) throws SQLException;
944
945 /**
946 * <p>
947 * Select the triggers for a job
948 * </p>
949 *
950 * @param conn
951 * the DB Connection
952 * @param jobName
953 * the name of the trigger
954 * @param groupName
955 * the group containing the trigger
956 * @return an array of <code>(@link org.quartz.Trigger)</code> objects
957 * associated with a given job.
958 * @throws SQLException
959 */
960 Trigger[] selectTriggersForJob(Connection conn, String jobName,
961 String groupName) throws SQLException, ClassNotFoundException,
962 IOException;
963
964 /**
965 * <p>
966 * Select the triggers for a calendar
967 * </p>
968 *
969 * @param conn
970 * the DB Connection
971 * @param calName
972 * the name of the calendar
973 * @return an array of <code>(@link org.quartz.Trigger)</code> objects
974 * associated with the given calendar.
975 * @throws SQLException
976 */
977 Trigger[] selectTriggersForCalendar(Connection conn, String calName)
978 throws SQLException, ClassNotFoundException, IOException;
979 /**
980 * <p>
981 * Select a trigger.
982 * </p>
983 *
984 * @param conn
985 * the DB Connection
986 * @param triggerName
987 * the name of the trigger
988 * @param groupName
989 * the group containing the trigger
990 * @return the <code>{@link org.quartz.Trigger}</code> object
991 */
992 Trigger selectTrigger(Connection conn, String triggerName,
993 String groupName) throws SQLException, ClassNotFoundException,
994 IOException;
995
996 /**
997 * <p>
998 * Select a trigger's JobDataMap.
999 * </p>
1000 *
1001 * @param conn
1002 * the DB Connection
1003 * @param triggerName
1004 * the name of the trigger
1005 * @param groupName
1006 * the group containing the trigger
1007 * @return the <code>{@link org.quartz.JobDataMap}</code> of the Trigger,
1008 * never null, but possibly empty.
1009 */
1010 JobDataMap selectTriggerJobDataMap(Connection conn, String triggerName,
1011 String groupName) throws SQLException, ClassNotFoundException,
1012 IOException;
1013
1014 /**
1015 * <p>
1016 * Select a trigger' state value.
1017 * </p>
1018 *
1019 * @param conn
1020 * the DB Connection
1021 * @param triggerName
1022 * the name of the trigger
1023 * @param groupName
1024 * the group containing the trigger
1025 * @return the <code>{@link org.quartz.Trigger}</code> object
1026 */
1027 String selectTriggerState(Connection conn, String triggerName,
1028 String groupName) throws SQLException;
1029
1030 /**
1031 * <p>
1032 * Select a trigger' status (state & next fire time).
1033 * </p>
1034 *
1035 * @param conn
1036 * the DB Connection
1037 * @param triggerName
1038 * the name of the trigger
1039 * @param groupName
1040 * the group containing the trigger
1041 * @return a <code>TriggerStatus</code> object, or null
1042 */
1043 TriggerStatus selectTriggerStatus(Connection conn,
1044 String triggerName, String groupName) throws SQLException;
1045
1046 /**
1047 * <p>
1048 * Select the total number of triggers stored.
1049 * </p>
1050 *
1051 * @param conn
1052 * the DB Connection
1053 * @return the total number of triggers stored
1054 */
1055 int selectNumTriggers(Connection conn) throws SQLException;
1056
1057 /**
1058 * <p>
1059 * Select all of the trigger group names that are stored.
1060 * </p>
1061 *
1062 * @param conn
1063 * the DB Connection
1064 * @return an array of <code>String</code> group names
1065 */
1066 String[] selectTriggerGroups(Connection conn) throws SQLException;
1067
1068 /**
1069 * <p>
1070 * Select all of the triggers contained in a given group.
1071 * </p>
1072 *
1073 * @param conn
1074 * the DB Connection
1075 * @param groupName
1076 * the group containing the triggers
1077 * @return an array of <code>String</code> trigger names
1078 */
1079 String[] selectTriggersInGroup(Connection conn, String groupName)
1080 throws SQLException;
1081
1082 /**
1083 * <p>
1084 * Select all of the triggers in a given state.
1085 * </p>
1086 *
1087 * @param conn
1088 * the DB Connection
1089 * @param state
1090 * the state the triggers must be in
1091 * @return an array of trigger <code>Key</code> s
1092 */
1093 Key[] selectTriggersInState(Connection conn, String state)
1094 throws SQLException;
1095
1096 int insertPausedTriggerGroup(Connection conn, String groupName)
1097 throws SQLException;
1098
1099 int deletePausedTriggerGroup(Connection conn, String groupName)
1100 throws SQLException;
1101
1102 int deleteAllPausedTriggerGroups(Connection conn)
1103 throws SQLException;
1104
1105 boolean isTriggerGroupPaused(Connection conn, String groupName)
1106 throws SQLException;
1107
1108 Set selectPausedTriggerGroups(Connection conn)
1109 throws SQLException;
1110
1111 boolean isExistingTriggerGroup(Connection conn, String groupName)
1112 throws SQLException;
1113
1114 //---------------------------------------------------------------------------
1115 // calendars
1116 //---------------------------------------------------------------------------
1117
1118 /**
1119 * <p>
1120 * Insert a new calendar.
1121 * </p>
1122 *
1123 * @param conn
1124 * the DB Connection
1125 * @param calendarName
1126 * the name for the new calendar
1127 * @param calendar
1128 * the calendar
1129 * @return the number of rows inserted
1130 * @throws IOException
1131 * if there were problems serializing the calendar
1132 */
1133 int insertCalendar(Connection conn, String calendarName,
1134 Calendar calendar) throws IOException, SQLException;
1135
1136 /**
1137 * <p>
1138 * Update a calendar.
1139 * </p>
1140 *
1141 * @param conn
1142 * the DB Connection
1143 * @param calendarName
1144 * the name for the new calendar
1145 * @param calendar
1146 * the calendar
1147 * @return the number of rows updated
1148 * @throws IOException
1149 * if there were problems serializing the calendar
1150 */
1151 int updateCalendar(Connection conn, String calendarName,
1152 Calendar calendar) throws IOException, SQLException;
1153
1154 /**
1155 * <p>
1156 * Check whether or not a calendar exists.
1157 * </p>
1158 *
1159 * @param conn
1160 * the DB Connection
1161 * @param calendarName
1162 * the name of the calendar
1163 * @return true if the trigger exists, false otherwise
1164 */
1165 boolean calendarExists(Connection conn, String calendarName)
1166 throws SQLException;
1167
1168 /**
1169 * <p>
1170 * Select a calendar.
1171 * </p>
1172 *
1173 * @param conn
1174 * the DB Connection
1175 * @param calendarName
1176 * the name of the calendar
1177 * @return the Calendar
1178 * @throws ClassNotFoundException
1179 * if a class found during deserialization cannot be found be
1180 * found
1181 * @throws IOException
1182 * if there were problems deserializing the calendar
1183 */
1184 Calendar selectCalendar(Connection conn, String calendarName)
1185 throws ClassNotFoundException, IOException, SQLException;
1186
1187 /**
1188 * <p>
1189 * Check whether or not a calendar is referenced by any triggers.
1190 * </p>
1191 *
1192 * @param conn
1193 * the DB Connection
1194 * @param calendarName
1195 * the name of the calendar
1196 * @return true if any triggers reference the calendar, false otherwise
1197 */
1198 boolean calendarIsReferenced(Connection conn, String calendarName)
1199 throws SQLException;
1200
1201 /**
1202 * <p>
1203 * Delete a calendar.
1204 * </p>
1205 *
1206 * @param conn
1207 * the DB Connection
1208 * @param calendarName
1209 * the name of the trigger
1210 * @return the number of rows deleted
1211 */
1212 int deleteCalendar(Connection conn, String calendarName)
1213 throws SQLException;
1214
1215 /**
1216 * <p>
1217 * Select the total number of calendars stored.
1218 * </p>
1219 *
1220 * @param conn
1221 * the DB Connection
1222 * @return the total number of calendars stored
1223 */
1224 int selectNumCalendars(Connection conn) throws SQLException;
1225
1226 /**
1227 * <p>
1228 * Select all of the stored calendars.
1229 * </p>
1230 *
1231 * @param conn
1232 * the DB Connection
1233 * @return an array of <code>String</code> calendar names
1234 */
1235 String[] selectCalendars(Connection conn) throws SQLException;
1236
1237 //---------------------------------------------------------------------------
1238 // trigger firing
1239 //---------------------------------------------------------------------------
1240
1241 /**
1242 * <p>
1243 * Select the next time that a trigger will be fired.
1244 * </p>
1245 *
1246 * @param conn
1247 * the DB Connection
1248 * @return the next fire time, or 0 if no trigger will be fired
1249 *
1250 * @deprecated Does not account for misfires.
1251 */
1252 long selectNextFireTime(Connection conn) throws SQLException;
1253
1254 /**
1255 * <p>
1256 * Select the trigger that will be fired at the given fire time.
1257 * </p>
1258 *
1259 * @param conn
1260 * the DB Connection
1261 * @param fireTime
1262 * the time that the trigger will be fired
1263 * @return a <code>{@link org.quartz.utils.Key}</code> representing the
1264 * trigger that will be fired at the given fire time, or null if no
1265 * trigger will be fired at that time
1266 */
1267 Key selectTriggerForFireTime(Connection conn, long fireTime)
1268 throws SQLException;
1269
1270 /**
1271 * <p>
1272 * Select the next trigger which will fire to fire between the two given timestamps
1273 * in ascending order of fire time, and then descending by priority.
1274 * </p>
1275 *
1276 * @param conn
1277 * the DB Connection
1278 * @param noLaterThan
1279 * highest value of <code>getNextFireTime()</code> of the triggers (exclusive)
1280 * @param noEarlierThan
1281 * highest value of <code>getNextFireTime()</code> of the triggers (inclusive)
1282 *
1283 * @return The next identifier of the next trigger to be fired.
1284 */
1285 Key selectTriggerToAcquire(Connection conn, long noLaterThan, long noEarlierThan)
1286 throws SQLException;
1287
1288 /**
1289 * <p>
1290 * Insert a fired trigger.
1291 * </p>
1292 *
1293 * @param conn
1294 * the DB Connection
1295 * @param trigger
1296 * the trigger
1297 * @param state
1298 * the state that the trigger should be stored in
1299 * @return the number of rows inserted
1300 */
1301 int insertFiredTrigger(Connection conn, Trigger trigger,
1302 String state, JobDetail jobDetail) throws SQLException;
1303
1304 /**
1305 * <p>
1306 * Select the states of all fired-trigger records for a given trigger, or
1307 * trigger group if trigger name is <code>null</code>.
1308 * </p>
1309 *
1310 * @return a List of FiredTriggerRecord objects.
1311 */
1312 List selectFiredTriggerRecords(Connection conn, String triggerName,
1313 String groupName) throws SQLException;
1314
1315 /**
1316 * <p>
1317 * Select the states of all fired-trigger records for a given job, or job
1318 * group if job name is <code>null</code>.
1319 * </p>
1320 *
1321 * @return a List of FiredTriggerRecord objects.
1322 */
1323 List selectFiredTriggerRecordsByJob(Connection conn, String jobName,
1324 String groupName) throws SQLException;
1325
1326 /**
1327 * <p>
1328 * Select the states of all fired-trigger records for a given scheduler
1329 * instance.
1330 * </p>
1331 *
1332 * @return a List of FiredTriggerRecord objects.
1333 */
1334 List selectInstancesFiredTriggerRecords(Connection conn,
1335 String instanceName) throws SQLException;
1336
1337
1338 /**
1339 * <p>
1340 * Select the distinct instance names of all fired-trigger records.
1341 * </p>
1342 *
1343 * <p>
1344 * This is useful when trying to identify orphaned fired triggers (a
1345 * fired trigger without a scheduler state record.)
1346 * </p>
1347 *
1348 * @return a Set of String objects.
1349 */
1350 Set selectFiredTriggerInstanceNames(Connection conn)
1351 throws SQLException;
1352
1353 /**
1354 * <p>
1355 * Delete a fired trigger.
1356 * </p>
1357 *
1358 * @param conn
1359 * the DB Connection
1360 * @param entryId
1361 * the fired trigger entry to delete
1362 * @return the number of rows deleted
1363 */
1364 int deleteFiredTrigger(Connection conn, String entryId)
1365 throws SQLException;
1366
1367 /**
1368 * <p>
1369 * Get the number instances of the identified job currently executing.
1370 * </p>
1371 *
1372 * @param conn
1373 * the DB Connection
1374 * @return the number instances of the identified job currently executing.
1375 */
1376 int selectJobExecutionCount(Connection conn, String jobName,
1377 String jobGroup) throws SQLException;
1378
1379 /**
1380 * <p>
1381 * Insert a scheduler-instance state record.
1382 * </p>
1383 *
1384 * @param conn
1385 * the DB Connection
1386 * @return the number of inserted rows.
1387 */
1388 int insertSchedulerState(Connection conn, String instanceId,
1389 long checkInTime, long interval)
1390 throws SQLException;
1391
1392 /**
1393 * <p>
1394 * Delete a scheduler-instance state record.
1395 * </p>
1396 *
1397 * @param conn
1398 * the DB Connection
1399 * @return the number of deleted rows.
1400 */
1401 int deleteSchedulerState(Connection conn, String instanceId)
1402 throws SQLException;
1403
1404
1405 /**
1406 * <p>
1407 * Update a scheduler-instance state record.
1408 * </p>
1409 *
1410 * @param conn
1411 * the DB Connection
1412 * @return the number of updated rows.
1413 */
1414 int updateSchedulerState(Connection conn, String instanceId, long checkInTime)
1415 throws SQLException;
1416
1417 /**
1418 * <p>
1419 * A List of all current <code>SchedulerStateRecords</code>.
1420 * </p>
1421 *
1422 * <p>
1423 * If instanceId is not null, then only the record for the identified
1424 * instance will be returned.
1425 * </p>
1426 *
1427 * @param conn
1428 * the DB Connection
1429 */
1430 List selectSchedulerStateRecords(Connection conn, String instanceId)
1431 throws SQLException;
1432
1433 }
1434
1435 // EOF