OPEN - BATCH-990: Implement and test synchronizeStatus() in MapJobExecutionDao

use upgradeStatus(..) instead of setStatus(..) in synchronizeStatus()
This commit is contained in:
robokaso
2009-01-09 12:10:44 +00:00
parent 22c9fd346d
commit e497499f40
4 changed files with 39 additions and 22 deletions

View File

@@ -260,7 +260,7 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
if (currentVersion != jobExecution.getVersion().intValue()) {
String status = getJdbcTemplate().queryForObject(getQuery(GET_STATUS), String.class, jobExecution.getId());
jobExecution.setStatus(BatchStatus.valueOf(status));
jobExecution.upgradeStatus(BatchStatus.valueOf(status));
jobExecution.setVersion(currentVersion);
}
}

View File

@@ -130,7 +130,7 @@ public class MapJobExecutionDao implements JobExecutionDao {
public void synchronizeStatus(JobExecution jobExecution) {
JobExecution saved = getJobExecution(jobExecution.getId());
if (saved.getVersion().intValue() != jobExecution.getVersion().intValue()) {
jobExecution.setStatus(saved.getStatus());
jobExecution.upgradeStatus(saved.getStatus());
jobExecution.setVersion(saved.getVersion());
}
}

View File

@@ -269,28 +269,59 @@ public abstract class AbstractJobExecutionDaoTests extends AbstractTransactional
}
/**
* Successful synchronization from STARTED to STOPPING status.
*/
@Transactional
@Test
public void testSynchronizeStatus() {
public void testSynchronizeStatusUpgrade() {
JobExecution exec1 = new JobExecution(jobInstance);
exec1.setStatus(BatchStatus.STARTED);
exec1.setStatus(BatchStatus.STOPPING);
dao.saveJobExecution(exec1);
JobExecution exec2 = new JobExecution(jobInstance);
Assert.state(exec1.getId() != null);
exec2.setId(exec1.getId());
exec2.setStatus(BatchStatus.STARTED);
exec2.setVersion(7);
Assert.state(exec1.getVersion() != exec2.getVersion());
Assert.state(exec1.getStatus() != exec2.getStatus());
dao.synchronizeStatus(exec2);
assertEquals(exec1.getVersion(), exec2.getVersion());
assertEquals(exec1.getStatus(), exec2.getStatus());
}
/**
* UNKNOWN status won't be changed by synchronizeStatus, because it is the
* 'largest' BatchStatus (will not downgrade).
*/
@Transactional
@Test
public void testSynchronizeStatusDowngrade() {
JobExecution exec1 = new JobExecution(jobInstance);
exec1.setStatus(BatchStatus.STARTED);
dao.saveJobExecution(exec1);
JobExecution exec2 = new JobExecution(jobInstance);
Assert.state(exec1.getId() != null);
exec2.setId(exec1.getId());
exec2.setStatus(BatchStatus.UNKNOWN);
exec2.setVersion(7);
Assert.state(exec1.getVersion() != exec2.getVersion());
Assert.state(exec1.getStatus().isLessThan(exec2.getStatus()));
dao.synchronizeStatus(exec2);
assertEquals(exec1.getVersion(), exec2.getVersion());
assertEquals(BatchStatus.UNKNOWN, exec2.getStatus());
}
/*
* Check to make sure the executions are equal. Normally, comparing the id's
* is sufficient. However, for testing purposes, especially of a DAO, we

View File

@@ -1,14 +1,10 @@
package org.springframework.batch.core.repository.dao;
import static org.junit.Assert.*;
import org.springframework.batch.core.BatchStatus;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "sql-dao-test.xml" })
@@ -38,14 +34,4 @@ public class JdbcJobExecutionDaoTests extends AbstractJobExecutionDaoTests {
return stepExecutionDao;
}
@Transactional
@Test
public void testUpdateExecutionStatus(){
dao.saveJobExecution(execution);
execution.setStatus(BatchStatus.COMPLETED);
execution.incrementVersion();
dao.synchronizeStatus(execution);
assertEquals(BatchStatus.STARTING, execution.getStatus());
}
}