1 package org.apache.turbine.services.schedule;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Date;
23 import java.util.concurrent.atomic.AtomicBoolean;
24
25 import org.apache.commons.lang3.StringUtils;
26 import org.apache.turbine.modules.ScheduledJobLoader;
27 import org.apache.turbine.util.TurbineException;
28 import org.quartz.Job;
29 import org.quartz.JobBuilder;
30 import org.quartz.JobDetail;
31 import org.quartz.JobExecutionContext;
32 import org.quartz.JobExecutionException;
33 import org.quartz.Trigger;
34 import org.quartz.core.QuartzScheduler;
35
36
37
38
39
40
41 public class JobEntryQuartz implements JobEntry, Job
42 {
43 private int jobId;
44 private Trigger jobTrigger;
45 private JobDetail jobDetail;
46 private String task;
47 private boolean isnew = true;
48 private AtomicBoolean active = new AtomicBoolean(false);
49
50
51
52
53 public static final String DEFAULT_JOB_GROUP_NAME = "TURBINE";
54
55
56
57
58 public JobEntryQuartz()
59 {
60 super();
61 }
62
63
64
65
66
67
68 public JobEntryQuartz(Trigger jobTrigger)
69 {
70 this(jobTrigger, JobBuilder
71 .newJob(JobEntryQuartz.class)
72 .withIdentity(jobTrigger.getJobKey().getName(), DEFAULT_JOB_GROUP_NAME).build());
73 }
74
75
76
77
78
79
80
81 public JobEntryQuartz(Trigger jobTrigger, JobDetail jobDetail)
82 {
83 this();
84 setTask(jobTrigger.getJobKey().getName());
85 this.jobTrigger = jobTrigger;
86 this.jobDetail = jobDetail;
87 }
88
89
90
91
92 @Override
93 public boolean isNew()
94 {
95 boolean _isnew = isnew;
96 isnew = false;
97 return _isnew;
98 }
99
100
101
102
103
104
105 @Override
106 public int getJobId()
107 {
108 return jobId;
109 }
110
111
112
113
114
115
116 @Override
117 public void setJobId(int v)
118 {
119 this.jobId = v;
120 }
121
122
123
124
125
126
127 @Override
128 public String getTask()
129 {
130 return task;
131 }
132
133
134
135
136
137
138 @Override
139 public void setTask(String v)
140 {
141 this.task = v;
142 }
143
144
145
146
147 public Trigger getJobTrigger()
148 {
149 return jobTrigger;
150 }
151
152
153
154
155 public void setJobTrigger(Trigger jobTrigger)
156 {
157 this.jobTrigger = jobTrigger;
158 }
159
160
161
162
163 public JobDetail getJobDetail()
164 {
165 return jobDetail;
166 }
167
168
169
170
171 @Override
172 public int compareTo(JobEntry o)
173 {
174 return jobTrigger.compareTo(((JobEntryQuartz)o).getJobTrigger());
175 }
176
177
178
179
180 @Override
181 public void setActive(boolean isActive)
182 {
183 this.active.set(isActive);
184 }
185
186
187
188
189 @Override
190 public boolean isActive()
191 {
192 return active.get();
193 }
194
195
196
197
198 @Override
199 public long getNextRuntime()
200 {
201 return getNextRunDate().getTime();
202 }
203
204
205
206
207 @Override
208 public Date getNextRunDate()
209 {
210 return jobTrigger.getNextFireTime();
211 }
212
213
214
215
216 @Override
217 public String getNextRunAsString()
218 {
219 return getNextRunDate().toString();
220 }
221
222
223
224
225 @Override
226 public void calcRunTime() throws TurbineException
227 {
228
229 }
230
231
232
233
234 @Override
235 public void execute(JobExecutionContext context) throws JobExecutionException
236 {
237 if (active.compareAndSet(false, true) == false)
238 {
239 return;
240 }
241
242 try
243 {
244 String task = getTask();
245 if (StringUtils.isEmpty(task))
246 {
247
248 task = context.getJobDetail().getKey().getName();
249 }
250 ScheduledJobLoader.getInstance().exec(this, task);
251 }
252 catch (Exception e)
253 {
254 throw new JobExecutionException("Error executing scheduled job #" +
255 getJobId() + ", task: " + getTask(), e);
256 }
257 finally
258 {
259 active.compareAndSet(true, false);
260 }
261 }
262 }