IN PROGRESS - issue BATCH-340: Refactor JobRepository for greater clarity and consistency.

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

removed remaining hidden inter-dao dependencies
This commit is contained in:
robokaso
2008-02-15 13:25:33 +00:00
parent 4a40b17002
commit 66ddfa81f0
9 changed files with 67 additions and 175 deletions

View File

@@ -49,6 +49,7 @@ import org.springframework.util.Assert;
*
* @author Lucas Ward
* @author Dave Syer
* @author Robert Kasanicky
*
* @see JobRepository
* @see StepDao
@@ -72,10 +73,10 @@ public class SimpleJobRepository implements JobRepository {
SimpleJobRepository() {
}
public SimpleJobRepository(JobInstanceDao jobDao, JobExecutionDao jobExecutionDao, StepInstanceDao stepInstanceDao,
public SimpleJobRepository(JobInstanceDao jobInstanceDao, JobExecutionDao jobExecutionDao, StepInstanceDao stepInstanceDao,
StepExecutionDao stepExecutionDao) {
super();
this.jobInstanceDao = jobDao;
this.jobInstanceDao = jobInstanceDao;
this.jobExecutionDao = jobExecutionDao;
this.stepInstanceDao = stepInstanceDao;
this.stepExecutionDao = stepExecutionDao;
@@ -171,7 +172,6 @@ public class SimpleJobRepository implements JobRepository {
if (jobs.size() == 1) {
// One job was found
jobInstance = (JobInstance) jobs.get(0);
jobInstance.setStepInstances(findStepInstances(job.getSteps(), jobInstance));
jobInstance.setJobExecutionCount(jobExecutionDao.getJobExecutionCount(jobInstance.getId()));
if (jobInstance.getJobExecutionCount() > job.getStartLimit()) {
throw new BatchRestartException("Restart Max exceeded for Job: " + jobInstance.toString());
@@ -194,6 +194,7 @@ public class SimpleJobRepository implements JobRepository {
}
}
jobInstance.setLastExecution(lastExecution);
jobInstance.setStepInstances(findStepInstances(job.getSteps(), jobInstance, lastExecution));
}
else if (jobs.size() == 0) {
// no job found, create one
@@ -305,7 +306,7 @@ public class SimpleJobRepository implements JobRepository {
/**
* Find Steps for the given list of Steps with a given JobId
*/
protected List findStepInstances(List steps, JobInstance jobInstance) {
protected List findStepInstances(List steps, JobInstance jobInstance, JobExecution lastJobExecution) {
List stepInstances = new ArrayList();
Iterator i = steps.iterator();
while (i.hasNext()) {
@@ -313,7 +314,7 @@ public class SimpleJobRepository implements JobRepository {
Step stepConfiguration = (Step) i.next();
StepInstance stepInstance = stepInstanceDao.findStepInstance(jobInstance, stepConfiguration.getName());
if (stepInstance != null) {
stepInstance.setLastExecution(stepExecutionDao.getLastStepExecution(stepInstance));
stepInstance.setLastExecution(stepExecutionDao.getLastStepExecution(stepInstance, lastJobExecution));
if (stepInstance.getLastExecution() != null) {
ExecutionContext executionContext = stepExecutionDao.findExecutionContext(stepInstance
.getLastExecution().getId());

View File

@@ -51,6 +51,9 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
private static final String FIND_JOB_EXECUTIONS = "SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%JOB_EXECUTION"
+ " where JOB_INSTANCE_ID = ?";
private static final String GET_JOB_EXECUTION = "SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%JOB_EXECUTION"
+ " where JOB_EXECUTION_ID = ?";
private DataFieldMaxValueIncrementer jobExecutionIncrementer;
public List findJobExecutions(final JobInstance job) {
@@ -66,7 +69,7 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
Assert.notNull(jobExecutionId, "Job Execution id must not be null.");
List executions = getJdbcTemplate().query(getQuery(JobExecutionRowMapper.GET_JOB_EXECUTION),
List executions = getJdbcTemplate().query(getQuery(GET_JOB_EXECUTION),
new Object[] { jobExecutionId }, new JobExecutionRowMapper(null));
JobExecution jobExecution;
@@ -200,10 +203,7 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
* @author Dave Syer
*
*/
public static class JobExecutionRowMapper implements RowMapper {
public static final String GET_JOB_EXECUTION = "SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%JOB_EXECUTION"
+ " where JOB_EXECUTION_ID = ?";
private static class JobExecutionRowMapper implements RowMapper {
private JobInstance job;

View File

@@ -16,14 +16,12 @@ import org.springframework.batch.core.domain.BatchStatus;
import org.springframework.batch.core.domain.JobExecution;
import org.springframework.batch.core.domain.StepExecution;
import org.springframework.batch.core.domain.StepInstance;
import org.springframework.batch.execution.repository.dao.JdbcJobExecutionDao.JobExecutionRowMapper;
import org.springframework.batch.io.exception.BatchCriticalException;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.repeat.ExitStatus;
import org.springframework.batch.support.PropertiesConverter;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.dao.OptimisticLockingFailureException;
import org.springframework.jdbc.core.PreparedStatementCallback;
import org.springframework.jdbc.core.RowCallbackHandler;
@@ -62,12 +60,6 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao
private static final String FIND_STEP_EXECUTION_ATTRS = "SELECT TYPE_CD, KEY_NAME, STRING_VAL, DOUBLE_VAL, LONG_VAL, OBJECT_VAL "
+ "from %PREFIX%STEP_EXECUTION_ATTRS where STEP_EXECUTION_ID = ?";
private static final String FIND_STEP_EXECUTIONS = "SELECT STEP_EXECUTION_ID, JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, COMMIT_COUNT,"
+ " TASK_COUNT, TASK_STATISTICS, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%STEP_EXECUTION where STEP_INSTANCE_ID = ?";
private static final String GET_STEP_EXECUTION = "SELECT STEP_EXECUTION_ID, JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, COMMIT_COUNT,"
+ " TASK_COUNT, TASK_STATISTICS, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%STEP_EXECUTION where STEP_EXECUTION_ID = ?";
private static final String GET_STEP_EXECUTION_COUNT = "SELECT count(STEP_EXECUTION_ID) from %PREFIX%STEP_EXECUTION where "
+ "STEP_INSTANCE_ID = ?";
@@ -132,51 +124,11 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao
return executionContext;
}
/**
* Get StepExecution for the given step. Due to the nature of statistics,
* they will not be returned with reconstituted object.
*
* @see StepDao#getStepExecution(Long)
* @throws IllegalArgumentException if id is null.
*/
public List findStepExecutions(final StepInstance step) {
Assert.notNull(step, "Step cannot be null.");
Assert.notNull(step.getId(), "Step id cannot be null.");
RowMapper rowMapper = new StepExecutionRowMapper(step);
return getJdbcTemplate().query(getQuery(FIND_STEP_EXECUTIONS), new Object[] { step.getId() }, rowMapper);
}
public StepExecution getStepExecution(Long stepExecutionId, StepInstance stepInstance) {
Assert.notNull(stepExecutionId, "Step Execution id must not be null");
RowMapper rowMapper = new StepExecutionRowMapper(stepInstance);
List executions = getJdbcTemplate().query(getQuery(GET_STEP_EXECUTION), new Object[] { stepExecutionId }, rowMapper);
StepExecution stepExecution;
if (executions.size() == 1) {
stepExecution = (StepExecution) executions.get(0);
}
else if (executions.size() == 0) {
stepExecution = null;
}
else {
throw new IncorrectResultSizeDataAccessException("Only one StepExecution may exist for given id: ["
+ stepExecutionId + "]", 1, executions.size());
}
return stepExecution;
}
public StepExecution getLastStepExecution(StepInstance stepInstance) {
public StepExecution getLastStepExecution(StepInstance stepInstance, JobExecution jobExecution) {
Long stepInstanceId = stepInstance.getId();
List executions = getJdbcTemplate().query(getQuery(FIND_LAST_STEP_EXECUTION),
new Object[] { stepInstanceId, stepInstanceId }, new StepExecutionRowMapper(stepInstance));
new Object[] { stepInstanceId, stepInstanceId }, new StepExecutionRowMapper(stepInstance, jobExecution));
Assert.state(executions.size() <= 1, "There must be at most one latest step execution");
@@ -433,16 +385,16 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao
private class StepExecutionRowMapper implements RowMapper {
private final StepInstance stepInstance;
private final JobExecution jobExecution;
public StepExecutionRowMapper(StepInstance stepInstance) {
public StepExecutionRowMapper(StepInstance stepInstance, JobExecution jobExecution) {
this.stepInstance = stepInstance;
this.jobExecution = jobExecution;
}
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
JobExecution jobExecution = (JobExecution) getJdbcTemplate().queryForObject(
getQuery(JobExecutionRowMapper.GET_JOB_EXECUTION), new Object[] { new Long(rs.getLong(2)) },
new JobExecutionRowMapper(stepInstance.getJobInstance()));
StepExecution stepExecution = new StepExecution(stepInstance, jobExecution, new Long(rs.getLong(1)));
stepExecution.setStartTime(rs.getTimestamp(3));
stepExecution.setEndTime(rs.getTimestamp(4));

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.JobExecution;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.StepExecution;
import org.springframework.batch.core.domain.StepInstance;
@@ -101,7 +102,7 @@ public class MapStepDao implements StepDao {
executions.add(stepExecution);
}
public List findStepExecutions(StepInstance step) {
public List findStepExecutions(StepInstance step, JobExecution jobExecution) {
Set executions = (Set) executionsById.get(step.getId());
if(executions == null){
@@ -162,8 +163,8 @@ public class MapStepDao implements StepDao {
ExecutionContext executionContext) {
}
public StepExecution getLastStepExecution(StepInstance stepInstance) {
List executions = findStepExecutions(stepInstance);
public StepExecution getLastStepExecution(StepInstance stepInstance, JobExecution jobExecution) {
List executions = findStepExecutions(stepInstance, null);
StepExecution lastExec = null;
for (Iterator iterator = executions.iterator(); iterator.hasNext();) {
StepExecution exec = (StepExecution) iterator.next();

View File

@@ -1,7 +1,6 @@
package org.springframework.batch.execution.repository.dao;
import java.util.List;
import org.springframework.batch.core.domain.JobExecution;
import org.springframework.batch.core.domain.StepExecution;
import org.springframework.batch.core.domain.StepInstance;
import org.springframework.batch.item.ExecutionContext;
@@ -36,24 +35,6 @@ public interface StepExecutionDao {
*/
int getStepExecutionCount(StepInstance stepInstance);
/**
* Return all StepExecutions for the given step.
*
* @param stepInstance the step to use as a search key
* @return list of stepExecutions
*/
List findStepExecutions(StepInstance stepInstance);
/**
* Return a StepExecution for the given id.
*
* @param stepExecutionId
* @return {@link StepExecution} for the provided id.
* @throws {@link IncorrectResultSizeDataAccessException} if more than one
* execution is found.
*/
StepExecution getStepExecution(Long stepExecutionId, StepInstance stepInstance);
/**
* Find all {@link ExecutionContext} for the given execution id.
*
@@ -84,7 +65,8 @@ public interface StepExecutionDao {
void updateExecutionContext(final Long executionId, ExecutionContext executionContext);
/**
* @param lastJobExecution last job execution
* @return the last execution of the given instance
*/
StepExecution getLastStepExecution(StepInstance stepInstance);
StepExecution getLastStepExecution(StepInstance stepInstance, JobExecution lastJobExecution);
}

View File

@@ -18,6 +18,7 @@ package org.springframework.batch.execution.repository;
import java.util.List;
import org.springframework.batch.core.domain.JobExecution;
import org.springframework.batch.core.domain.JobInstance;
import org.springframework.batch.core.domain.StepExecution;
import org.springframework.batch.core.domain.StepInstance;
@@ -67,7 +68,7 @@ public class MockStepDao implements StepDao {
currentNewStep = 0;
}
public List findStepExecutions(StepInstance step) {
public List findStepExecutions(StepInstance step, JobExecution jobExecution) {
return null;
}
@@ -89,7 +90,7 @@ public class MockStepDao implements StepDao {
return null;
}
public StepExecution getLastStepExecution(StepInstance stepInstance) {
public StepExecution getLastStepExecution(StepInstance stepInstance, JobExecution jobExecution) {
// TODO Auto-generated method stub
return null;
}

View File

@@ -178,7 +178,7 @@ public class SimpleJobRepositoryTests extends TestCase {
jobDaoControl.setReturnValue(jobs);
stepDao.findStepInstance(databaseJob, "TestStep1");
stepDaoControl.setReturnValue(databaseStep1);
stepDao.getLastStepExecution(databaseStep1);
stepDao.getLastStepExecution(databaseStep1, jobExecution);
stepDaoControl.setReturnValue(databaseStep1Exec);
stepDao.findExecutionContext(databaseStep1Exec.getId());
stepDaoControl.setReturnValue(executionContext);
@@ -186,7 +186,7 @@ public class SimpleJobRepositoryTests extends TestCase {
stepDaoControl.setReturnValue(1);
stepDao.findStepInstance(databaseJob, "TestStep2");
stepDaoControl.setReturnValue(databaseStep2);
stepDao.getLastStepExecution(databaseStep2);
stepDao.getLastStepExecution(databaseStep2, jobExecution);
stepDaoControl.setReturnValue(databaseStep2Exec);
stepDao.findExecutionContext(databaseStep2Exec.getId());
stepDaoControl.setReturnValue(executionContext);
@@ -248,30 +248,10 @@ public class SimpleJobRepositoryTests extends TestCase {
jobConfiguration.setStartLimit(1);
StepExecution databaseStep1Exec = new StepExecution(databaseStep1, null, new Long(1));
StepExecution databaseStep2Exec = new StepExecution(databaseStep2, null, new Long(2));
List jobs = new ArrayList();
jobDao.findJobInstances(jobConfiguration.getName(), jobParameters);
jobs.add(databaseJob);
jobDaoControl.setReturnValue(jobs);
stepDao.findStepInstance(databaseJob, "TestStep1");
stepDaoControl.setReturnValue(databaseStep1);
stepDao.getLastStepExecution(databaseStep1);
stepDaoControl.setReturnValue(databaseStep1Exec);
stepDao.findExecutionContext(databaseStep1Exec.getId());
stepDaoControl.setReturnValue(executionContext);
stepDao.getStepExecutionCount(databaseStep1);
stepDaoControl.setReturnValue(1);
stepDao.findStepInstance(databaseJob, "TestStep2");
stepDaoControl.setReturnValue(databaseStep2);
stepDao.getLastStepExecution(databaseStep2);
stepDaoControl.setReturnValue(databaseStep2Exec);
stepDao.findExecutionContext(databaseStep2Exec.getId());
stepDaoControl.setReturnValue(executionContext);
stepDao.getStepExecutionCount(databaseStep2);
stepDaoControl.setReturnValue(1);
stepDaoControl.replay();
jobDao.getJobExecutionCount(databaseJob.getId());
// return a greater execution count then the start limit, should throw
// exception
@@ -287,7 +267,6 @@ public class SimpleJobRepositoryTests extends TestCase {
}
jobDaoControl.verify();
stepDaoControl.verify();
}
public void testCreateNonRestartableJob() throws Exception {
@@ -441,7 +420,7 @@ public class SimpleJobRepositoryTests extends TestCase {
jobDaoControl.setReturnValue(jobs);
stepDao.findStepInstance(databaseJob, "TestStep1");
stepDaoControl.setReturnValue(databaseStep1);
stepDao.getLastStepExecution(databaseStep1);
stepDao.getLastStepExecution(databaseStep1, null);
stepDaoControl.setReturnValue(databaseStep1Exec);
stepDao.findExecutionContext(databaseStep1Exec.getId());
stepDaoControl.setReturnValue(executionContext);
@@ -449,7 +428,7 @@ public class SimpleJobRepositoryTests extends TestCase {
stepDaoControl.setReturnValue(1);
stepDao.findStepInstance(databaseJob, "TestStep2");
stepDaoControl.setReturnValue(databaseStep2);
stepDao.getLastStepExecution(databaseStep2);
stepDao.getLastStepExecution(databaseStep2, null);
stepDaoControl.setReturnValue(databaseStep2Exec);
stepDao.findExecutionContext(databaseStep2Exec.getId());
stepDaoControl.setReturnValue(executionContext);

View File

@@ -18,6 +18,7 @@ package org.springframework.batch.execution.repository.dao;
import java.util.Date;
import java.util.List;
import org.springframework.batch.core.domain.BatchStatus;
import org.springframework.batch.core.domain.Job;
import org.springframework.batch.core.domain.JobExecution;
@@ -26,10 +27,7 @@ import org.springframework.batch.core.domain.JobParameters;
import org.springframework.batch.core.domain.JobSupport;
import org.springframework.batch.core.domain.StepExecution;
import org.springframework.batch.core.domain.StepInstance;
import org.springframework.batch.core.runtime.ExitStatusExceptionClassifier;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.repeat.ExitStatus;
import org.springframework.batch.support.PropertiesConverter;
import org.springframework.dao.OptimisticLockingFailureException;
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
import org.springframework.util.ClassUtils;
@@ -178,40 +176,40 @@ public abstract class AbstractStepDaoTests extends AbstractTransactionalDataSour
assertEquals(tempStep, step1);
assertEquals(executionContext, tempAttributes);
}
public void testSaveStepExecution() {
StepExecution execution = new StepExecution(step2, jobExecution, null);
execution.setStatus(BatchStatus.STARTED);
execution.setStartTime(new Date(System.currentTimeMillis()));
execution.setExecutionContext(new ExecutionContext(PropertiesConverter.stringToProperties("key1=0,key2=5")));
execution.setExitStatus(new ExitStatus(false, ExitStatusExceptionClassifier.FATAL_EXCEPTION,
"java.lang.Exception"));
stepExecutionDao.saveStepExecution(execution);
List executions = stepExecutionDao.findStepExecutions(step2);
assertEquals(1, executions.size());
StepExecution tempExecution = (StepExecution) executions.get(0);
assertEquals(execution, tempExecution);
assertEquals(execution.getExecutionContext().getString("key1"), tempExecution.getExecutionContext().getString("key1"));
assertEquals(execution.getExitStatus(), tempExecution.getExitStatus());
}
public void testUpdateStepExecution() {
stepExecution.setStatus(BatchStatus.COMPLETED);
stepExecution.setEndTime(new Date(System.currentTimeMillis()));
stepExecution.setCommitCount(5);
stepExecution.setTaskCount(5);
stepExecution.setExecutionContext(new ExecutionContext());
stepExecution.setExitStatus(new ExitStatus(false, ExitStatusExceptionClassifier.FATAL_EXCEPTION,
"java.lang.Exception"));
stepExecutionDao.updateStepExecution(stepExecution);
List executions = stepExecutionDao.findStepExecutions(step1);
assertEquals(1, executions.size());
StepExecution tempExecution = (StepExecution) executions.get(0);
assertEquals(stepExecution, tempExecution);
assertEquals(stepExecution.getExitStatus(), tempExecution.getExitStatus());
}
// TODO update
// public void testSaveStepExecution() {
//
// StepExecution execution = new StepExecution(step2, jobExecution, null);
// execution.setStatus(BatchStatus.STARTED);
// execution.setStartTime(new Date(System.currentTimeMillis()));
// execution.setExecutionContext(new ExecutionContext(PropertiesConverter.stringToProperties("key1=0,key2=5")));
// execution.setExitStatus(new ExitStatus(false, ExitStatusExceptionClassifier.FATAL_EXCEPTION,
// "java.lang.Exception"));
// stepExecutionDao.saveStepExecution(execution);
// List executions = stepExecutionDao.findStepExecutions(step2, null);
// assertEquals(1, executions.size());
// StepExecution tempExecution = (StepExecution) executions.get(0);
// assertEquals(execution, tempExecution);
// assertEquals(execution.getExecutionContext().getString("key1"), tempExecution.getExecutionContext().getString("key1"));
// assertEquals(execution.getExitStatus(), tempExecution.getExitStatus());
// }
//
// public void testUpdateStepExecution() {
//
// stepExecution.setStatus(BatchStatus.COMPLETED);
// stepExecution.setEndTime(new Date(System.currentTimeMillis()));
// stepExecution.setCommitCount(5);
// stepExecution.setTaskCount(5);
// stepExecution.setExecutionContext(new ExecutionContext());
// stepExecution.setExitStatus(new ExitStatus(false, ExitStatusExceptionClassifier.FATAL_EXCEPTION,
// "java.lang.Exception"));
// stepExecutionDao.updateStepExecution(stepExecution);
// List executions = stepExecutionDao.findStepExecutions(step1, null);
// assertEquals(1, executions.size());
// StepExecution tempExecution = (StepExecution) executions.get(0);
// assertEquals(stepExecution, tempExecution);
// assertEquals(stepExecution.getExitStatus(), tempExecution.getExitStatus());
// }
public void testUpdateStepExecutionWithNullId() {
StepExecution stepExecution = new StepExecution(null, null, null);
@@ -281,7 +279,7 @@ public abstract class AbstractStepDaoTests extends AbstractTransactionalDataSour
lastExecution.setStartTime(new Date(System.currentTimeMillis() + JUMP_INTO_FUTURE));
stepExecutionDao.saveStepExecution(lastExecution);
assertEquals(lastExecution, stepExecutionDao.getLastStepExecution(step1));
assertEquals(lastExecution, stepExecutionDao.getLastStepExecution(step1, jobExecution));
}
}

View File

@@ -76,18 +76,6 @@ public class JdbcStepDaoPrefixTests extends TestCase {
assertTrue(jdbcTemplate.getSqlStatement().indexOf("FOO_STEP_EXECUTION") != -1);
}
public void testModifiedFindStepExecutions(){
stepExecutionDao.setTablePrefix("FOO_");
stepExecutionDao.findStepExecutions(step);
assertTrue(jdbcTemplate.getSqlStatement().indexOf("FOO_STEP_EXECUTION") != -1);
}
// public void testModifiedUpdateStep(){
// stepInstanceDao.setTablePrefix("FOO_");
// stepInstanceDao.updateStepInstance(step);
// assertTrue(jdbcTemplate.getSqlStatement().indexOf("FOO_STEP") != -1);
// }
public void testModifiedCreateStep(){
stepInstanceDao.setTablePrefix("FOO_");
stepIncrementer.nextLongValue();
@@ -142,16 +130,6 @@ public class JdbcStepDaoPrefixTests extends TestCase {
assertTrue(jdbcTemplate.getSqlStatement().indexOf("BATCH_STEP") != -1);
}
// public void testDefaultUpdateStep(){
// stepInstanceDao.updateStepInstance(step);
// assertTrue(jdbcTemplate.getSqlStatement().indexOf("BATCH_STEP") != -1);
// }
public void testDefaultFindStepExecutions(){
stepExecutionDao.findStepExecutions(step);
assertTrue(jdbcTemplate.getSqlStatement().indexOf("BATCH_STEP_EXECUTION") != -1);
}
public void testDefaultSaveStepExecution(){
stepExecutionIncrementer.nextLongValue();
stepExecutionIncrementerControl.setReturnValue(1);