package br.com.http.timer;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import br.com.http.queue.HttpRequestMessage;
@Entity
@Table(name = "esb_job_execution")
public class JobExecution {
private static final Logger logger = LoggerFactory.getLogger(JobExecution.class);
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
private long job;
@Column(nullable = false, name = "ts_start")
@Temporal(TemporalType.TIMESTAMP)
private Date start;
@Column(nullable = true, name = "ts_finish")
@Temporal(TemporalType.TIMESTAMP)
private Date finish;
@Column(nullable = true, name = "http_response_status")
private Integer httpResponseStatus;
@Column(nullable = true, length = 1024, name = "client_error")
private String clientError;
@Column(nullable = false, length = 50)
@Enumerated(EnumType.STRING)
private JobExecutionStatus status;
public JobExecution(Job job) {
this.job = job.getId();
this.start = new Date();
this.status = JobExecutionStatus.Running;
}
protected JobExecution() {
super();
}
public void execute(Job job) {
HttpRequestMessage http = job.createHttpRequestMessage();
try {
http.send();
this.httpResponseStatus = http.getResponseStatus();
this.status = JobExecutionStatus.Success;
} catch (Exception e) {
this.status = JobExecutionStatus.Failed;
logger.error("Error executing job http request.", e);
this.clientError = e.getMessage();
if (this.clientError != null && this.clientError.length() > 1024) {
this.clientError = this.clientError.substring(0, 1023);
}
} finally {
this.finish = new Date();
}
}
}