diff --git a/archetypes/.classpath b/archetypes/.classpath
new file mode 100644
index 000000000..6d8fb1e60
--- /dev/null
+++ b/archetypes/.classpath
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-batch-core/.springBeans b/spring-batch-core/.springBeans
index 41cad27f5..35d8dd4a0 100644
--- a/spring-batch-core/.springBeans
+++ b/spring-batch-core/.springBeans
@@ -60,6 +60,7 @@
src/test/resources/org/springframework/batch/core/configuration/xml/StopRestartOnCompletedStepJobParserTests-context.xml
src/test/resources/org/springframework/batch/core/configuration/xml/StopRestartOnFailedStepJobParserTests-context.xml
src/test/resources/org/springframework/batch/core/configuration/xml/JobRegistryJobParserTests-context.xml
+ src/test/resources/org/springframework/batch/core/launch/JobLauncherIntegrationTests-context.xml
diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/launch/JobLauncherIntegrationTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/launch/JobLauncherIntegrationTests.java
new file mode 100644
index 000000000..4259bad92
--- /dev/null
+++ b/spring-batch-core/src/test/java/org/springframework/batch/core/launch/JobLauncherIntegrationTests.java
@@ -0,0 +1,76 @@
+package org.springframework.batch.core.launch;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Calendar;
+
+import javax.sql.DataSource;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.batch.core.Job;
+import org.springframework.batch.core.JobExecution;
+import org.springframework.batch.core.JobInstance;
+import org.springframework.batch.core.JobParametersBuilder;
+import org.springframework.batch.core.repository.dao.JdbcJobInstanceDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@ContextConfiguration
+@RunWith(SpringJUnit4ClassRunner.class)
+public class JobLauncherIntegrationTests {
+
+ private SimpleJdbcTemplate jdbcTemplate;
+
+ @Autowired
+ private JobLauncher jobLauncher;
+
+ @Autowired
+ private Job job;
+
+ @Autowired
+ public void setDataSource(DataSource dataSource) {
+ jdbcTemplate = new SimpleJdbcTemplate(dataSource);
+ }
+
+ @Test
+ public void testLaunchAndRelaunch() throws Exception {
+
+ int before = jdbcTemplate.queryForInt("select count(*) from BATCH_JOB_INSTANCE");
+
+ JobExecution jobExecution = launch(true,0);
+ launch(false, jobExecution.getJobId());
+ launch(false, jobExecution.getJobId());
+
+ int after = jdbcTemplate.queryForInt("select count(*) from BATCH_JOB_INSTANCE");
+ assertEquals(before+1, after);
+
+ }
+
+ private JobExecution launch(boolean start, long jobInstanceID) throws Exception {
+
+ if (start) {
+
+ Calendar c = Calendar.getInstance();
+ JobParametersBuilder builder = new JobParametersBuilder();
+ builder.addDate("TIMESTAMP", c.getTime());
+ return jobLauncher.run(job, builder.toJobParameters());
+
+ } else {
+
+ JdbcJobInstanceDao dao = new JdbcJobInstanceDao();
+ dao.setJdbcTemplate(jdbcTemplate);
+ JobInstance instance = dao.getJobInstance(jobInstanceID);
+ if (instance != null) {
+ return jobLauncher.run(job, instance.getJobParameters());
+ }
+
+ return null;
+
+ }
+
+ }
+
+}
diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/launch/JobLauncherIntegrationTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/launch/JobLauncherIntegrationTests-context.xml
new file mode 100644
index 000000000..1a637a071
--- /dev/null
+++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/launch/JobLauncherIntegrationTests-context.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ schema-hsqldb.sql
+
+
+
+
+
+
+
+
+
+
+
+
+
+