From bee3122c1e19dc67877678e4eb2563ae416ca59d Mon Sep 17 00:00:00 2001 From: robokaso Date: Tue, 12 Aug 2008 08:18:45 +0000 Subject: [PATCH] RESOLVED - BATCH-756: Upgrade JdbcExecutionContextDao to use enums Discriminator converted to enum --- .../dao/JdbcExecutionContextDao.java | 42 +++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDao.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDao.java index d0dd3a998..5a7f17267 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDao.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDao.java @@ -31,10 +31,6 @@ import org.springframework.util.Assert; */ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implements ExecutionContextDao { - private static final String STEP_DISCRIMINATOR = "S"; - - private static final String JOB_DISCRIMINATOR = "J"; - private static final String FIND_EXECUTION_CONTEXT = "SELECT TYPE_CD, KEY_NAME, STRING_VAL, DOUBLE_VAL, LONG_VAL, OBJECT_VAL " + "from %PREFIX%EXECUTION_CONTEXT where EXECUTION_ID = ? and DISCRIMINATOR = ?"; @@ -57,7 +53,7 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem final ExecutionContext executionContext = new ExecutionContext(); getJdbcTemplate().getJdbcOperations().query(getQuery(FIND_EXECUTION_CONTEXT), - new Object[] { executionId, JOB_DISCRIMINATOR }, + new Object[] { executionId, Discriminator.JOB }, new ExecutionContextRowCallbackHandler(executionContext)); return executionContext; @@ -74,7 +70,7 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem final ExecutionContext executionContext = new ExecutionContext(); getJdbcTemplate().getJdbcOperations().query(getQuery(FIND_EXECUTION_CONTEXT), - new Object[] { executionId, STEP_DISCRIMINATOR }, + new Object[] { executionId, Discriminator.STEP }, new ExecutionContextRowCallbackHandler(executionContext)); return executionContext; @@ -91,7 +87,7 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem Assert.notNull(executionId, "ExecutionId must not be null."); Assert.notNull(executionContext, "The ExecutionContext must not be null."); - saveOrUpdateExecutionContext(executionContext, executionId, JOB_DISCRIMINATOR); + saveOrUpdateExecutionContext(executionContext, executionId, Discriminator.JOB); } /** @@ -106,14 +102,14 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem Assert.notNull(executionId, "ExecutionId must not be null."); Assert.notNull(executionContext, "The ExecutionContext must not be null."); - saveOrUpdateExecutionContext(executionContext, executionId, STEP_DISCRIMINATOR); + saveOrUpdateExecutionContext(executionContext, executionId, Discriminator.STEP); } /** * Resolves attribute's class to corresponding {@link AttributeType} and * persists or updates the attribute. */ - private void saveOrUpdateExecutionContext(ExecutionContext ctx, Long executionId, String discriminator) { + private void saveOrUpdateExecutionContext(ExecutionContext ctx, Long executionId, Discriminator discriminator) { for (Entry entry : ctx.entrySet()) { @@ -140,7 +136,7 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem * to update the attribute - if the attribute does not exist in the database * yet it is inserted. */ - private void updateExecutionAttribute(final Long executionId, final String discriminator, final String key, + private void updateExecutionAttribute(final Long executionId, final Discriminator discriminator, final String key, final Object value, final AttributeType type) { PreparedStatementCallback callback = new AbstractLobCreatingPreparedStatementCallback(lobHandler) { @@ -195,7 +191,7 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem * Creates {@link PreparedStatement} from provided arguments and inserts new * row for the attribute. */ - private void insertExecutionAttribute(final Long executionId, final String discriminator, final String key, + private void insertExecutionAttribute(final Long executionId, final Discriminator discriminator, final String key, final Object value, final AttributeType type) { PreparedStatementCallback callback = new AbstractLobCreatingPreparedStatementCallback(lobHandler) { @@ -203,7 +199,7 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem DataAccessException { ps.setLong(1, executionId.longValue()); - ps.setString(2, discriminator); + ps.setString(2, discriminator.toString()); ps.setString(4, key); if (type == AttributeType.STRING) { ps.setString(3, AttributeType.STRING.toString()); @@ -245,10 +241,30 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem /** * Attribute types supported by the {@link ExecutionContext}. */ - private enum AttributeType { + private static enum AttributeType { STRING, OBJECT, LONG, DOUBLE } + /** + * Discriminates whether the execution context belongs to job or step. + */ + private static enum Discriminator { + + STEP { + @Override + public String toString() { + return "S"; + } + }, + + JOB { + @Override + public String toString() { + return "J"; + } + } + } + /** * Reads attributes from {@link ResultSet} and puts them into * {@link ExecutionContext}, resolving the attributes' types using the