OPEN - issue BATCH-364: StepScope responsibilities can be assumed by Step (not ApplicationContext)

http://jira.springframework.org/browse/BATCH-364

Extend columns in attrs table -to avoid crashes resulting in optimistic lock failure.
This commit is contained in:
dsyer
2008-02-15 14:40:33 +00:00
parent 0fc3ec4cfc
commit 7096c8c024
19 changed files with 65 additions and 46 deletions

View File

@@ -216,7 +216,6 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao
}
}
};
getJdbcTemplate().execute(getQuery(INSERT_STEP_EXECUTION_ATTRS), callback);
}

View File

@@ -23,6 +23,7 @@ import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.springframework.batch.core.domain.Entity;
import org.springframework.batch.core.domain.JobExecution;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.StepExecution;
@@ -123,7 +124,7 @@ public class MapStepDao implements StepDao {
Entry entry = (Entry)it.next();
Set executions = (Set)entry.getValue();
for(Iterator executionsIt = executions.iterator();executionsIt.hasNext();){
StepExecution stepExecution = (StepExecution)executionsIt.next();
Entity stepExecution = (Entity)executionsIt.next();
if(stepExecution.getId() == stepExecutionId){
stepExecutions.add(stepExecution);
}

View File

@@ -21,6 +21,7 @@ import java.util.List;
import org.springframework.batch.core.domain.Chunk;
import org.springframework.batch.core.domain.Chunker;
import org.springframework.batch.core.domain.ChunkingResult;
import org.springframework.batch.core.domain.Entity;
import org.springframework.batch.core.domain.ItemSkipPolicy;
import org.springframework.batch.core.domain.StepExecution;
import org.springframework.batch.io.exception.ReadFailureException;
@@ -98,7 +99,7 @@ public class ItemChunker implements Chunker {
/**
* No-op implementation.
*/
public void flush(StepExecution stepExecution) {
public void flush(Entity stepExecution) {
}
}

View File

@@ -294,7 +294,7 @@ public class SimpleStepExecutor implements InitializingBean {
boolean isRestart = stepInstance.getStepExecutionCount() > 0 ? true : false;
ExitStatus status = ExitStatus.FAILED;
try {
stepExecution.setStartTime(new Date(System.currentTimeMillis()));
@@ -434,9 +434,15 @@ public class SimpleStepExecutor implements InitializingBean {
jobRepository.saveOrUpdate(stepExecution);
streamManager.close(stepExecution);
}
catch (Exception e) {
logger
.error(
"Failed to update step execution: probably fatal, so there is already an exception on the stack.",
e);
}
finally {
// clear any registered synchronizations
StepSynchronizationManager.close();
}
}

View File

@@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION (
STATUS VARCHAR(10),
COMMIT_COUNT BIGINT ,
TASK_COUNT BIGINT ,
TASK_STATISTICS VARCHAR(2500),
TASK_STATISTICS VARCHAR(500),
CONTINUABLE CHAR(1),
EXIT_CODE VARCHAR(20),
EXIT_MESSAGE VARCHAR(2500));
@@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION (
CREATE TABLE BATCH_STEP_EXECUTION_ATTRS (
STEP_EXECUTION_ID BIGINT NOT NULL ,
TYPE_CD VARCHAR(6) NOT NULL ,
KEY_NAME VARCHAR(100) NOT NULL ,
STRING_VAL VARCHAR(250) ,
KEY_NAME VARCHAR(1000) NOT NULL ,
STRING_VAL VARCHAR(1000) ,
DATE_VAL TIMESTAMP ,
LONG_VAL VARCHAR(10) ,
DOUBLE_VAL DOUBLE PRECISION ,

View File

@@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION (
STATUS VARCHAR(10),
COMMIT_COUNT BIGINT ,
TASK_COUNT BIGINT ,
TASK_STATISTICS VARCHAR(2500),
TASK_STATISTICS VARCHAR(500),
CONTINUABLE CHAR(1),
EXIT_CODE VARCHAR(20),
EXIT_MESSAGE VARCHAR(2500));
@@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION (
CREATE TABLE BATCH_STEP_EXECUTION_ATTRS (
STEP_EXECUTION_ID BIGINT NOT NULL ,
TYPE_CD VARCHAR(6) NOT NULL ,
KEY_NAME VARCHAR(100) NOT NULL ,
STRING_VAL VARCHAR(250) ,
KEY_NAME VARCHAR(1000) NOT NULL ,
STRING_VAL VARCHAR(1000) ,
DATE_VAL TIMESTAMP ,
LONG_VAL VARCHAR(10) ,
DOUBLE_VAL DOUBLE PRECISION ,

View File

@@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION (
STATUS VARCHAR(10),
COMMIT_COUNT BIGINT ,
TASK_COUNT BIGINT ,
TASK_STATISTICS VARCHAR(2500),
TASK_STATISTICS VARCHAR(500),
CONTINUABLE CHAR(1),
EXIT_CODE VARCHAR(20),
EXIT_MESSAGE VARCHAR(2500));
@@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION (
CREATE TABLE BATCH_STEP_EXECUTION_ATTRS (
STEP_EXECUTION_ID BIGINT NOT NULL ,
TYPE_CD VARCHAR(6) NOT NULL ,
KEY_NAME VARCHAR(100) NOT NULL ,
STRING_VAL VARCHAR(250) ,
KEY_NAME VARCHAR(1000) NOT NULL ,
STRING_VAL VARCHAR(1000) ,
DATE_VAL TIMESTAMP ,
LONG_VAL VARCHAR(10) ,
DOUBLE_VAL DOUBLE PRECISION ,

View File

@@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION (
STATUS VARCHAR(10),
COMMIT_COUNT BIGINT ,
TASK_COUNT BIGINT ,
TASK_STATISTICS VARCHAR(2500),
TASK_STATISTICS VARCHAR(500),
CONTINUABLE CHAR(1),
EXIT_CODE VARCHAR(20),
EXIT_MESSAGE VARCHAR(2500));
@@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION (
CREATE TABLE BATCH_STEP_EXECUTION_ATTRS (
STEP_EXECUTION_ID BIGINT NOT NULL ,
TYPE_CD VARCHAR(6) NOT NULL ,
KEY_NAME VARCHAR(100) NOT NULL ,
STRING_VAL VARCHAR(250) ,
KEY_NAME VARCHAR(1000) NOT NULL ,
STRING_VAL VARCHAR(1000) ,
DATE_VAL TIMESTAMP ,
LONG_VAL VARCHAR(10) ,
DOUBLE_VAL DOUBLE PRECISION ,

View File

@@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION (
STATUS VARCHAR(10),
COMMIT_COUNT NUMBER(38) ,
TASK_COUNT NUMBER(38) ,
TASK_STATISTICS VARCHAR(2500),
TASK_STATISTICS VARCHAR(500),
CONTINUABLE CHAR(1),
EXIT_CODE VARCHAR(20),
EXIT_MESSAGE VARCHAR(2500));
@@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION (
CREATE TABLE BATCH_STEP_EXECUTION_ATTRS (
STEP_EXECUTION_ID NUMBER(38) NOT NULL ,
TYPE_CD VARCHAR(6) NOT NULL ,
KEY_NAME VARCHAR(100) NOT NULL ,
STRING_VAL VARCHAR(250) ,
KEY_NAME VARCHAR(1000) NOT NULL ,
STRING_VAL VARCHAR(1000) ,
DATE_VAL TIMESTAMP ,
LONG_VAL VARCHAR(10) ,
DOUBLE_VAL DOUBLE PRECISION ,

View File

@@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION (
STATUS VARCHAR(10),
COMMIT_COUNT BIGINT ,
TASK_COUNT BIGINT ,
TASK_STATISTICS VARCHAR(2500),
TASK_STATISTICS VARCHAR(500),
CONTINUABLE CHAR(1),
EXIT_CODE VARCHAR(20),
EXIT_MESSAGE VARCHAR(2500));
@@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION (
CREATE TABLE BATCH_STEP_EXECUTION_ATTRS (
STEP_EXECUTION_ID BIGINT NOT NULL ,
TYPE_CD VARCHAR(6) NOT NULL ,
KEY_NAME VARCHAR(100) NOT NULL ,
STRING_VAL VARCHAR(250) ,
KEY_NAME VARCHAR(1000) NOT NULL ,
STRING_VAL VARCHAR(1000) ,
DATE_VAL TIMESTAMP ,
LONG_VAL VARCHAR(10) ,
DOUBLE_VAL DOUBLE PRECISION ,

View File

@@ -40,7 +40,7 @@ CREATE TABLE BATCH_STEP_EXECUTION (
STATUS VARCHAR(10),
COMMIT_COUNT ${BIGINT} ,
TASK_COUNT ${BIGINT} ,
TASK_STATISTICS VARCHAR(2500),
TASK_STATISTICS VARCHAR(500),
CONTINUABLE CHAR(1),
EXIT_CODE VARCHAR(20),
EXIT_MESSAGE VARCHAR(2500));
@@ -48,8 +48,8 @@ CREATE TABLE BATCH_STEP_EXECUTION (
CREATE TABLE BATCH_STEP_EXECUTION_ATTRS (
STEP_EXECUTION_ID ${BIGINT} NOT NULL ,
TYPE_CD VARCHAR(6) NOT NULL ,
KEY_NAME VARCHAR(100) NOT NULL ,
STRING_VAL VARCHAR(250) ,
KEY_NAME VARCHAR(1000) NOT NULL ,
STRING_VAL VARCHAR(1000) ,
DATE_VAL TIMESTAMP ,
LONG_VAL VARCHAR(10) ,
DOUBLE_VAL ${DOUBLE} ,

View File

@@ -18,6 +18,7 @@ package org.springframework.batch.execution.repository;
import java.util.List;
import org.springframework.batch.core.domain.Entity;
import org.springframework.batch.core.domain.JobExecution;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.StepExecution;
@@ -85,7 +86,7 @@ public class MockStepDao implements StepDao {
ExecutionContext executionContext) {
}
public StepExecution getStepExecution(Long stepExecutionId,
public Entity getStepExecution(Long stepExecutionId,
StepInstance stepInstance) {
return null;
}

View File

@@ -25,6 +25,7 @@ import junit.framework.TestCase;
import org.easymock.ArgumentsMatcher;
import org.easymock.MockControl;
import org.springframework.batch.core.domain.Entity;
import org.springframework.batch.core.domain.JobExecution;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.JobParameters;
@@ -169,8 +170,8 @@ public class SimpleJobRepositoryTests extends TestCase {
// and the executions in the list contain one with an end date
execution.setEndTime(new Date(System.currentTimeMillis()));
StepExecution databaseStep1Exec = new StepExecution(databaseStep1, execution, new Long(1));
StepExecution databaseStep2Exec = new StepExecution(databaseStep2, execution, new Long(2));
Entity databaseStep1Exec = new StepExecution(databaseStep1, execution, new Long(1));
Entity databaseStep2Exec = new StepExecution(databaseStep2, execution, new Long(2));
List jobs = new ArrayList();
jobDao.findJobInstances(jobConfiguration.getName(), jobParameters);
@@ -411,8 +412,8 @@ public class SimpleJobRepositoryTests extends TestCase {
public void testFindStepsFixesInvalidExecutionContext() throws Exception {
StepExecution databaseStep1Exec = new StepExecution(databaseStep1, null, new Long(1));
StepExecution databaseStep2Exec = new StepExecution(databaseStep2, null, new Long(2));
Entity databaseStep1Exec = new StepExecution(databaseStep1, null, new Long(1));
Entity databaseStep2Exec = new StepExecution(databaseStep2, null, new Long(2));
List jobs = new ArrayList();
jobDao.findJobInstances(jobConfiguration.getName(), jobParameters);

View File

@@ -40,7 +40,7 @@ CREATE TABLE BATCH_STEP_EXECUTION (
STATUS VARCHAR(10),
COMMIT_COUNT BIGINT ,
TASK_COUNT BIGINT ,
TASK_STATISTICS VARCHAR(2500),
TASK_STATISTICS VARCHAR(500),
CONTINUABLE CHAR(1),
EXIT_CODE VARCHAR(20),
EXIT_MESSAGE VARCHAR(2500));
@@ -48,8 +48,8 @@ CREATE TABLE BATCH_STEP_EXECUTION (
CREATE TABLE BATCH_STEP_EXECUTION_ATTRS (
STEP_EXECUTION_ID BIGINT NOT NULL ,
TYPE_CD VARCHAR(6) NOT NULL ,
KEY_NAME VARCHAR(100) NOT NULL ,
STRING_VAL VARCHAR(250) ,
KEY_NAME VARCHAR(1000) NOT NULL ,
STRING_VAL VARCHAR(1000) ,
DATE_VAL TIMESTAMP ,
LONG_VAL VARCHAR(10) ,
DOUBLE_VAL DOUBLE PRECISION ,