From 49640faef5097beb0b4cbfb831dc156df30969fc Mon Sep 17 00:00:00 2001 From: robokaso Date: Thu, 12 Jun 2008 12:37:19 +0000 Subject: [PATCH] RESOLVED - BATCH-505: Job-level ExecutionContext added sample job --- spring-batch-samples/.springBeans | 12 ++++++ .../tasklet/DummyMessageReceivingTasklet.java | 34 +++++++++++++++ .../tasklet/DummyMessageSendingTasklet.java | 41 +++++++++++++++++++ .../jobs/jobExecutionContextSample.xml | 32 +++++++++++++++ ...ExecutionContextSampleFunctionalTests.java | 26 ++++++++++++ ...onContextSampleFunctionalTests-context.xml | 10 +++++ 6 files changed, 155 insertions(+) create mode 100644 spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageReceivingTasklet.java create mode 100644 spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageSendingTasklet.java create mode 100644 spring-batch-samples/src/main/resources/jobs/jobExecutionContextSample.xml create mode 100644 spring-batch-samples/src/test/java/org/springframework/batch/sample/JobExecutionContextSampleFunctionalTests.java create mode 100644 spring-batch-samples/src/test/resources/org/springframework/batch/sample/JobExecutionContextSampleFunctionalTests-context.xml diff --git a/spring-batch-samples/.springBeans b/spring-batch-samples/.springBeans index 610e49707..af76377a4 100644 --- a/spring-batch-samples/.springBeans +++ b/spring-batch-samples/.springBeans @@ -37,6 +37,7 @@ src/main/resources/jobs/taskletJob.xml src/main/resources/jobs/compositeItemWriterSampleJob.xml src/main/resources/jobs/multiResourceJob.xml + src/main/resources/jobs/jobExecutionContextSample.xml @@ -305,5 +306,16 @@ src/main/resources/simple-job-launcher-context.xml + + + true + false + + src/main/resources/data-source-context.xml + src/main/resources/data-source-context-init.xml + src/main/resources/jobs/jobExecutionContextSample.xml + src/main/resources/simple-job-launcher-context.xml + + diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageReceivingTasklet.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageReceivingTasklet.java new file mode 100644 index 000000000..73b42464c --- /dev/null +++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageReceivingTasklet.java @@ -0,0 +1,34 @@ +package org.springframework.batch.sample.tasklet; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.batch.core.StepExecution; +import org.springframework.batch.core.listener.StepExecutionListenerSupport; +import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.item.ExecutionContext; +import org.springframework.batch.repeat.ExitStatus; + +/** + * Dummy tasklet that retrieves message from the job execution context. + */ +public class DummyMessageReceivingTasklet extends StepExecutionListenerSupport implements Tasklet { + + private static final Log logger = LogFactory.getLog(DummyMessageReceivingTasklet.class); + + private String receivedMessage = null; + + public void beforeStep(StepExecution stepExecution) { + ExecutionContext ctx = stepExecution.getJobExecution().getExecutionContext(); + receivedMessage = ctx.getString(DummyMessageSendingTasklet.MESSAGE_KEY); + logger.info("Got message from context: " + receivedMessage); + } + + public ExitStatus execute() throws Exception { + return ExitStatus.FINISHED; + } + + public String getReceivedMessage() { + return receivedMessage; + } + +} diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageSendingTasklet.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageSendingTasklet.java new file mode 100644 index 000000000..cdd13a710 --- /dev/null +++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageSendingTasklet.java @@ -0,0 +1,41 @@ +package org.springframework.batch.sample.tasklet; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.batch.core.StepExecution; +import org.springframework.batch.core.listener.StepExecutionListenerSupport; +import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.item.ExecutionContext; +import org.springframework.batch.repeat.ExitStatus; + +/** + * Dummy tasklet that stores a message in the job execution context. + */ +public class DummyMessageSendingTasklet extends StepExecutionListenerSupport implements Tasklet { + + private static final Log logger = LogFactory.getLog(DummyMessageSendingTasklet.class); + + public static final String MESSAGE_KEY = "DummyMessageSendingTasklet.MESSAGE"; + + private String message = "Hello!"; + + public ExitStatus afterStep(StepExecution stepExecution) { + ExecutionContext ctx = stepExecution.getJobExecution().getExecutionContext(); + ctx.putString(MESSAGE_KEY, message); + logger.info("Put message into context: " + message); + return null; + } + + public ExitStatus execute() throws Exception { + return ExitStatus.FINISHED; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + +} diff --git a/spring-batch-samples/src/main/resources/jobs/jobExecutionContextSample.xml b/spring-batch-samples/src/main/resources/jobs/jobExecutionContextSample.xml new file mode 100644 index 000000000..b47a82eee --- /dev/null +++ b/spring-batch-samples/src/main/resources/jobs/jobExecutionContextSample.xml @@ -0,0 +1,32 @@ + + + + + Simple example of inter-step communication using persistent job + execution context. + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-batch-samples/src/test/java/org/springframework/batch/sample/JobExecutionContextSampleFunctionalTests.java b/spring-batch-samples/src/test/java/org/springframework/batch/sample/JobExecutionContextSampleFunctionalTests.java new file mode 100644 index 000000000..d81cb835b --- /dev/null +++ b/spring-batch-samples/src/test/java/org/springframework/batch/sample/JobExecutionContextSampleFunctionalTests.java @@ -0,0 +1,26 @@ +package org.springframework.batch.sample; + +import org.springframework.batch.sample.tasklet.DummyMessageReceivingTasklet; +import org.springframework.batch.sample.tasklet.DummyMessageSendingTasklet; + +public class JobExecutionContextSampleFunctionalTests extends AbstractValidatingBatchLauncherTests { + + private DummyMessageSendingTasklet sender; + + private DummyMessageReceivingTasklet receiver; + + protected void validatePostConditions() throws Exception { + assertEquals(sender.getMessage(), receiver.getReceivedMessage()); + } + + // auto-injection setter + public void setSender(DummyMessageSendingTasklet sender) { + this.sender = sender; + } + + // auto-injection setter + public void setReceiver(DummyMessageReceivingTasklet receiver) { + this.receiver = receiver; + } + +} diff --git a/spring-batch-samples/src/test/resources/org/springframework/batch/sample/JobExecutionContextSampleFunctionalTests-context.xml b/spring-batch-samples/src/test/resources/org/springframework/batch/sample/JobExecutionContextSampleFunctionalTests-context.xml new file mode 100644 index 000000000..d04503b41 --- /dev/null +++ b/spring-batch-samples/src/test/resources/org/springframework/batch/sample/JobExecutionContextSampleFunctionalTests-context.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file