This project has retired. For details please refer to its
Attic page.
001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.oozie;
019
020 import java.io.DataInput;
021 import java.io.DataOutput;
022 import java.io.IOException;
023 import java.sql.Timestamp;
024 import java.util.Date;
025
026 import javax.persistence.Basic;
027 import javax.persistence.Column;
028 import javax.persistence.Entity;
029 import javax.persistence.Lob;
030 import javax.persistence.NamedQueries;
031 import javax.persistence.NamedQuery;
032
033 import org.apache.hadoop.io.Writable;
034 import org.apache.oozie.client.BundleJob;
035 import org.apache.oozie.client.Job;
036 import org.apache.oozie.client.rest.JsonBundleJob;
037 import org.apache.oozie.util.DateUtils;
038 import org.apache.oozie.util.WritableUtils;
039 import org.apache.openjpa.persistence.jdbc.Index;
040
041 @Entity
042 @NamedQueries( {
043 @NamedQuery(name = "UPDATE_BUNDLE_JOB", query = "update BundleJobBean w set w.appName = :appName, w.appPath = :appPath, w.conf = :conf, w.externalId = :externalId, w.timeOut = :timeOut, w.createdTimestamp = :createdTimestamp, w.endTimestamp = :endTimestamp, w.jobXml = :jobXml, w.lastModifiedTimestamp = :lastModifiedTimestamp, w.origJobXml = :origJobXml, w.startTimestamp = :startTimestamp, w.status = :status, w.timeUnitStr = :timeUnit, w.pending = :pending where w.id = :id"),
044
045 @NamedQuery(name = "UPDATE_BUNDLE_JOB_STATUS", query = "update BundleJobBean w set w.status = :status, w.lastModifiedTimestamp = :lastModifiedTimestamp, w.pending = :pending where w.id = :id"),
046
047 @NamedQuery(name = "DELETE_BUNDLE_JOB", query = "delete from BundleJobBean w where w.id = :id"),
048
049 @NamedQuery(name = "GET_BUNDLE_JOBS", query = "select OBJECT(w) from BundleJobBean w"),
050
051 @NamedQuery(name = "GET_BUNDLE_JOB", query = "select OBJECT(w) from BundleJobBean w where w.id = :id"),
052
053 @NamedQuery(name = "GET_BUNDLE_JOBS_COUNT", query = "select count(w) from BundleJobBean w"),
054
055 @NamedQuery(name = "GET_BUNDLE_JOBS_COLUMNS", query = "select w.id, w.appName, w.appPath, w.conf, w.status, w.kickoffTimestamp, w.startTimestamp, w.endTimestamp, w.pauseTimestamp, w.createdTimestamp, w.user, w.group, w.timeUnitStr, w.timeOut from BundleJobBean w order by w.createdTimestamp desc"),
056
057 @NamedQuery(name = "GET_BUNDLE_JOBS_RUNNING_OR_PENDING", query = "select OBJECT(w) from BundleJobBean w where w.status = 'RUNNING' OR w.status = 'RUNNINGWITHERROR' OR w.pending = 1 order by w.lastModifiedTimestamp"),
058
059 @NamedQuery(name = "GET_BUNDLE_JOBS_NEED_START", query = "select OBJECT(w) from BundleJobBean w where w.status = 'PREP' AND (w.kickoffTimestamp IS NULL OR (w.kickoffTimestamp IS NOT NULL AND w.kickoffTimestamp <= :currentTime)) order by w.lastModifiedTimestamp"),
060
061 @NamedQuery(name = "GET_BUNDLE_JOBS_PAUSED", query = "select OBJECT(w) from BundleJobBean w where w.status = 'PAUSED' OR w.status = 'PAUSEDWITHERROR' OR w.status = 'PREPPAUSED' order by w.lastModifiedTimestamp"),
062
063 @NamedQuery(name = "GET_BUNDLE_JOBS_UNPAUSED", query = "select OBJECT(w) from BundleJobBean w where w.status = 'RUNNING' OR w.status = 'RUNNINGWITHERROR' OR w.status = 'PREP' order by w.lastModifiedTimestamp"),
064
065 @NamedQuery(name = "GET_BUNDLE_JOBS_OLDER_THAN", query = "select OBJECT(w) from BundleJobBean w where w.startTimestamp <= :matTime AND (w.status = 'PREP' OR w.status = 'RUNNING' or w.status = 'RUNNINGWITHERROR') order by w.lastModifiedTimestamp"),
066
067 @NamedQuery(name = "GET_BUNDLE_JOBS_OLDER_THAN_STATUS", query = "select OBJECT(w) from BundleJobBean w where w.status = :status AND w.lastModifiedTimestamp <= :lastModTime order by w.lastModifiedTimestamp"),
068
069 @NamedQuery(name = "GET_COMPLETED_BUNDLE_JOBS_OLDER_THAN", query = "select w.id from BundleJobBean w where ( w.status = 'SUCCEEDED' OR w.status = 'FAILED' OR w.status = 'KILLED' OR w.status = 'DONEWITHERROR') AND w.lastModifiedTimestamp <= :lastModTime order by w.lastModifiedTimestamp"),
070
071 @NamedQuery(name = "BULK_MONITOR_BUNDLE_QUERY", query = "SELECT b.id, b.status, b.user FROM BundleJobBean b WHERE b.appName = :appName"),
072
073 // Join query
074 @NamedQuery(name = "BULK_MONITOR_ACTIONS_QUERY", query = "SELECT a.id, a.actionNumber, a.errorCode, a.errorMessage, a.externalId, " +
075 "a.externalStatus, a.status, a.createdTimestamp, a.nominalTimestamp, a.missingDependencies, " +
076 "c.id, c.appName, c.status FROM CoordinatorActionBean a, CoordinatorJobBean c " +
077 "WHERE a.jobId = c.id AND c.bundleId = :bundleId ORDER BY a.jobId, a.createdTimestamp"),
078
079 @NamedQuery(name = "BULK_MONITOR_COUNT_QUERY", query = "SELECT COUNT(a) FROM CoordinatorActionBean a, CoordinatorJobBean c"),
080
081 @NamedQuery(name = "GET_BUNDLE_JOB_FOR_USER", query = "select w.user from BundleJobBean w where w.id = :id") })
082 public class BundleJobBean extends JsonBundleJob implements Writable {
083
084 @Basic
085 @Index
086 @Column(name = "status")
087 private String status = Job.Status.PREP.toString();
088
089 @Basic
090 @Column(name = "kickoff_time")
091 private java.sql.Timestamp kickoffTimestamp = null;
092
093 @Basic
094 @Column(name = "start_time")
095 private java.sql.Timestamp startTimestamp = null;
096
097 @Basic
098 @Column(name = "end_time")
099 private java.sql.Timestamp endTimestamp = null;
100
101 @Basic
102 @Column(name = "pause_time")
103 private java.sql.Timestamp pauseTimestamp = null;
104
105 @Basic
106 @Index
107 @Column(name = "created_time")
108 private java.sql.Timestamp createdTimestamp = null;
109
110 @Basic
111 @Column(name = "time_unit")
112 private String timeUnitStr = BundleJob.Timeunit.NONE.toString();
113
114 @Basic
115 @Column(name = "pending")
116 private int pending = 0;
117
118 @Basic
119 @Index
120 @Column(name = "last_modified_time")
121 private java.sql.Timestamp lastModifiedTimestamp = null;
122
123 @Basic
124 @Index
125 @Column(name = "suspended_time")
126 private java.sql.Timestamp suspendedTimestamp = null;
127
128 @Column(name = "job_xml")
129 @Lob
130 private String jobXml = null;
131
132 @Column(name = "orig_job_xml")
133 @Lob
134 private String origJobXml = null;
135
136 /**
137 * @return the kickoffTimestamp
138 */
139 public java.sql.Timestamp getKickoffTimestamp() {
140 return kickoffTimestamp;
141 }
142
143 /**
144 * @return the startTimestamp
145 */
146 public java.sql.Timestamp getstartTimestamp() {
147 return startTimestamp;
148 }
149
150 /**
151 * @param kickoffTimestamp the kickoffTimestamp to set
152 */
153 public void setKickoffTimestamp(java.sql.Timestamp kickoffTimestamp) {
154 super.setKickoffTime(DateUtils.toDate(kickoffTimestamp));
155 this.kickoffTimestamp = kickoffTimestamp;
156 }
157
158 /**
159 * @param startTimestamp the startTimestamp to set
160 */
161 public void setStartTimestamp(java.sql.Timestamp startTimestamp) {
162 super.setStartTime(DateUtils.toDate(startTimestamp));
163 this.startTimestamp = startTimestamp;
164 }
165
166 /**
167 * Set startTime
168 *
169 * @param startTime the startTime to set
170 */
171 @Override
172 public void setStartTime(Date startTime) {
173 super.setStartTime(startTime);
174 this.startTimestamp = DateUtils.convertDateToTimestamp(startTime);
175 }
176
177 /**
178 * @return the endTimestamp
179 */
180 public java.sql.Timestamp getEndTimestamp() {
181 return endTimestamp;
182 }
183
184 /**
185 * @param endTimestamp the endTimestamp to set
186 */
187 public void setEndTimestamp(java.sql.Timestamp endTimestamp) {
188 super.setEndTime(DateUtils.toDate(endTimestamp));
189 this.endTimestamp = endTimestamp;
190 }
191
192 /**
193 * @return the pauseTimestamp
194 */
195 public java.sql.Timestamp getPauseTimestamp() {
196 return pauseTimestamp;
197 }
198
199 /**
200 * @param pauseTimestamp the pauseTimestamp to set
201 */
202 public void setPauseTimestamp(java.sql.Timestamp pauseTimestamp) {
203 super.setPauseTime(DateUtils.toDate(pauseTimestamp));
204 this.pauseTimestamp = pauseTimestamp;
205 }
206
207 /**
208 * @return the createdTimestamp
209 */
210 public java.sql.Timestamp getCreatedTimestamp() {
211 return createdTimestamp;
212 }
213
214 /**
215 * @return the createdTime
216 */
217 @Override
218 public Date getCreatedTime() {
219 return DateUtils.toDate(createdTimestamp);
220 }
221
222 /**
223 * @return the timeUnitStr
224 */
225 public String getTimeUnitStr() {
226 return timeUnitStr;
227 }
228
229 /**
230 * @return the pending
231 */
232 public int getPending() {
233 return pending;
234 }
235
236 /**
237 * Set pending to true
238 *
239 * @param pending set pending to true
240 */
241 @Override
242 public void setPending() {
243 super.setPending();
244 this.pending = 1;
245 }
246
247 /**
248 * Set pending to false
249 *
250 * @param pending set pending to false
251 */
252 @Override
253 public void resetPending() {
254 super.resetPending();
255 this.pending = 0;
256 }
257
258 /**
259 * Return if the action is pending.
260 *
261 * @return if the action is pending.
262 */
263 public boolean isPending() {
264 return pending == 1 ? true : false;
265 }
266
267 /**
268 * @return the lastModifiedTimestamp
269 */
270 public java.sql.Timestamp getLastModifiedTimestamp() {
271 return lastModifiedTimestamp;
272 }
273
274 /**
275 * @param lastModifiedTimestamp the lastModifiedTimestamp to set
276 */
277 public void setLastModifiedTimestamp(java.sql.Timestamp lastModifiedTimestamp) {
278 this.lastModifiedTimestamp = lastModifiedTimestamp;
279 }
280
281 /**
282 * @return the suspendedTimestamp
283 */
284 public Timestamp getSuspendedTimestamp() {
285 return suspendedTimestamp;
286 }
287
288 /**
289 * @param suspendedTimestamp the suspendedTimestamp to set
290 */
291 public void setSuspendedTimestamp(Timestamp suspendedTimestamp) {
292 this.suspendedTimestamp = suspendedTimestamp;
293 }
294
295 /**
296 * @return the jobXml
297 */
298 public String getJobXml() {
299 return jobXml;
300 }
301
302 /**
303 * @param jobXml the jobXml to set
304 */
305 public void setJobXml(String jobXml) {
306 this.jobXml = jobXml;
307 }
308
309 /**
310 * @return the origJobXml
311 */
312 public String getOrigJobXml() {
313 return origJobXml;
314 }
315
316 /**
317 * @param origJobXml the origJobXml to set
318 */
319 public void setOrigJobXml(String origJobXml) {
320 this.origJobXml = origJobXml;
321 }
322
323 /**
324 * @param createTime the createdTime to set
325 */
326 @Override
327 public void setCreatedTime(Date createTime) {
328 super.setCreatedTime(createTime);
329 this.createdTimestamp = DateUtils.convertDateToTimestamp(createTime);
330 }
331
332 /**
333 * @param lastModifiedTime
334 */
335 public void setLastModifiedTime(Date lastModifiedTime) {
336 this.lastModifiedTimestamp = DateUtils.convertDateToTimestamp(lastModifiedTime);
337 }
338
339 /**
340 * Get last modified time
341 *
342 * @return last modified time
343 */
344 public Date getLastModifiedTime() {
345 return DateUtils.toDate(lastModifiedTimestamp);
346 }
347
348 /* (non-Javadoc)
349 * @see org.apache.hadoop.io.Writable#write(java.io.DataOutput)
350 */
351 @Override
352 public void write(DataOutput dataOutput) throws IOException {
353 WritableUtils.writeStr(dataOutput, getAppPath());
354 WritableUtils.writeStr(dataOutput, getAppName());
355 WritableUtils.writeStr(dataOutput, getId());
356 WritableUtils.writeStr(dataOutput, getConf());
357 WritableUtils.writeStr(dataOutput, getStatusStr());
358 WritableUtils.writeStr(dataOutput, getTimeUnit().toString());
359 dataOutput.writeLong((getKickoffTime() != null) ? getKickoffTime().getTime() : -1);
360 dataOutput.writeLong((getStartTime() != null) ? getStartTime().getTime() : -1);
361 dataOutput.writeLong((getEndTime() != null) ? getEndTime().getTime() : -1);
362 WritableUtils.writeStr(dataOutput, getUser());
363 WritableUtils.writeStr(dataOutput, getGroup());
364 WritableUtils.writeStr(dataOutput, getExternalId());
365 dataOutput.writeInt(getTimeout());
366 }
367
368 /* (non-Javadoc)
369 * @see org.apache.hadoop.io.Writable#readFields(java.io.DataInput)
370 */
371 @Override
372 public void readFields(DataInput dataInput) throws IOException {
373
374 setAppPath(WritableUtils.readStr(dataInput));
375 setAppName(WritableUtils.readStr(dataInput));
376 setId(WritableUtils.readStr(dataInput));
377 setConf(WritableUtils.readStr(dataInput));
378 setStatus(BundleJob.Status.valueOf(WritableUtils.readStr(dataInput)));
379 setTimeUnit(BundleJob.Timeunit.valueOf(WritableUtils.readStr(dataInput)));
380
381 long d = dataInput.readLong();
382 if (d != -1) {
383 setKickoffTime(new Date(d));
384 }
385 d = dataInput.readLong();
386 if (d != -1) {
387 setStartTime(new Date(d));
388 }
389 d = dataInput.readLong();
390 if (d != -1) {
391 setEndTime(new Date(d));
392 }
393 setUser(WritableUtils.readStr(dataInput));
394 setGroup(WritableUtils.readStr(dataInput));
395 setExternalId(WritableUtils.readStr(dataInput));
396 setTimeOut(dataInput.readInt());
397 }
398
399 /* (non-Javadoc)
400 * @see org.apache.oozie.client.rest.JsonBundleJob#getStatus()
401 */
402 @Override
403 public Status getStatus() {
404 return Status.valueOf(this.status);
405 }
406
407 /**
408 * @return status string
409 */
410 public String getStatusStr() {
411 return status;
412 }
413
414 /* (non-Javadoc)
415 * @see org.apache.oozie.client.rest.JsonBundleJob#getEndTime()
416 */
417 @Override
418 public Date getEndTime() {
419 return DateUtils.toDate(endTimestamp);
420 }
421
422 /* (non-Javadoc)
423 * @see org.apache.oozie.client.rest.JsonBundleJob#getKickoffTime()
424 */
425 @Override
426 public Date getKickoffTime() {
427 return DateUtils.toDate(kickoffTimestamp);
428 }
429
430 /* (non-Javadoc)
431 * @see org.apache.oozie.client.rest.JsonBundleJob#getTimeUnit()
432 */
433 @Override
434 public Timeunit getTimeUnit() {
435 return Timeunit.valueOf(this.timeUnitStr);
436 }
437
438 /* (non-Javadoc)
439 * @see org.apache.oozie.client.rest.JsonBundleJob#setEndTime(java.util.Date)
440 */
441 @Override
442 public void setEndTime(Date endTime) {
443 super.setEndTime(endTime);
444 this.endTimestamp = DateUtils.convertDateToTimestamp(endTime);
445 }
446
447 /* (non-Javadoc)
448 * @see org.apache.oozie.client.rest.JsonBundleJob#setKickoffTime(java.util.Date)
449 */
450 @Override
451 public void setKickoffTime(Date kickoffTime) {
452 super.setKickoffTime(kickoffTime);
453 this.kickoffTimestamp = DateUtils.convertDateToTimestamp(kickoffTime);
454 }
455
456 @Override
457 /* (non-Javadoc)
458 * @see org.apache.oozie.client.rest.JsonBundleJob#getPauseTime()
459 */
460 public Date getPauseTime() {
461 return DateUtils.toDate(pauseTimestamp);
462 }
463
464 /* (non-Javadoc)
465 * @see org.apache.oozie.client.rest.JsonBundleJob#setPauseTime(java.util.Date)
466 */
467 @Override
468 public void setPauseTime(Date pauseTime) {
469 super.setPauseTime(pauseTime);
470 this.pauseTimestamp = DateUtils.convertDateToTimestamp(pauseTime);
471 }
472
473 /* (non-Javadoc)
474 * @see org.apache.oozie.client.rest.JsonBundleJob#setStatus(org.apache.oozie.client.BundleJob.Status)
475 */
476 @Override
477 public void setStatus(org.apache.oozie.client.BundleJob.Status val) {
478 super.setStatus(val);
479 this.status = val.toString();
480 }
481
482 /* (non-Javadoc)
483 * @see org.apache.oozie.client.rest.JsonBundleJob#setTimeUnit(org.apache.oozie.client.BundleJob.Timeunit)
484 */
485 @Override
486 public void setTimeUnit(Timeunit timeUnit) {
487 super.setTimeUnit(timeUnit);
488 this.timeUnitStr = timeUnit.toString();
489 }
490
491 /**
492 * @param return the suspendTime
493 */
494 public void setSuspendedTime(Date suspendTime) {
495 this.suspendedTimestamp = DateUtils.convertDateToTimestamp(suspendTime);
496 }
497
498 }