Added extra parameter to SpringBatch connector to support dynamic jobName in the headers, Test passed, code rules passed.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/45a8e1ea Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/45a8e1ea Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/45a8e1ea Branch: refs/heads/master Commit: 45a8e1ea35b6d85160011ea3c58964cc2600517a Parents: 4a6eba2 Author: Joseluis Pedrosa <joseluis.pedr...@elephanttalk.com> Authored: Fri May 27 12:55:34 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sat May 28 08:48:19 2016 +0200 ---------------------------------------------------------------------- .../spring/batch/SpringBatchEndpoint.java | 24 +++++++++++++++----- .../spring/batch/SpringBatchProducer.java | 1 - .../spring/batch/SpringBatchEndpointTest.java | 9 ++++---- 3 files changed, 22 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/45a8e1ea/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/SpringBatchEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/SpringBatchEndpoint.java b/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/SpringBatchEndpoint.java index 0cc3a45..e9130da 100644 --- a/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/SpringBatchEndpoint.java +++ b/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/SpringBatchEndpoint.java @@ -23,10 +23,7 @@ import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.impl.DefaultEndpoint; -import org.apache.camel.spi.Metadata; -import org.apache.camel.spi.UriEndpoint; -import org.apache.camel.spi.UriParam; -import org.apache.camel.spi.UriPath; +import org.apache.camel.spi.*; import org.apache.camel.util.CamelContextHelper; import org.springframework.batch.core.Job; import org.springframework.batch.core.launch.JobLauncher; @@ -37,10 +34,14 @@ import org.springframework.batch.core.launch.JobLauncher; @UriEndpoint(scheme = "spring-batch", title = "Spring Batch", syntax = "spring-batch:jobName", producerOnly = true, label = "spring,batch,scheduling") public class SpringBatchEndpoint extends DefaultEndpoint { - @UriPath() + + @UriPath @Metadata(required = "true") private String jobName; + @UriParam(defaultValue = "false") + private Boolean jobFromHeader; + /** * @deprecated will be removed in Camel 3.0 * use jobLauncher instead @@ -85,7 +86,7 @@ public class SpringBatchEndpoint extends DefaultEndpoint { if (jobLauncher == null) { jobLauncher = resolveJobLauncher(); } - if (job == null && jobName != null && !"dynamic".equals(jobName)) { + if (job == null && jobName != null && jobFromHeader == null) { job = CamelContextHelper.mandatoryLookup(getCamelContext(), jobName, Job.class); } } @@ -146,4 +147,15 @@ public class SpringBatchEndpoint extends DefaultEndpoint { public void setJobLauncher(JobLauncher jobLauncher) { this.jobLauncher = jobLauncher; } + + + /** + * Explicitly defines if the jobName shouls be taken from the headers instead of the URI. + */ + public void setJobFromHeader(Boolean jobFromHeader) { this.jobFromHeader = jobFromHeader; } + + + public Boolean getJobFromHeader() { return jobFromHeader; } + + } http://git-wip-us.apache.org/repos/asf/camel/blob/45a8e1ea/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/SpringBatchProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/SpringBatchProducer.java b/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/SpringBatchProducer.java index 7c985fe..3a6fc7b 100644 --- a/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/SpringBatchProducer.java +++ b/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/SpringBatchProducer.java @@ -56,7 +56,6 @@ public class SpringBatchProducer extends DefaultProducer { job2run = CamelContextHelper.mandatoryLookup(getEndpoint().getCamelContext(), messageJobName, Job.class); } - if (job2run == null) { exchange.setException(new CamelExchangeException("jobName was not specified in the endpoint construction " + " and header " + SpringBatchComponent.JOB_NAME + " could not be found", exchange)); http://git-wip-us.apache.org/repos/asf/camel/blob/45a8e1ea/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchEndpointTest.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchEndpointTest.java b/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchEndpointTest.java index e145330..b67237c 100644 --- a/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchEndpointTest.java +++ b/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchEndpointTest.java @@ -48,7 +48,6 @@ import static org.mockito.BDDMockito.*; public class SpringBatchEndpointTest extends CamelTestSupport { // Fixtures - @Mock JobLauncher jobLauncher; @@ -77,7 +76,7 @@ public class SpringBatchEndpointTest extends CamelTestSupport { public void configure() throws Exception { from("direct:start").to("spring-batch:mockJob").to("mock:test"); from("direct:dynamic"). - to("spring-batch:dynamic"). + to("spring-batch:mockJob?jobFromHeader=true"). errorHandler(deadLetterChannel("mock:error")). to("mock:test"); } @@ -111,7 +110,7 @@ public class SpringBatchEndpointTest extends CamelTestSupport { } @Test - public void dynamicJobWorksIfHeaderWithInvalidJobName() throws Exception { + public void dynamicJobFailsIfHeaderWithInvalidJobName() throws Exception { mockEndpoint.expectedMessageCount(0); errorEndpoint.expectedMessageCount(1); @@ -125,11 +124,11 @@ public class SpringBatchEndpointTest extends CamelTestSupport { } @Test - public void dynamicJobWorksIfHeaderPressentWithvalidJob() throws Exception { + public void dynamicJobWorksIfHeaderPressentWithValidJob() throws Exception { mockEndpoint.expectedMessageCount(1); errorEndpoint.expectedMessageCount(0); - Thread.sleep(5000); + //dynamic job work if header is present and the job exists final Map<String, Object> headers = new HashMap<>(); headers.put(SpringBatchComponent.JOB_NAME, "dynamicMockjob");