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.CoordinatorJob; 035 import org.apache.oozie.client.rest.JsonCoordinatorJob; 036 import org.apache.oozie.util.DateUtils; 037 import org.apache.oozie.util.WritableUtils; 038 import org.apache.openjpa.persistence.jdbc.Index; 039 040 @Entity 041 @NamedQueries( { 042 @NamedQuery(name = "UPDATE_COORD_JOB", query = "update CoordinatorJobBean w set w.appName = :appName, w.appPath = :appPath, w.concurrency = :concurrency, w.conf = :conf, w.externalId = :externalId, w.frequency = :frequency, w.lastActionNumber = :lastActionNumber, w.timeOut = :timeOut, w.timeZone = :timeZone, w.authToken = :authToken, w.createdTimestamp = :createdTime, w.endTimestamp = :endTime, w.execution = :execution, w.jobXml = :jobXml, w.lastActionTimestamp = :lastAction, w.lastModifiedTimestamp = :lastModifiedTime, w.nextMaterializedTimestamp = :nextMaterializedTime, w.origJobXml = :origJobXml, w.slaXml=:slaXml, w.startTimestamp = :startTime, w.status = :status, w.timeUnitStr = :timeUnit where w.id = :id"), 043 044 @NamedQuery(name = "UPDATE_COORD_JOB_STATUS", query = "update CoordinatorJobBean w set w.status = :status, w.lastModifiedTimestamp = :lastModifiedTime where w.id = :id"), 045 046 @NamedQuery(name = "UPDATE_COORD_JOB_PENDING", query = "update CoordinatorJobBean w set w.pending = :pending, w.lastModifiedTimestamp = :lastModifiedTime where w.id = :id"), 047 048 @NamedQuery(name = "DELETE_COORD_JOB", query = "delete from CoordinatorJobBean w where w.id = :id"), 049 050 @NamedQuery(name = "GET_COORD_JOBS", query = "select OBJECT(w) from CoordinatorJobBean w"), 051 052 @NamedQuery(name = "GET_COORD_JOB", query = "select OBJECT(w) from CoordinatorJobBean w where w.id = :id"), 053 054 @NamedQuery(name = "GET_COORD_JOBS_PENDING", query = "select OBJECT(w) from CoordinatorJobBean w where w.pending = 1 order by w.lastModifiedTimestamp"), 055 056 @NamedQuery(name = "GET_COORD_JOBS_COUNT", query = "select count(w) from CoordinatorJobBean w"), 057 058 @NamedQuery(name = "GET_COORD_JOBS_COLUMNS", query = "select w.id, w.appName, w.status, w.user, w.group, w.startTimestamp, w.endTimestamp, w.appPath, w.concurrency, w.frequency, w.lastActionTimestamp, w.nextMaterializedTimestamp, w.createdTimestamp, w.timeUnitStr, w.timeZone, w.timeOut from CoordinatorJobBean w order by w.createdTimestamp desc"), 059 060 @NamedQuery(name = "GET_COORD_JOBS_OLDER_THAN", query = "select OBJECT(w) from CoordinatorJobBean w where w.startTimestamp <= :matTime AND (w.status = 'PREP' OR w.status = 'RUNNING' or w.status = 'RUNNINGWITHERROR') AND (w.nextMaterializedTimestamp < :matTime OR w.nextMaterializedTimestamp IS NULL) AND (w.nextMaterializedTimestamp IS NULL OR (w.endTimestamp > w.nextMaterializedTimestamp AND (w.pauseTimestamp IS NULL OR w.pauseTimestamp > w.nextMaterializedTimestamp))) order by w.lastModifiedTimestamp"), 061 062 @NamedQuery(name = "GET_COORD_JOBS_OLDER_THAN_STATUS", query = "select OBJECT(w) from CoordinatorJobBean w where w.status = :status AND w.lastModifiedTimestamp <= :lastModTime order by w.lastModifiedTimestamp"), 063 064 @NamedQuery(name = "GET_COMPLETED_COORD_JOBS_OLDER_THAN_STATUS", query = "select OBJECT(w) from CoordinatorJobBean w where ( w.status = 'SUCCEEDED' OR w.status = 'FAILED' or w.status = 'KILLED') AND w.lastModifiedTimestamp <= :lastModTime order by w.lastModifiedTimestamp"), 065 066 @NamedQuery(name = "GET_COORD_JOBS_UNPAUSED", query = "select OBJECT(w) from CoordinatorJobBean w where w.status = 'RUNNING' OR w.status = 'RUNNINGWITHERROR' OR w.status = 'PREP' order by w.lastModifiedTimestamp"), 067 068 @NamedQuery(name = "GET_COORD_JOBS_PAUSED", query = "select OBJECT(w) from CoordinatorJobBean w where w.status = 'PAUSED' OR w.status = 'PAUSEDWITHERROR' OR w.status = 'PREPPAUSED' order by w.lastModifiedTimestamp"), 069 070 @NamedQuery(name = "GET_COORD_JOBS_FOR_BUNDLE", query = "select OBJECT(w) from CoordinatorJobBean w where w.bundleId = :bundleId order by w.lastModifiedTimestamp") }) 071 public class CoordinatorJobBean extends JsonCoordinatorJob implements Writable { 072 073 @Basic 074 @Index 075 @Column(name = "status") 076 private String status = CoordinatorJob.Status.PREP.toString(); 077 078 @Basic 079 @Column(name = "auth_token") 080 @Lob 081 private String authToken = null; 082 083 @Basic 084 @Column(name = "start_time") 085 private java.sql.Timestamp startTimestamp = null; 086 087 @Basic 088 @Column(name = "end_time") 089 private java.sql.Timestamp endTimestamp = null; 090 091 @Basic 092 @Column(name = "pause_time") 093 private java.sql.Timestamp pauseTimestamp = null; 094 095 @Basic 096 @Index 097 @Column(name = "created_time") 098 private java.sql.Timestamp createdTimestamp = null; 099 100 @Basic 101 @Column(name = "time_unit") 102 private String timeUnitStr = CoordinatorJob.Timeunit.NONE.toString(); 103 104 @Basic 105 @Column(name = "execution") 106 private String execution = CoordinatorJob.Execution.FIFO.toString(); 107 108 @Basic 109 @Column(name = "last_action") 110 private java.sql.Timestamp lastActionTimestamp = null; 111 112 @Basic 113 @Index 114 @Column(name = "next_matd_time") 115 private java.sql.Timestamp nextMaterializedTimestamp = null; 116 117 @Basic 118 @Index 119 @Column(name = "last_modified_time") 120 private java.sql.Timestamp lastModifiedTimestamp = null; 121 122 @Basic 123 @Index 124 @Column(name = "suspended_time") 125 private java.sql.Timestamp suspendedTimestamp = null; 126 127 @Column(name = "job_xml") 128 @Lob 129 private String jobXml = null; 130 131 @Column(name = "orig_job_xml") 132 @Lob 133 private String origJobXml = null; 134 135 @Column(name = "sla_xml") 136 @Lob 137 private String slaXml = null; 138 139 @Basic 140 @Column(name = "pending") 141 private int pending = 0; 142 143 @Basic 144 @Column(name = "done_materialization") 145 private int doneMaterialization = 0; 146 147 @Basic 148 @Column(name = "app_namespace") 149 private String appNamespace = null; 150 151 /** 152 * Get start timestamp 153 * 154 * @return start timestamp 155 */ 156 public java.sql.Timestamp getStartTimestamp() { 157 return startTimestamp; 158 } 159 160 /** 161 * Set start timestamp 162 * 163 * @param startTimestamp start timestamp 164 */ 165 public void setStartTimestamp(java.sql.Timestamp startTimestamp) { 166 super.setStartTime(DateUtils.toDate(startTimestamp)); 167 this.startTimestamp = startTimestamp; 168 } 169 170 /** 171 * Get end timestamp 172 * 173 * @return end timestamp 174 */ 175 public java.sql.Timestamp getEndTimestamp() { 176 return endTimestamp; 177 } 178 179 /** 180 * Set end timestamp 181 * 182 * @param endTimestamp end timestamp 183 */ 184 public void setEndTimestamp(java.sql.Timestamp endTimestamp) { 185 super.setEndTime(DateUtils.toDate(endTimestamp)); 186 this.endTimestamp = endTimestamp; 187 } 188 189 /** 190 * Get next materialized timestamp 191 * 192 * @return next materialized timestamp 193 */ 194 public Timestamp getNextMaterializedTimestamp() { 195 return nextMaterializedTimestamp; 196 } 197 198 /** 199 * Set next materialized timestamp 200 * 201 * @param nextMaterializedTimestamp next materialized timestamp 202 */ 203 public void setNextMaterializedTimestamp(java.sql.Timestamp nextMaterializedTimestamp) { 204 super.setNextMaterializedTime(DateUtils.toDate(nextMaterializedTimestamp)); 205 this.nextMaterializedTimestamp = nextMaterializedTimestamp; 206 } 207 208 /** 209 * Get last modified timestamp 210 * 211 * @return last modified timestamp 212 */ 213 public Timestamp getLastModifiedTimestamp() { 214 return lastModifiedTimestamp; 215 } 216 217 /** 218 * Set last modified timestamp 219 * 220 * @param lastModifiedTimestamp last modified timestamp 221 */ 222 public void setLastModifiedTimestamp(java.sql.Timestamp lastModifiedTimestamp) { 223 this.lastModifiedTimestamp = lastModifiedTimestamp; 224 } 225 226 /** 227 * Get suspended timestamp 228 * 229 * @return suspended timestamp 230 */ 231 public Timestamp getSuspendedTimestamp() { 232 return suspendedTimestamp; 233 } 234 235 /** 236 * Set suspended timestamp 237 * 238 * @param suspendedTimestamp suspended timestamp 239 */ 240 public void setSuspendedTimestamp(java.sql.Timestamp suspendedTimestamp) { 241 this.suspendedTimestamp = suspendedTimestamp; 242 } 243 244 /** 245 * Get job xml 246 * 247 * @return job xml 248 */ 249 public String getJobXml() { 250 return jobXml; 251 } 252 253 /** 254 * Set job xml 255 * 256 * @param jobXml job xml 257 */ 258 public void setJobXml(String jobXml) { 259 this.jobXml = jobXml; 260 } 261 262 /** 263 * Get original job xml 264 * 265 * @return original job xml 266 */ 267 public String getOrigJobXml() { 268 return origJobXml; 269 } 270 271 /** 272 * Set original job xml 273 * 274 * @param origJobXml 275 */ 276 public void setOrigJobXml(String origJobXml) { 277 this.origJobXml = origJobXml; 278 } 279 280 /** 281 * Get sla xml 282 * 283 * @return sla xml 284 */ 285 public String getSlaXml() { 286 return slaXml; 287 } 288 289 /** 290 * Set sla xml 291 * 292 * @param slaXml sla xml 293 */ 294 public void setSlaXml(String slaXml) { 295 this.slaXml = slaXml; 296 } 297 298 /* (non-Javadoc) 299 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#setTimeUnit(org.apache.oozie.client.CoordinatorJob.Timeunit) 300 */ 301 @Override 302 public void setTimeUnit(Timeunit timeUnit) { 303 super.setTimeUnit(timeUnit); 304 this.timeUnitStr = timeUnit.toString(); 305 } 306 307 /** 308 * Set last action timestamp 309 * 310 * @param lastActionTimestamp last action timestamp 311 */ 312 public void setLastActionTimestamp(java.sql.Timestamp lastActionTimestamp) { 313 super.setLastActionTime(DateUtils.toDate(lastActionTimestamp)); 314 this.lastActionTimestamp = lastActionTimestamp; 315 } 316 317 /** 318 * Set auth token 319 * 320 * @param authToken auth token 321 */ 322 public void setAuthToken(String authToken) { 323 this.authToken = authToken; 324 } 325 326 /** 327 * Set pending to true 328 */ 329 @Override 330 public void setPending() { 331 super.setPending(); 332 this.pending = 1; 333 } 334 335 /** 336 * Set pending to false 337 */ 338 @Override 339 public void resetPending() { 340 super.resetPending(); 341 this.pending = 0; 342 } 343 344 /** 345 * Return if the action is pending. 346 * 347 * @return if the action is pending. 348 */ 349 public boolean isPending() { 350 return pending == 1 ? true : false; 351 } 352 353 /** 354 * Set doneMaterialization to true 355 */ 356 public void setDoneMaterialization() { 357 this.doneMaterialization = 1; 358 } 359 360 /** 361 * Set doneMaterialization to false 362 */ 363 public void resetDoneMaterialization() { 364 this.doneMaterialization = 0; 365 } 366 367 /** 368 * Return if the action is done with materialization 369 * 370 * @return if the action is done with materialization 371 */ 372 public boolean isDoneMaterialization() { 373 return doneMaterialization == 1 ? true : false; 374 } 375 376 377 /** 378 * Get app namespce 379 * 380 * @return app namespce 381 */ 382 public String getAppNamespace() { 383 return appNamespace; 384 } 385 386 /** 387 * Set app namespce 388 * 389 * @param appNamespace the app namespce to set 390 */ 391 public void setAppNamespace(String appNamespace) { 392 this.appNamespace = appNamespace; 393 } 394 395 public CoordinatorJobBean() { 396 } 397 398 /* 399 * Serialize the coordinator bean to a data output. @param dataOutput data 400 * output. @throws IOException thrown if the coordinator bean could not be 401 * serialized. 402 */ 403 public void write(DataOutput dataOutput) throws IOException { 404 WritableUtils.writeStr(dataOutput, getAppPath()); 405 WritableUtils.writeStr(dataOutput, getAppName()); 406 WritableUtils.writeStr(dataOutput, getId()); 407 WritableUtils.writeStr(dataOutput, getConf()); 408 WritableUtils.writeStr(dataOutput, getStatusStr()); 409 dataOutput.writeInt(getFrequency()); 410 WritableUtils.writeStr(dataOutput, getTimeUnit().toString()); 411 WritableUtils.writeStr(dataOutput, getTimeZone()); 412 dataOutput.writeInt(getConcurrency()); 413 WritableUtils.writeStr(dataOutput, getExecutionOrder().toString()); 414 dataOutput.writeLong((getLastActionTime() != null) ? getLastActionTime().getTime() : -1); 415 dataOutput.writeLong((getNextMaterializedTime() != null) ? getNextMaterializedTime().getTime() : -1); 416 dataOutput.writeLong((getStartTime() != null) ? getStartTime().getTime() : -1); 417 dataOutput.writeLong((getEndTime() != null) ? getEndTime().getTime() : -1); 418 WritableUtils.writeStr(dataOutput, getUser()); 419 WritableUtils.writeStr(dataOutput, getGroup()); 420 WritableUtils.writeStr(dataOutput, getExternalId()); 421 dataOutput.writeInt(getTimeout()); 422 dataOutput.writeInt(getMatThrottling()); 423 if (isPending()) { 424 dataOutput.writeInt(1); 425 } else { 426 dataOutput.writeInt(0); 427 } 428 if (isDoneMaterialization()) { 429 dataOutput.writeInt(1); 430 } else { 431 dataOutput.writeInt(0); 432 } 433 WritableUtils.writeStr(dataOutput, getAppNamespace()); 434 } 435 436 /** 437 * Deserialize a coordinator bean from a data input. 438 * 439 * @param dataInput data input. 440 * @throws IOException thrown if the workflow bean could not be deserialized. 441 */ 442 public void readFields(DataInput dataInput) throws IOException { 443 setAppPath(WritableUtils.readStr(dataInput)); 444 setAppName(WritableUtils.readStr(dataInput)); 445 setId(WritableUtils.readStr(dataInput)); 446 setConf(WritableUtils.readStr(dataInput)); 447 setStatus(CoordinatorJob.Status.valueOf(WritableUtils.readStr(dataInput))); 448 setFrequency(dataInput.readInt()); 449 setTimeUnit(CoordinatorJob.Timeunit.valueOf(WritableUtils.readStr(dataInput))); 450 setTimeZone(WritableUtils.readStr(dataInput)); 451 setConcurrency(dataInput.readInt()); 452 setExecutionOrder(Execution.valueOf(WritableUtils.readStr(dataInput))); 453 454 long d = dataInput.readLong(); 455 if (d != -1) { 456 setLastActionTime(new Date(d)); 457 } 458 d = dataInput.readLong(); 459 if (d != -1) { 460 setNextMaterializedTime(new Date(d)); 461 } 462 d = dataInput.readLong(); 463 if (d != -1) { 464 setStartTime(new Date(d)); 465 } 466 467 d = dataInput.readLong(); 468 if (d != -1) { 469 setEndTime(new Date(d)); 470 } 471 setUser(WritableUtils.readStr(dataInput)); 472 setGroup(WritableUtils.readStr(dataInput)); 473 setExternalId(WritableUtils.readStr(dataInput)); 474 setTimeout(dataInput.readInt()); 475 setMatThrottling(dataInput.readInt()); 476 477 d = dataInput.readInt(); 478 if (d == 1) { 479 setPending(); 480 } 481 482 d = dataInput.readInt(); 483 if (d == 1) { 484 setDoneMaterialization(); 485 } 486 487 setAppNamespace(WritableUtils.readStr(dataInput)); 488 } 489 490 /* (non-Javadoc) 491 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#getStatus() 492 */ 493 @Override 494 public Status getStatus() { 495 return Status.valueOf(this.status); 496 } 497 498 /** 499 * Get status 500 * 501 * @return status 502 */ 503 public String getStatusStr() { 504 return status; 505 } 506 507 /* (non-Javadoc) 508 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#setStatus(org.apache.oozie.client.Job.Status) 509 */ 510 @Override 511 public void setStatus(Status val) { 512 super.setStatus(val); 513 this.status = val.toString(); 514 } 515 516 /** 517 * Get time unit 518 * 519 * @return time unit 520 */ 521 public String getTimeUnitStr() { 522 return timeUnitStr; 523 } 524 525 /* (non-Javadoc) 526 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#getTimeUnit() 527 */ 528 @Override 529 public Timeunit getTimeUnit() { 530 return Timeunit.valueOf(this.timeUnitStr); 531 } 532 533 /** 534 * Set order 535 * 536 * @param order 537 */ 538 public void setExecution(Execution order) { 539 this.execution = order.toString(); 540 super.setExecutionOrder(order); 541 } 542 543 /* (non-Javadoc) 544 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#getExecutionOrder() 545 */ 546 @Override 547 public Execution getExecutionOrder() { 548 return Execution.valueOf(this.execution); 549 } 550 551 /** 552 * Get execution 553 * 554 * @return execution 555 */ 556 public String getExecution() { 557 return execution; 558 } 559 560 /* (non-Javadoc) 561 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#setLastActionTime(java.util.Date) 562 */ 563 @Override 564 public void setLastActionTime(Date lastAction) { 565 this.lastActionTimestamp = DateUtils.convertDateToTimestamp(lastAction); 566 super.setLastActionTime(lastAction); 567 } 568 569 /* (non-Javadoc) 570 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#getLastActionTime() 571 */ 572 @Override 573 public Date getLastActionTime() { 574 return DateUtils.toDate(lastActionTimestamp); 575 } 576 577 /** 578 * Get last action timestamp 579 * 580 * @return last action timestamp 581 */ 582 public Timestamp getLastActionTimestamp() { 583 return lastActionTimestamp; 584 } 585 586 /* (non-Javadoc) 587 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#setNextMaterializedTime(java.util.Date) 588 */ 589 @Override 590 public void setNextMaterializedTime(Date nextMaterializedTime) { 591 super.setNextMaterializedTime(nextMaterializedTime); 592 this.nextMaterializedTimestamp = DateUtils.convertDateToTimestamp(nextMaterializedTime); 593 } 594 595 /* (non-Javadoc) 596 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#getNextMaterializedTime() 597 */ 598 @Override 599 public Date getNextMaterializedTime() { 600 return DateUtils.toDate(nextMaterializedTimestamp); 601 } 602 603 /** 604 * Set last modified time 605 * 606 * @param lastModifiedTime last modified time 607 */ 608 public void setLastModifiedTime(Date lastModifiedTime) { 609 this.lastModifiedTimestamp = DateUtils.convertDateToTimestamp(lastModifiedTime); 610 } 611 612 /** 613 * Get last modified time 614 * 615 * @return last modified time 616 */ 617 public Date getLastModifiedTime() { 618 return DateUtils.toDate(lastModifiedTimestamp); 619 } 620 621 /** 622 * Set suspended time 623 * 624 * @param suspendedTime suspended time 625 */ 626 public void setSuspendedTime(Date suspendedTime) { 627 this.suspendedTimestamp = DateUtils.convertDateToTimestamp(suspendedTime); 628 } 629 630 /** 631 * Get suspended time 632 * 633 * @return suspended time 634 */ 635 public Date getSuspendedTime() { 636 return DateUtils.toDate(suspendedTimestamp); 637 } 638 639 /* (non-Javadoc) 640 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#setStartTime(java.util.Date) 641 */ 642 @Override 643 public void setStartTime(Date startTime) { 644 super.setStartTime(startTime); 645 this.startTimestamp = DateUtils.convertDateToTimestamp(startTime); 646 } 647 648 /* (non-Javadoc) 649 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#getStartTime() 650 */ 651 @Override 652 public Date getStartTime() { 653 return DateUtils.toDate(startTimestamp); 654 } 655 656 /* (non-Javadoc) 657 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#setEndTime(java.util.Date) 658 */ 659 @Override 660 public void setEndTime(Date endTime) { 661 super.setEndTime(endTime); 662 this.endTimestamp = DateUtils.convertDateToTimestamp(endTime); 663 } 664 665 /* (non-Javadoc) 666 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#setPauseTime(java.util.Date) 667 */ 668 @Override 669 public void setPauseTime(Date pauseTime) { 670 super.setPauseTime(pauseTime); 671 this.pauseTimestamp = DateUtils.convertDateToTimestamp(pauseTime); 672 } 673 674 /* (non-Javadoc) 675 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#getEndTime() 676 */ 677 @Override 678 public Date getEndTime() { 679 return DateUtils.toDate(endTimestamp); 680 } 681 682 /* (non-Javadoc) 683 * @see org.apache.oozie.client.rest.JsonCoordinatorJob#getPauseTime() 684 */ 685 @Override 686 public Date getPauseTime() { 687 return DateUtils.toDate(pauseTimestamp); 688 } 689 690 /** 691 * Set created time 692 * 693 * @param createTime created time 694 */ 695 public void setCreatedTime(Date createTime) { 696 this.createdTimestamp = DateUtils.convertDateToTimestamp(createTime); 697 } 698 699 /** 700 * Get created time 701 * 702 * @return created time 703 */ 704 public Date getCreatedTime() { 705 return DateUtils.toDate(createdTimestamp); 706 } 707 708 /** 709 * Get created timestamp 710 * 711 * @return created timestamp 712 */ 713 public Timestamp getCreatedTimestamp() { 714 return createdTimestamp; 715 } 716 717 /** 718 * Get auth token 719 * 720 * @return auth token 721 */ 722 public String getAuthToken() { 723 return this.authToken; 724 } 725 726 }