From fec40fd3f8397b2d824d30ad64312ad018d31c3a Mon Sep 17 00:00:00 2001 From: Thomas Risberg Date: Wed, 29 Mar 2017 11:33:29 -0400 Subject: [PATCH] Adding a method to pass in taskName for new empty TaskExecution Resolves #298 Added test and add param to javadoc --- .../cloud/task/repository/TaskRepository.java | 13 +++++++++++++ .../support/SimpleTaskRepository.java | 9 +++++++-- .../cloud/task/executionid/TaskStartTests.java | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/TaskRepository.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/TaskRepository.java index d15cb36e..9cd267fa 100644 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/TaskRepository.java +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/TaskRepository.java @@ -70,6 +70,19 @@ public interface TaskRepository { @Transactional TaskExecution createTaskExecution(TaskExecution taskExecution); + /** + * Creates an empty TaskExecution with just an id and name provided. This is intended to be + * utilized in systems where the request of launching a task is separate from the + * actual start of a task (the underlying system may need to deploy the task prior to + * launching, etc). + * + * @param name task name to be associated with the task execution. + * + * @return the initial {@link TaskExecution} + */ + @Transactional + TaskExecution createTaskExecution(String name); + /** * Creates an empty TaskExecution with just an id provided. This is intended to be * utilized in systems where the request of launching a task is separate from the diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/support/SimpleTaskRepository.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/support/SimpleTaskRepository.java index d388fd3b..c0d0e087 100644 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/support/SimpleTaskRepository.java +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/support/SimpleTaskRepository.java @@ -115,15 +115,20 @@ public class SimpleTaskRepository implements TaskRepository { } @Override - public TaskExecution createTaskExecution() { + public TaskExecution createTaskExecution(String name) { initialize(); TaskExecution taskExecution = - taskExecutionDao.createTaskExecution(null, null, + taskExecutionDao.createTaskExecution(name, null, Collections.emptyList(), null); logger.debug("Creating: " + taskExecution.toString()); return taskExecution; } + @Override + public TaskExecution createTaskExecution() { + return createTaskExecution((String)null); + } + @Override public TaskExecution startTaskExecution(long executionid, String taskName, Date startTime, List arguments, String externalExecutionId) { diff --git a/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartTests.java b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartTests.java index 6d21a3c6..7518ce67 100644 --- a/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartTests.java +++ b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartTests.java @@ -55,6 +55,7 @@ import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.util.SocketUtils; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -144,6 +145,23 @@ public class TaskStartTests { assertEquals("return code should be 0", 0, taskExecutions.iterator().next().getExitCode().intValue()); } + @Test + public void testWithGeneratedTaskExecutionWithName() throws Exception { + final String TASK_EXECUTION_NAME = "PRE-EXECUTION-TEST-NAME"; + taskRepository.createTaskExecution(TASK_EXECUTION_NAME); + assertEquals("Only one row is expected", 1, taskExplorer.getTaskExecutionCount()); + assertEquals(TASK_EXECUTION_NAME, taskExplorer.getTaskExecution(1).getTaskName()); + + getTaskApplication(1).run(new String[0]); + assertTrue(waitForDBToBePopulated()); + + Page taskExecutions = taskExplorer.findAll(new PageRequest(0, 10)); + TaskExecution te = taskExecutions.iterator().next(); + assertEquals("Only one row is expected", 1, taskExecutions.getTotalElements()); + assertEquals("return code should be 0", 0, taskExecutions.iterator().next().getExitCode().intValue()); + assertEquals("batchEvents", taskExplorer.getTaskExecution(1).getTaskName()); + } + @Test(expected = ApplicationContextException.class) public void testWithNoTaskExecution() throws Exception { getTaskApplication(55).run(new String[0]);