IN PROGRESS - BATCH-505: Job-level ExecutionContext

JobExecutionContext is now persisted (together with StepExecutionContext) and retrieved on restart
(changed jobExecution's start time to be not null so that last execution can be always found).
This commit is contained in:
robokaso
2008-05-23 10:26:29 +00:00
parent abc9111b20
commit fd6fad60dc
17 changed files with 102 additions and 19 deletions

View File

@@ -38,13 +38,13 @@ public class JobExecution extends Entity {
private volatile BatchStatus status = BatchStatus.STARTING;
private volatile Date startTime = null;
private volatile Date startTime = new Date(System.currentTimeMillis());
private volatile Date endTime = null;
private volatile ExitStatus exitStatus = ExitStatus.UNKNOWN;
private ExecutionContext executionContext;
private ExecutionContext executionContext = new ExecutionContext();
/**
* Because a JobExecution isn't valid unless the job is set, this

View File

@@ -54,6 +54,13 @@ public class SimpleJob extends AbstractJob {
JobInstance jobInstance = execution.getJobInstance();
boolean isJobRestart = getJobRepository().getJobExecutionCount(jobInstance) > 0;
if (isJobRestart) {
execution.setExecutionContext(getJobRepository().getLastJobExecution(jobInstance).getExecutionContext());
} else {
execution.setExecutionContext(new ExecutionContext());
}
StepExecution currentStepExecution = null;
int startedCount = 0;
List steps = getSteps();

View File

@@ -111,5 +111,16 @@ public interface JobRepository {
* @return the execution count of the step within the given job instance.
*/
int getStepExecutionCount(JobInstance jobInstance, Step step);
/**
* @return the execution count of the given job instance.
*/
int getJobExecutionCount(JobInstance jobInstance);
/**
* @return the last execution of the given job instance.
*/
JobExecution getLastJobExecution(JobInstance jobInstance);
}

View File

@@ -247,6 +247,7 @@ public class SimpleJobRepository implements JobRepository {
public void saveOrUpdateExecutionContext(StepExecution stepExecution) {
saveOrUpdate(stepExecution);
stepExecutionDao.saveOrUpdateExecutionContext(stepExecution);
jobExecutionDao.saveOrUpdateExecutionContext(stepExecution.getJobExecution());
}
/**
@@ -289,5 +290,28 @@ public class SimpleJobRepository implements JobRepository {
}
return count;
}
/**
* @return number of executions of the given job instance
*/
public int getJobExecutionCount(JobInstance jobInstance) {
return jobExecutionDao.findJobExecutions(jobInstance).size();
}
public JobExecution getLastJobExecution(JobInstance jobInstance) {
List jobExecutions = jobExecutionDao.findJobExecutions(jobInstance);
if (jobExecutions.isEmpty()) {
return null;
}
JobExecution lastExecution = (JobExecution) jobExecutions.get(0);
for (Iterator iterator = jobExecutions.iterator(); iterator.hasNext();) {
JobExecution exec = (JobExecution) iterator.next();
if (lastExecution.getStartTime().getTime() < exec.getStartTime().getTime()) {
lastExecution = exec;
}
}
return lastExecution;
}
}

View File

@@ -21,7 +21,7 @@ CREATE TABLE BATCH_JOB_EXECUTION (
JOB_EXECUTION_ID BIGINT PRIMARY KEY ,
VERSION BIGINT,
JOB_INSTANCE_ID BIGINT NOT NULL,
START_TIME TIMESTAMP DEFAULT NULL,
START_TIME TIMESTAMP NOT NULL,
END_TIME TIMESTAMP DEFAULT NULL,
STATUS VARCHAR(10),
CONTINUABLE CHAR(1),

View File

@@ -21,7 +21,7 @@ CREATE TABLE BATCH_JOB_EXECUTION (
JOB_EXECUTION_ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
VERSION BIGINT,
JOB_INSTANCE_ID BIGINT NOT NULL,
START_TIME TIMESTAMP DEFAULT NULL,
START_TIME TIMESTAMP NOT NULL,
END_TIME TIMESTAMP DEFAULT NULL,
STATUS VARCHAR(10),
CONTINUABLE CHAR(1),

View File

@@ -21,7 +21,7 @@ CREATE TABLE BATCH_JOB_EXECUTION (
JOB_EXECUTION_ID BIGINT IDENTITY PRIMARY KEY ,
VERSION BIGINT,
JOB_INSTANCE_ID BIGINT NOT NULL,
START_TIME TIMESTAMP DEFAULT NULL,
START_TIME TIMESTAMP NOT NULL,
END_TIME TIMESTAMP DEFAULT NULL,
STATUS VARCHAR(10),
CONTINUABLE CHAR(1),

View File

@@ -21,7 +21,7 @@ CREATE TABLE BATCH_JOB_EXECUTION (
JOB_EXECUTION_ID BIGINT PRIMARY KEY ,
VERSION BIGINT,
JOB_INSTANCE_ID BIGINT NOT NULL,
START_TIME DATETIME DEFAULT NULL,
START_TIME DATETIME NOT NULL,
END_TIME DATETIME DEFAULT NULL,
STATUS VARCHAR(10),
CONTINUABLE CHAR(1),

View File

@@ -21,7 +21,7 @@ CREATE TABLE BATCH_JOB_EXECUTION (
JOB_EXECUTION_ID NUMBER(38) PRIMARY KEY ,
VERSION NUMBER(38),
JOB_INSTANCE_ID NUMBER(38) NOT NULL,
START_TIME TIMESTAMP DEFAULT NULL,
START_TIME TIMESTAMP NOT NULL,
END_TIME TIMESTAMP DEFAULT NULL,
STATUS VARCHAR2(10),
CONTINUABLE CHAR(1),

View File

@@ -21,7 +21,7 @@ CREATE TABLE BATCH_JOB_EXECUTION (
JOB_EXECUTION_ID BIGINT PRIMARY KEY ,
VERSION BIGINT,
JOB_INSTANCE_ID BIGINT NOT NULL,
START_TIME TIMESTAMP DEFAULT NULL,
START_TIME TIMESTAMP NOT NULL,
END_TIME TIMESTAMP DEFAULT NULL,
STATUS VARCHAR(10),
CONTINUABLE CHAR(1),

View File

@@ -10,7 +10,7 @@ CREATE TABLE BATCH_JOB_EXECUTION (
JOB_EXECUTION_ID ${BIGINT} $!{IDENTITY} PRIMARY KEY $!{GENERATED},
VERSION ${BIGINT},
JOB_INSTANCE_ID ${BIGINT} NOT NULL,
START_TIME ${TIMESTAMP} DEFAULT NULL,
START_TIME ${TIMESTAMP} NOT NULL,
END_TIME ${TIMESTAMP} DEFAULT NULL,
STATUS ${VARCHAR}(10),
CONTINUABLE CHAR(1),