1
22
23 package com.liferay.portal.job;
24
25 import com.liferay.portal.kernel.job.IntervalJob;
26 import com.liferay.portal.kernel.job.JobScheduler;
27 import com.liferay.portal.kernel.log.Log;
28 import com.liferay.portal.kernel.log.LogFactoryUtil;
29 import com.liferay.portal.kernel.util.ServerDetector;
30 import com.liferay.portal.kernel.util.StringPool;
31 import com.liferay.portal.kernel.util.Time;
32
33 import java.util.Date;
34
35 import org.quartz.JobDetail;
36 import org.quartz.Scheduler;
37 import org.quartz.SimpleTrigger;
38 import org.quartz.Trigger;
39
40
45 public class JobSchedulerImpl implements JobScheduler {
46
47 public void schedule(IntervalJob intervalJob) {
48 if (intervalJob == null) {
49 return;
50 }
51
52 try {
53 if (_scheduler.isShutdown()) {
54 return;
55 }
56 }
57 catch (Exception e) {
58 _log.error(e, e);
59 }
60
61 String jobName =
62 intervalJob.getClass().getName() + StringPool.AT +
63 intervalJob.hashCode();
64
65 JobClassUtil.put(jobName, (Class<IntervalJob>)intervalJob.getClass());
66
67 Date startTime = null;
68
69 try {
70 if (ServerDetector.getServerId().equals(ServerDetector.TOMCAT_ID)) {
71 startTime = new Date(System.currentTimeMillis() + Time.MINUTE);
72 }
73 }
74 catch (RuntimeException re) {
75
76
79 }
80
81 if (startTime == null) {
82 startTime = new Date(System.currentTimeMillis() + Time.MINUTE * 3);
83 }
84
85 Date endTime = null;
86
87 JobDetail jobDetail = new JobDetail(
88 jobName, Scheduler.DEFAULT_GROUP, JobWrapper.class);
89
90 Trigger trigger = new SimpleTrigger(
91 jobName, Scheduler.DEFAULT_GROUP, startTime, endTime,
92 SimpleTrigger.REPEAT_INDEFINITELY, intervalJob.getInterval());
93
94 try {
95 _scheduler.scheduleJob(jobDetail, trigger);
96 }
97 catch (Exception e) {
98 _log.error(e, e);
99 }
100 }
101
102 public void setScheduler(Scheduler scheduler) {
103 _scheduler = scheduler;
104 }
105
106 public void shutdown() {
107 try {
108 if (!_scheduler.isShutdown()) {
109 _scheduler.shutdown();
110 }
111 }
112 catch (Exception e) {
113 _log.error(e, e);
114 }
115 }
116
117 public void unschedule(IntervalJob intervalJob) {
118 if (intervalJob == null) {
119 return;
120 }
121
122 try {
123 if (_scheduler.isShutdown()) {
124 return;
125 }
126 }
127 catch (Exception e) {
128 _log.error(e, e);
129 }
130
131 try {
132 String jobName =
133 intervalJob.getClass().getName() + StringPool.AT +
134 intervalJob.hashCode();
135
136 _scheduler.unscheduleJob(jobName, Scheduler.DEFAULT_GROUP);
137 }
138 catch (Exception e) {
139 _log.error(e, e);
140 }
141 }
142
143 private static Log _log = LogFactoryUtil.getLog(JobScheduler.class);
144
145 private Scheduler _scheduler;
146
147 }