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