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