From f81604e4393821e64ece4ece5c69954d81af4d96 Mon Sep 17 00:00:00 2001 From: lucasward Date: Tue, 26 Aug 2008 03:53:41 +0000 Subject: [PATCH] BATCH-453: Added stop support to SimpleJobOperator and generated correct sql for remaining schema files. --- .../batch/core/explore/JobExplorer.java | 2 +- .../launch/support/SimpleJobOperator.java | 24 ++++++++++++- .../src/main/resources/schema-db2.sql | 15 +++----- .../src/main/resources/schema-derby.sql | 15 +++----- .../src/main/resources/schema-hsqldb.sql | 21 ++++-------- .../src/main/resources/schema-mysql.sql | 15 +++----- .../src/main/resources/schema-oracle10g.sql | 15 +++----- .../src/main/resources/schema-postgresql.sql | 15 +++----- .../src/main/resources/schema-sqlserver.sql | 15 +++----- .../src/main/resources/schema-sybase.sql | 15 +++----- .../src/main/sql/tables-main.sql.vpp | 16 +++------ .../support/SimpleJobOperatorTests.java | 34 +++++++++++++------ 12 files changed, 94 insertions(+), 108 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/explore/JobExplorer.java b/spring-batch-core/src/main/java/org/springframework/batch/core/explore/JobExplorer.java index 8504347aa..cbf0df82f 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/explore/JobExplorer.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/explore/JobExplorer.java @@ -44,7 +44,7 @@ public interface JobExplorer { /** * @param executionId - * @return the {@link JobExecution} with this id, or null + * @return the {@link JobExecution} with this id, or null if not found */ JobExecution getJobExecution(Long executionId); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/SimpleJobOperator.java b/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/SimpleJobOperator.java index 4178deb7c..632b576b5 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/SimpleJobOperator.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/SimpleJobOperator.java @@ -25,6 +25,7 @@ import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobInstance; @@ -45,6 +46,7 @@ import org.springframework.batch.core.launch.NoSuchJobExecutionException; import org.springframework.batch.core.launch.NoSuchJobInstanceException; import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException; import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException; +import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.JobRestartException; import org.springframework.batch.support.PropertiesConverter; import org.springframework.beans.factory.InitializingBean; @@ -52,6 +54,7 @@ import org.springframework.util.Assert; /** * @author Dave Syer + * @author Lucas Ward * */ public class SimpleJobOperator implements JobOperator, InitializingBean { @@ -67,6 +70,8 @@ public class SimpleJobOperator implements JobOperator, InitializingBean { private JobExplorer jobExplorer; private JobLauncher jobLauncher; + + private JobRepository jobRepository; private JobParametersConverter jobParametersConverter = new DefaultJobParametersConverter(); @@ -106,6 +111,10 @@ public class SimpleJobOperator implements JobOperator, InitializingBean { public void setJobExplorer(JobExplorer jobExplorer) { this.jobExplorer = jobExplorer; } + + public void setJobRepository(JobRepository jobRepository) { + this.jobRepository = jobRepository; + } /** * Public setter for the {@link JobLauncher}. @@ -356,7 +365,20 @@ public class SimpleJobOperator implements JobOperator, InitializingBean { * org.springframework.batch.core.launch.JobOperator#stop(java.lang.Long) */ public boolean stop(long executionId) throws NoSuchJobExecutionException { - throw new UnsupportedOperationException("See BATCH-453 for implementation."); + + JobExecution jobExecution = jobExplorer.getJobExecution(executionId); + + if(jobExecution == null){ + throw new NoSuchJobExecutionException("No JobExecution found for id: [" + executionId + "]"); + } + + //Indicate the execution should be stopped by setting it's status to 'STOPPING'. It is assumed that + //the step implementation will check this status at chunk boundaries. + jobExecution.setStatus(BatchStatus.STOPPING); + jobRepository.update(jobExecution); + + // TODO: I'm not sure that we can really know if the execution stopped + return true; } } diff --git a/spring-batch-core/src/main/resources/schema-db2.sql b/spring-batch-core/src/main/resources/schema-db2.sql index 1dbdeed1c..0f76107f0 100644 --- a/spring-batch-core/src/main/resources/schema-db2.sql +++ b/spring-batch-core/src/main/resources/schema-db2.sql @@ -28,6 +28,7 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED TIMESTAMP, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) ; @@ -60,20 +61,14 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED TIMESTAMP, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ; -CREATE TABLE BATCH_EXECUTION_CONTEXT ( - EXECUTION_ID BIGINT NOT NULL, - DISCRIMINATOR VARCHAR(1) NOT NULL, - TYPE_CD VARCHAR(6) NOT NULL, - KEY_NAME VARCHAR(1000) NOT NULL, - STRING_VAL VARCHAR(1000) , - DATE_VAL TIMESTAMP DEFAULT NULL, - LONG_VAL BIGINT , - DOUBLE_VAL DOUBLE PRECISION , - OBJECT_VAL BLOB +CREATE TABLE BATCH_MAP_STORE ( + MAP_STORE_ID BIGINT NOT NULL PRIMARY KEY , + OBJECT_VAL BLOB NOT NULL ) ; CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ; diff --git a/spring-batch-core/src/main/resources/schema-derby.sql b/spring-batch-core/src/main/resources/schema-derby.sql index fca1b3dc9..cfad8e92d 100644 --- a/spring-batch-core/src/main/resources/schema-derby.sql +++ b/spring-batch-core/src/main/resources/schema-derby.sql @@ -28,6 +28,7 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED TIMESTAMP, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) ; @@ -60,20 +61,14 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED TIMESTAMP, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ; -CREATE TABLE BATCH_EXECUTION_CONTEXT ( - EXECUTION_ID BIGINT NOT NULL, - DISCRIMINATOR VARCHAR(1) NOT NULL, - TYPE_CD VARCHAR(6) NOT NULL, - KEY_NAME VARCHAR(1000) NOT NULL, - STRING_VAL VARCHAR(1000) , - DATE_VAL TIMESTAMP DEFAULT NULL, - LONG_VAL BIGINT , - DOUBLE_VAL DOUBLE PRECISION , - OBJECT_VAL BLOB +CREATE TABLE BATCH_MAP_STORE ( + MAP_STORE_ID BIGINT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, + OBJECT_VAL BLOB NOT NULL ) ; CREATE TABLE BATCH_STEP_EXECUTION_SEQ (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1)); diff --git a/spring-batch-core/src/main/resources/schema-hsqldb.sql b/spring-batch-core/src/main/resources/schema-hsqldb.sql index ba855e2ad..efd24e6da 100644 --- a/spring-batch-core/src/main/resources/schema-hsqldb.sql +++ b/spring-batch-core/src/main/resources/schema-hsqldb.sql @@ -27,8 +27,8 @@ CREATE TABLE BATCH_JOB_EXECUTION ( STATUS VARCHAR(10) , CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , - EXIT_MESSAGE VARCHAR(2500) , - LAST_UPDATED TIMESTAMP , + EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED TIMESTAMP, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) ; @@ -60,22 +60,15 @@ CREATE TABLE BATCH_STEP_EXECUTION ( ROLLBACK_COUNT BIGINT , CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , - EXIT_MESSAGE VARCHAR(2500) , - LAST_UPDATED TIMESTAMP , + EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED TIMESTAMP, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ; -CREATE TABLE BATCH_EXECUTION_CONTEXT ( - EXECUTION_ID BIGINT NOT NULL, - DISCRIMINATOR VARCHAR(1) NOT NULL, - TYPE_CD VARCHAR(6) NOT NULL, - KEY_NAME VARCHAR(1000) NOT NULL, - STRING_VAL VARCHAR(1000) , - DATE_VAL TIMESTAMP DEFAULT NULL, - LONG_VAL BIGINT , - DOUBLE_VAL DOUBLE PRECISION , - OBJECT_VAL LONGVARBINARY +CREATE TABLE BATCH_MAP_STORE ( + MAP_STORE_ID BIGINT IDENTITY NOT NULL PRIMARY KEY , + OBJECT_VAL LONGVARBINARY NOT NULL ) ; CREATE TABLE BATCH_STEP_EXECUTION_SEQ ( diff --git a/spring-batch-core/src/main/resources/schema-mysql.sql b/spring-batch-core/src/main/resources/schema-mysql.sql index 703e80f55..52978da88 100644 --- a/spring-batch-core/src/main/resources/schema-mysql.sql +++ b/spring-batch-core/src/main/resources/schema-mysql.sql @@ -28,6 +28,7 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED DATETIME, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) type=InnoDB; @@ -60,20 +61,14 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED DATETIME, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) type=InnoDB; -CREATE TABLE BATCH_EXECUTION_CONTEXT ( - EXECUTION_ID BIGINT NOT NULL, - DISCRIMINATOR VARCHAR(1) NOT NULL, - TYPE_CD VARCHAR(6) NOT NULL, - KEY_NAME VARCHAR(1000) NOT NULL, - STRING_VAL VARCHAR(1000) , - DATE_VAL DATETIME DEFAULT NULL, - LONG_VAL BIGINT , - DOUBLE_VAL DOUBLE PRECISION , - OBJECT_VAL BLOB +CREATE TABLE BATCH_MAP_STORE ( + MAP_STORE_ID BIGINT NOT NULL PRIMARY KEY , + OBJECT_VAL BLOB NOT NULL ) type=InnoDB; CREATE TABLE BATCH_STEP_EXECUTION_SEQ (ID BIGINT NOT NULL) type=MYISAM; diff --git a/spring-batch-core/src/main/resources/schema-oracle10g.sql b/spring-batch-core/src/main/resources/schema-oracle10g.sql index 152aaae31..ec6382fde 100644 --- a/spring-batch-core/src/main/resources/schema-oracle10g.sql +++ b/spring-batch-core/src/main/resources/schema-oracle10g.sql @@ -28,6 +28,7 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR2(20) , EXIT_MESSAGE VARCHAR2(2500) , + LAST_UPDATED TIMESTAMP, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) ; @@ -60,20 +61,14 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR2(20) , EXIT_MESSAGE VARCHAR2(2500) , + LAST_UPDATED TIMESTAMP, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ; -CREATE TABLE BATCH_EXECUTION_CONTEXT ( - EXECUTION_ID NUMBER(38) NOT NULL, - DISCRIMINATOR VARCHAR2(1) NOT NULL, - TYPE_CD VARCHAR2(6) NOT NULL, - KEY_NAME VARCHAR2(1000) NOT NULL, - STRING_VAL VARCHAR2(1000) , - DATE_VAL TIMESTAMP DEFAULT NULL, - LONG_VAL NUMBER(38) , - DOUBLE_VAL NUMBER , - OBJECT_VAL BLOB +CREATE TABLE BATCH_MAP_STORE ( + MAP_STORE_ID NUMBER(38) NOT NULL PRIMARY KEY , + OBJECT_VAL BLOB NOT NULL ) ; CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ; diff --git a/spring-batch-core/src/main/resources/schema-postgresql.sql b/spring-batch-core/src/main/resources/schema-postgresql.sql index fee8aea77..fda2d4340 100644 --- a/spring-batch-core/src/main/resources/schema-postgresql.sql +++ b/spring-batch-core/src/main/resources/schema-postgresql.sql @@ -28,6 +28,7 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED TIMESTAMP, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) ; @@ -60,20 +61,14 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED TIMESTAMP, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ; -CREATE TABLE BATCH_EXECUTION_CONTEXT ( - EXECUTION_ID BIGINT NOT NULL, - DISCRIMINATOR VARCHAR(1) NOT NULL, - TYPE_CD VARCHAR(6) NOT NULL, - KEY_NAME VARCHAR(1000) NOT NULL, - STRING_VAL VARCHAR(1000) , - DATE_VAL TIMESTAMP DEFAULT NULL, - LONG_VAL BIGINT , - DOUBLE_VAL DOUBLE PRECISION , - OBJECT_VAL BYTEA +CREATE TABLE BATCH_MAP_STORE ( + MAP_STORE_ID BIGINT NOT NULL PRIMARY KEY , + OBJECT_VAL BYTEA NOT NULL ) ; CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ; diff --git a/spring-batch-core/src/main/resources/schema-sqlserver.sql b/spring-batch-core/src/main/resources/schema-sqlserver.sql index e8866b785..cdcaa6ded 100644 --- a/spring-batch-core/src/main/resources/schema-sqlserver.sql +++ b/spring-batch-core/src/main/resources/schema-sqlserver.sql @@ -28,6 +28,7 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED DATETIME, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) ; @@ -60,20 +61,14 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CONTINUABLE CHAR(1) , EXIT_CODE VARCHAR(20) , EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED DATETIME, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ; -CREATE TABLE BATCH_EXECUTION_CONTEXT ( - EXECUTION_ID BIGINT NOT NULL, - DISCRIMINATOR VARCHAR(1) NOT NULL, - TYPE_CD VARCHAR(6) NOT NULL, - KEY_NAME VARCHAR(1000) NOT NULL, - STRING_VAL VARCHAR(1000) , - DATE_VAL DATETIME DEFAULT NULL, - LONG_VAL BIGINT , - DOUBLE_VAL DOUBLE PRECISION , - OBJECT_VAL IMAGE +CREATE TABLE BATCH_MAP_STORE ( + MAP_STORE_ID BIGINT NOT NULL PRIMARY KEY , + OBJECT_VAL IMAGE NOT NULL ) ; CREATE TABLE BATCH_STEP_EXECUTION_SEQ (ID BIGINT IDENTITY); diff --git a/spring-batch-core/src/main/resources/schema-sybase.sql b/spring-batch-core/src/main/resources/schema-sybase.sql index 63417b7f2..bde800973 100644 --- a/spring-batch-core/src/main/resources/schema-sybase.sql +++ b/spring-batch-core/src/main/resources/schema-sybase.sql @@ -28,6 +28,7 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CONTINUABLE CHAR(1) NULL, EXIT_CODE VARCHAR(20) NULL, EXIT_MESSAGE VARCHAR(2500) NULL, + LAST_UPDATED DATETIME, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) ; @@ -60,20 +61,14 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CONTINUABLE CHAR(1) NULL, EXIT_CODE VARCHAR(20) NULL, EXIT_MESSAGE VARCHAR(2500) NULL, + LAST_UPDATED DATETIME, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ; -CREATE TABLE BATCH_EXECUTION_CONTEXT ( - EXECUTION_ID BIGINT NOT NULL, - DISCRIMINATOR VARCHAR(1) NOT NULL, - TYPE_CD VARCHAR(6) NOT NULL, - KEY_NAME VARCHAR(1000) NOT NULL, - STRING_VAL VARCHAR(1000) NULL, - DATE_VAL DATETIME DEFAULT NULL, - LONG_VAL BIGINT NULL, - DOUBLE_VAL DOUBLE PRECISION NULL, - OBJECT_VAL IMAGE NULL +CREATE TABLE BATCH_MAP_STORE ( + MAP_STORE_ID BIGINT NOT NULL PRIMARY KEY , + OBJECT_VAL IMAGE NOT NULL ) ; CREATE TABLE BATCH_STEP_EXECUTION_SEQ (ID BIGINT IDENTITY); diff --git a/spring-batch-core/src/main/sql/tables-main.sql.vpp b/spring-batch-core/src/main/sql/tables-main.sql.vpp index 1868de2a5..463178797 100644 --- a/spring-batch-core/src/main/sql/tables-main.sql.vpp +++ b/spring-batch-core/src/main/sql/tables-main.sql.vpp @@ -7,7 +7,7 @@ CREATE TABLE BATCH_JOB_INSTANCE ( CREATE TABLE BATCH_JOB_EXECUTION ( JOB_EXECUTION_ID ${BIGINT} $!{IDENTITY} NOT NULL PRIMARY KEY $!{GENERATED}, - VERSION ${BIGINT} $!{NULL}, + VERSION ${BIGINT} $!{NULL}, JOB_INSTANCE_ID ${BIGINT} NOT NULL, CREATE_TIME ${TIMESTAMP} NOT NULL, START_TIME ${TIMESTAMP} DEFAULT NULL $!{NULL}, @@ -16,12 +16,9 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CONTINUABLE CHAR(1) $!{NULL}, EXIT_CODE ${VARCHAR}(20) $!{NULL}, EXIT_MESSAGE ${VARCHAR}(2500) $!{NULL}, - EXECUTION_CONTEXT ${CLOB} $!{NULL}, - MAP_STORE_ID ${BIGINT} $!{NULL}, + LAST_UPDATED ${TIMESTAMP}, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID), - constraint MAP_JOB_EXEC_FK foreign key (MAP_STORE_ID) - references BATCH_MAP_STORE(MAP_STORE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) $!{VOODOO}; CREATE TABLE BATCH_JOB_PARAMS ( @@ -52,10 +49,7 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CONTINUABLE CHAR(1) $!{NULL}, EXIT_CODE ${VARCHAR}(20) $!{NULL}, EXIT_MESSAGE ${VARCHAR}(2500) $!{NULL}, - EXECUTION_CONTEXT ${CLOB} $!{NULL}, - MAP_STORE_ID ${BIGINT} $!{NULL}, + LAST_UPDATED ${TIMESTAMP}, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) - references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID), - constraint MAP_STEP_EXEC_FK foreign key (MAP_STORE_ID) - references BATCH_MAP_STORE(MAP_STORE_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) $!{VOODOO}; diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/SimpleJobOperatorTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/SimpleJobOperatorTests.java index 98ef7196b..1fa2be563 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/SimpleJobOperatorTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/SimpleJobOperatorTests.java @@ -18,6 +18,7 @@ package org.springframework.batch.core.launch.support; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.easymock.EasyMock.*; import java.util.Arrays; import java.util.Collection; @@ -30,6 +31,7 @@ import java.util.Set; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; +import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobInstance; @@ -46,6 +48,7 @@ import org.springframework.batch.core.launch.NoSuchJobExecutionException; import org.springframework.batch.core.launch.NoSuchJobInstanceException; import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException; import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException; +import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.JobRestartException; import org.springframework.batch.core.step.StepSupport; import org.springframework.batch.support.PropertiesConverter; @@ -61,6 +64,8 @@ public class SimpleJobOperatorTests { protected Job job; private JobExplorer jobExplorer; + + private JobRepository jobRepository; private JobParameters jobParameters; @@ -108,6 +113,9 @@ public class SimpleJobOperatorTests { jobExplorer = EasyMock.createNiceMock(JobExplorer.class); jobOperator.setJobExplorer(jobExplorer); + + jobRepository = createMock(JobRepository.class); + jobOperator.setJobRepository(jobRepository); jobOperator.setJobParametersConverter(new DefaultJobParametersConverter() { @Override @@ -138,17 +146,6 @@ public class SimpleJobOperatorTests { } } - @Test - public void testStop() throws Exception { - try { - jobOperator.stop(123L); - fail("Expected UnsupportedOperationException"); - } - catch (UnsupportedOperationException e) { - // expected - } - } - /** * Test method for * {@link org.springframework.batch.core.launch.support.SimpleJobOperator#startNextInstance(java.lang.String)} @@ -378,5 +375,20 @@ public class SimpleJobOperatorTests { } EasyMock.verify(jobExplorer); } + + @Test + public void testStop() throws Exception{ + JobInstance jobInstance = new JobInstance(123L, jobParameters, job.getName()); + JobExecution jobExecution = new JobExecution(jobInstance, 111L); + jobExplorer.getJobExecution(111L); + expectLastCall().andReturn(jobExecution); + jobRepository.update(jobExecution); + replay(jobExplorer); + replay(jobRepository); + jobOperator.stop(111L); + verify(jobExplorer); + verify(jobRepository); + assertEquals(BatchStatus.STOPPING, jobExecution.getStatus()); + } }