diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/AbstractJob.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/AbstractJob.java index 3b8d5c418..e565a306e 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/AbstractJob.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/AbstractJob.java @@ -25,6 +25,8 @@ import org.springframework.batch.core.Step; import org.springframework.batch.core.listener.CompositeExecutionJobListener; import org.springframework.batch.core.repository.JobRepository; import org.springframework.beans.factory.BeanNameAware; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.util.Assert; import org.springframework.util.ClassUtils; /** @@ -36,7 +38,7 @@ import org.springframework.util.ClassUtils; * @author Lucas Ward * @author Dave Syer */ -public abstract class AbstractJob implements BeanNameAware, Job { +public abstract class AbstractJob implements Job, BeanNameAware, InitializingBean { private List steps = new ArrayList(); @@ -161,6 +163,10 @@ public abstract class AbstractJob implements BeanNameAware, Job { public void setJobRepository(JobRepository jobRepository) { this.jobRepository = jobRepository; } + + public void afterPropertiesSet() throws Exception { + Assert.notNull(getJobRepository(), "JobRepository must be set"); + } protected JobRepository getJobRepository() { return jobRepository; diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/AbstractJobTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/AbstractJobTests.java index ad3895fd2..e72971d5f 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/AbstractJobTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/AbstractJobTests.java @@ -19,6 +19,8 @@ import java.util.Collections; import junit.framework.TestCase; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobExecutionException; import org.springframework.batch.core.step.StepSupport; /** @@ -27,13 +29,21 @@ import org.springframework.batch.core.step.StepSupport; */ public class AbstractJobTests extends TestCase { - JobSupport job = new JobSupport("job"); + AbstractJob job = new AbstractJob("job") { + public void execute(JobExecution execution) throws JobExecutionException { + throw new UnsupportedOperationException(); + } + }; /** * Test method for {@link org.springframework.batch.core.job.AbstractJob#getName()}. */ public void testGetName() { - job = new JobSupport(); + job = new AbstractJob(){ + public void execute(JobExecution execution) throws JobExecutionException { + // No-op + } + }; assertNull(job.getName()); } @@ -49,7 +59,11 @@ public class AbstractJobTests extends TestCase { * Test method for {@link org.springframework.batch.core.job.AbstractJob#setBeanName(java.lang.String)}. */ public void testSetBeanNameWithNullName() { - job = new JobSupport(null); + job = new AbstractJob(null) { + public void execute(JobExecution execution) throws JobExecutionException { + // NO-OP + } + }; assertEquals(null, job.getName()); job.setBeanName("foo"); assertEquals("foo", job.getName()); @@ -72,15 +86,6 @@ public class AbstractJobTests extends TestCase { assertEquals(1, job.getSteps().size()); } - /** - * Test method for {@link org.springframework.batch.core.job.JobSupport#setStartLimit(int)}. - */ - public void testSetStartLimit() { - assertEquals(Integer.MAX_VALUE, job.getStartLimit()); - job.setStartLimit(10); - assertEquals(10, job.getStartLimit()); - } - /** * Test method for {@link org.springframework.batch.core.job.AbstractJob#setRestartable(boolean)}. */ @@ -94,18 +99,20 @@ public class AbstractJobTests extends TestCase { String value = job.toString(); assertTrue("Should contain name: " + value, value.indexOf("name=") >= 0); } - - public void testRunNotSupported() throws Exception { + + public void testAfterPropertiesSet() throws Exception { + AbstractJob job = new AbstractJob() { + public void execute(JobExecution execution) throws JobExecutionException { + } + }; + job.setJobRepository(null); try { - job.execute(null); - } catch (UnsupportedOperationException e) { - // expected - String message = e.getMessage(); - assertTrue("Message should contain JobSupport: " + message, contains(message, "JobSupport")); + job.afterPropertiesSet(); + fail(); + } + catch (IllegalArgumentException e) { + assertTrue(e.getMessage().contains("JobRepository")); } } - - private boolean contains(String str, String searchStr) { - return str.indexOf(searchStr) != -1; - } + } diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/launch/support/job.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/launch/support/job.xml index c2281b93c..6d450fd05 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/launch/support/job.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/launch/support/job.xml @@ -13,6 +13,9 @@ + + +