From 5d60375e1aa89a4c10cd1e5d38bcdaf714d7a7a0 Mon Sep 17 00:00:00 2001 From: robokaso Date: Wed, 30 Apr 2008 13:16:16 +0000 Subject: [PATCH] OPEN - BATCH-550: Add skipCount in BATCH_STEP_EXECUTION table rollback count made persistent --- .../batch/core/StepExecution.java | 7 +++++++ .../repository/dao/JdbcStepExecutionDao.java | 20 ++++++++++--------- .../src/main/resources/schema-db2.sql | 3 ++- .../src/main/resources/schema-derby.sql | 3 ++- .../src/main/resources/schema-hsqldb.sql | 3 ++- .../src/main/resources/schema-mysql.sql | 3 ++- .../src/main/resources/schema-oracle10g.sql | 3 ++- .../src/main/resources/schema-postgresql.sql | 3 ++- spring-batch-core/src/main/sql/init.sql.vpp | 3 ++- .../dao/AbstractStepExecutionDaoTests.java | 4 +++- 10 files changed, 35 insertions(+), 17 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java b/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java index b11e5eb26..77dde9bab 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java @@ -173,6 +173,13 @@ public class StepExecution extends Entity { return new Integer(rollbackCount); } + /** + * Setter for number of rollbacks for this execution + */ + public void setRollbackCount(int rollbackCount) { + this.rollbackCount = rollbackCount; + } + /** * Gets the time this execution started * diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcStepExecutionDao.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcStepExecutionDao.java index 151f0ecc1..b28d9de5d 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcStepExecutionDao.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcStepExecutionDao.java @@ -62,18 +62,18 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement + " KEY_NAME, STRING_VAL, DOUBLE_VAL, LONG_VAL, OBJECT_VAL) values(?,?,?,?,?,?,?)"; private static final String SAVE_STEP_EXECUTION = "INSERT into %PREFIX%STEP_EXECUTION(STEP_EXECUTION_ID, VERSION, STEP_NAME, JOB_EXECUTION_ID, START_TIME, " - + "END_TIME, STATUS, COMMIT_COUNT, ITEM_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE, READ_SKIP_COUNT, WRITE_SKIP_COUNT) " - + "values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + + "END_TIME, STATUS, COMMIT_COUNT, ITEM_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE, READ_SKIP_COUNT, WRITE_SKIP_COUNT, ROLLBACK_COUNT) " + + "values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; private static final String UPDATE_STEP_EXECUTION_CONTEXT = "UPDATE %PREFIX%STEP_EXECUTION_CONTEXT set " + "TYPE_CD = ?, STRING_VAL = ?, DOUBLE_VAL = ?, LONG_VAL = ?, OBJECT_VAL = ? where STEP_EXECUTION_ID = ? and KEY_NAME = ?"; private static final String UPDATE_STEP_EXECUTION = "UPDATE %PREFIX%STEP_EXECUTION set START_TIME = ?, END_TIME = ?, " + "STATUS = ?, COMMIT_COUNT = ?, ITEM_COUNT = ?, CONTINUABLE = ? , EXIT_CODE = ?, " - + "EXIT_MESSAGE = ?, VERSION = ?, READ_SKIP_COUNT = ?, WRITE_SKIP_COUNT = ? where STEP_EXECUTION_ID = ? and VERSION = ?"; + + "EXIT_MESSAGE = ?, VERSION = ?, READ_SKIP_COUNT = ?, WRITE_SKIP_COUNT = ?, ROLLBACK_COUNT = ? where STEP_EXECUTION_ID = ? and VERSION = ?"; private static final String GET_STEP_EXECUTION = "SELECT STEP_EXECUTION_ID, STEP_NAME, START_TIME, END_TIME, STATUS, COMMIT_COUNT," - + " ITEM_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE, READ_SKIP_COUNT, WRITE_SKIP_COUNT from %PREFIX%STEP_EXECUTION where STEP_NAME = ? and JOB_EXECUTION_ID = ?"; + + " ITEM_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE, READ_SKIP_COUNT, WRITE_SKIP_COUNT, ROLLBACK_COUNT from %PREFIX%STEP_EXECUTION where STEP_NAME = ? and JOB_EXECUTION_ID = ?"; private static final String CURRENT_VERSION_STEP_EXECUTION = "SELECT VERSION FROM %PREFIX%STEP_EXECUTION WHERE STEP_EXECUTION_ID=?"; @@ -186,13 +186,14 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement stepExecution.getEndTime(), stepExecution.getStatus().toString(), stepExecution.getCommitCount(), stepExecution.getItemCount(), stepExecution.getExitStatus().isContinuable() ? "Y" : "N", stepExecution.getExitStatus().getExitCode(), stepExecution.getExitStatus().getExitDescription(), - Integer.valueOf(stepExecution.getReadSkipCount()), Integer.valueOf(stepExecution.getWriteSkipCount()) }; + Integer.valueOf(stepExecution.getReadSkipCount()), Integer.valueOf(stepExecution.getWriteSkipCount()), + stepExecution.getRollbackCount() }; getJdbcTemplate().update( getQuery(SAVE_STEP_EXECUTION), parameters, new int[] { Types.INTEGER, Types.INTEGER, Types.VARCHAR, Types.INTEGER, Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.CHAR, Types.VARCHAR, - Types.VARCHAR, Types.INTEGER, Types.INTEGER }); + Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.INTEGER }); } /** @@ -322,14 +323,14 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement stepExecution.getExitStatus().isContinuable() ? "Y" : "N", stepExecution.getExitStatus().getExitCode(), exitDescription, version, Integer.valueOf(stepExecution.getReadSkipCount()), - Integer.valueOf(stepExecution.getWriteSkipCount()), stepExecution.getId(), - stepExecution.getVersion() }; + Integer.valueOf(stepExecution.getWriteSkipCount()), stepExecution.getRollbackCount(), + stepExecution.getId(), stepExecution.getVersion() }; int count = getJdbcTemplate().update( getQuery(UPDATE_STEP_EXECUTION), parameters, new int[] { Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.CHAR, Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.INTEGER, - Types.INTEGER, Types.INTEGER }); + Types.INTEGER, Types.INTEGER, Types.INTEGER }); // Avoid concurrent modifications... if (count == 0) { @@ -368,6 +369,7 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement stepExecution.setExecutionContext(findExecutionContext(stepExecution)); stepExecution.setReadSkipCount(rs.getInt(11)); stepExecution.setWriteSkipCount(rs.getInt(12)); + stepExecution.setRollbackCount(rs.getInt(13)); return stepExecution; } diff --git a/spring-batch-core/src/main/resources/schema-db2.sql b/spring-batch-core/src/main/resources/schema-db2.sql index bd7acd04f..6a2908b76 100644 --- a/spring-batch-core/src/main/resources/schema-db2.sql +++ b/spring-batch-core/src/main/resources/schema-db2.sql @@ -54,7 +54,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( COMMIT_COUNT BIGINT , ITEM_COUNT BIGINT , READ_SKIP_COUNT BIGINT , - WRITE_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + ROLLBACK_COUNT BIGINT , CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500), diff --git a/spring-batch-core/src/main/resources/schema-derby.sql b/spring-batch-core/src/main/resources/schema-derby.sql index b704eef6d..d68199843 100644 --- a/spring-batch-core/src/main/resources/schema-derby.sql +++ b/spring-batch-core/src/main/resources/schema-derby.sql @@ -54,7 +54,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( COMMIT_COUNT BIGINT , ITEM_COUNT BIGINT , READ_SKIP_COUNT BIGINT , - WRITE_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + ROLLBACK_COUNT BIGINT , CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500), diff --git a/spring-batch-core/src/main/resources/schema-hsqldb.sql b/spring-batch-core/src/main/resources/schema-hsqldb.sql index 00ebe2615..ed4557d39 100644 --- a/spring-batch-core/src/main/resources/schema-hsqldb.sql +++ b/spring-batch-core/src/main/resources/schema-hsqldb.sql @@ -54,7 +54,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( COMMIT_COUNT BIGINT , ITEM_COUNT BIGINT , READ_SKIP_COUNT BIGINT , - WRITE_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + ROLLBACK_COUNT BIGINT , CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500), diff --git a/spring-batch-core/src/main/resources/schema-mysql.sql b/spring-batch-core/src/main/resources/schema-mysql.sql index abfea731d..dd78a427c 100644 --- a/spring-batch-core/src/main/resources/schema-mysql.sql +++ b/spring-batch-core/src/main/resources/schema-mysql.sql @@ -54,7 +54,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( COMMIT_COUNT BIGINT , ITEM_COUNT BIGINT , READ_SKIP_COUNT BIGINT , - WRITE_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + ROLLBACK_COUNT BIGINT , CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500), diff --git a/spring-batch-core/src/main/resources/schema-oracle10g.sql b/spring-batch-core/src/main/resources/schema-oracle10g.sql index 9dfbb95dc..4a85d89ba 100644 --- a/spring-batch-core/src/main/resources/schema-oracle10g.sql +++ b/spring-batch-core/src/main/resources/schema-oracle10g.sql @@ -54,7 +54,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( COMMIT_COUNT NUMBER(38) , ITEM_COUNT NUMBER(38) , READ_SKIP_COUNT NUMBER(38) , - WRITE_SKIP_COUNT NUMBER(38) , + WRITE_SKIP_COUNT NUMBER(38) , + ROLLBACK_COUNT NUMBER(38) , CONTINUABLE CHAR(1), EXIT_CODE VARCHAR2(20), EXIT_MESSAGE VARCHAR2(2500), diff --git a/spring-batch-core/src/main/resources/schema-postgresql.sql b/spring-batch-core/src/main/resources/schema-postgresql.sql index 2d5ce525f..66b963c1d 100644 --- a/spring-batch-core/src/main/resources/schema-postgresql.sql +++ b/spring-batch-core/src/main/resources/schema-postgresql.sql @@ -54,7 +54,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( COMMIT_COUNT BIGINT , ITEM_COUNT BIGINT , READ_SKIP_COUNT BIGINT , - WRITE_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + ROLLBACK_COUNT BIGINT , CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500), diff --git a/spring-batch-core/src/main/sql/init.sql.vpp b/spring-batch-core/src/main/sql/init.sql.vpp index 98012fa0b..ab424d638 100644 --- a/spring-batch-core/src/main/sql/init.sql.vpp +++ b/spring-batch-core/src/main/sql/init.sql.vpp @@ -43,7 +43,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( COMMIT_COUNT ${BIGINT} , ITEM_COUNT ${BIGINT} , READ_SKIP_COUNT ${BIGINT} , - WRITE_SKIP_COUNT ${BIGINT} , + WRITE_SKIP_COUNT ${BIGINT} , + ROLLBACK_COUNT ${BIGINT} , CONTINUABLE CHAR(1), EXIT_CODE ${VARCHAR}(20), EXIT_MESSAGE ${VARCHAR}(2500), diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java index b91765cbc..82079108e 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java @@ -85,6 +85,7 @@ public abstract class AbstractStepExecutionDaoTests extends AbstractTransactiona stepExecution.setStatus(BatchStatus.STARTED); stepExecution.setReadSkipCount(7); stepExecution.setWriteSkipCount(5); + stepExecution.setRollbackCount(3); dao.saveStepExecution(stepExecution); StepExecution retrieved = dao.getStepExecution(jobExecution, step); @@ -92,7 +93,8 @@ public abstract class AbstractStepExecutionDaoTests extends AbstractTransactiona assertEquals(BatchStatus.STARTED, retrieved.getStatus()); assertEquals(stepExecution.getReadSkipCount(), retrieved.getReadSkipCount()); assertEquals(stepExecution.getWriteSkipCount(), retrieved.getWriteSkipCount()); - + assertEquals(stepExecution.getRollbackCount(), retrieved.getRollbackCount()); + assertNull(dao.getStepExecution(jobExecution, new StepSupport("not-existing step"))); }