RESOLVED - issue BATCH-464: Throw exception if restart is attempted on job instance that was already completed successfully

This commit is contained in:
dsyer
2008-03-14 17:09:26 +00:00
parent db2344d2fa
commit ec2c66885d
9 changed files with 144 additions and 54 deletions

View File

@@ -17,7 +17,8 @@
package org.springframework.batch.sample;
import org.springframework.batch.core.UnexpectedJobExecutionException;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.converter.DefaultJobParametersConverter;
import org.springframework.batch.support.PropertiesConverter;
import org.springframework.jdbc.core.JdbcOperations;
/**
@@ -28,35 +29,36 @@ import org.springframework.jdbc.core.JdbcOperations;
*/
public class RestartFunctionalTests extends AbstractBatchLauncherTests {
//auto-injected attributes
// auto-injected attributes
private JdbcOperations jdbcTemplate;
/**
* Public setter for the jdbcTemplate.
*
*
* @param jdbcTemplate the jdbcTemplate to set
*/
public void setJdbcTemplate(JdbcOperations jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
/* (non-Javadoc)
/*
* (non-Javadoc)
* @see org.springframework.test.AbstractSingleSpringContextTests#onTearDown()
*/
protected void onTearDown() throws Exception {
jdbcTemplate.update("DELETE FROM TRADE");
}
/**
* Job fails on first run, because the module throws exception after
* processing more than half of the input. On the second run, the job should
* finish successfully, because it continues execution where the previous
* run stopped (module throws exception after fixed number of processed
* records).
* @throws Exception
* @throws Exception
*/
public void testRestart() throws Exception {
int before = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM TRADE");
try {
@@ -64,24 +66,26 @@ public class RestartFunctionalTests extends AbstractBatchLauncherTests {
fail("First run of the job is expected to fail.");
}
catch (UnexpectedJobExecutionException expected) {
//expected
assertTrue("Not planned exception: "+expected.getMessage(), expected.getMessage().toLowerCase().indexOf("planned")>=0);
// expected
assertTrue("Not planned exception: " + expected.getMessage(), expected.getMessage().toLowerCase().indexOf(
"planned") >= 0);
}
int medium = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM TRADE");
// assert based on commit interval = 2
assertEquals(before+2, medium);
assertEquals(before + 2, medium);
runJob();
int after = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM TRADE");
assertEquals(before+5, after);
assertEquals(before + 5, after);
}
// load the application context and launch the job
private void runJob() throws Exception {
launcher.run(getJob(), new JobParameters());
launcher.run(getJob(), new DefaultJobParametersConverter().getJobParameters(PropertiesConverter
.stringToProperties("restart=true")));
}
}