This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 66998d787d380ef2098ce926d25cfb483e2b7772 Author: Andrea Cosentino <anco...@gmail.com> AuthorDate: Wed May 17 14:00:45 2023 +0200 CAMEL-19363 - Upgrade Spring Batch to version 5.x Signed-off-by: Andrea Cosentino <anco...@gmail.com> --- components/camel-spring-batch/pom.xml | 12 ++++++++++ .../spring/batch/support/CamelItemReader.java | 16 +++++++++---- .../spring/batch/support/CamelItemWriter.java | 16 +++++++------ .../spring/batch/SpringBatchEndpointTest.java | 16 ------------- .../component/spring/batch/SpringBatchIT.java | 3 +++ ...cherTest.java => SpringBatchJobLauncherIT.java} | 4 +++- .../spring/batch/support/CamelItemWriterTest.java | 3 ++- .../spring/batch/springBatchtestContext.xml | 26 +++++++++++++-------- .../batch/springBatchtestJobLauncherContext.xml | 27 ++++++++++++++-------- parent/pom.xml | 2 +- 10 files changed, 76 insertions(+), 49 deletions(-) diff --git a/components/camel-spring-batch/pom.xml b/components/camel-spring-batch/pom.xml index c0eaa2e0730..a5d7fb79359 100644 --- a/components/camel-spring-batch/pom.xml +++ b/components/camel-spring-batch/pom.xml @@ -67,5 +67,17 @@ <artifactId>camel-test-spring-junit5</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-dbcp2</artifactId> + <version>${commons-dbcp2-version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.hsqldb</groupId> + <artifactId>hsqldb</artifactId> + <version>${hsqldb-version}</version> + <scope>test</scope> + </dependency> </dependencies> </project> diff --git a/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/support/CamelItemReader.java b/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/support/CamelItemReader.java index 668ba551f00..af3d9097b23 100644 --- a/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/support/CamelItemReader.java +++ b/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/support/CamelItemReader.java @@ -30,22 +30,20 @@ public class CamelItemReader<I> extends ServiceSupport implements ItemReader<I>, private static final Logger LOG = LoggerFactory.getLogger(CamelItemReader.class); - private final CamelContext camelContext; private final ConsumerTemplate consumerTemplate; private final String endpointUri; public CamelItemReader(ConsumerTemplate consumerTemplate, String endpointUri) { this.consumerTemplate = consumerTemplate; - this.camelContext = consumerTemplate.getCamelContext(); this.endpointUri = endpointUri; } @Override public void afterPropertiesSet() throws Exception { - ObjectHelper.notNull(camelContext, "CamelContext", this); + ObjectHelper.notNull(consumerTemplate.getCamelContext(), "CamelContext", this); // register this as service so we get lifecycle callback when Camel is starting/stopping - camelContext.addService(this); + consumerTemplate.getCamelContext().addService(this); } @Override @@ -66,4 +64,14 @@ public class CamelItemReader<I> extends ServiceSupport implements ItemReader<I>, protected void doStop() throws Exception { ServiceHelper.stopService(consumerTemplate); } + + public ConsumerTemplate getConsumerTemplate() { + return consumerTemplate; + } + + public String getEndpointUri() { + return endpointUri; + } + + } diff --git a/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/support/CamelItemWriter.java b/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/support/CamelItemWriter.java index 6e404e4d015..df89032ced1 100644 --- a/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/support/CamelItemWriter.java +++ b/components/camel-spring-batch/src/main/java/org/apache/camel/component/spring/batch/support/CamelItemWriter.java @@ -21,28 +21,30 @@ import java.util.List; import org.apache.camel.ProducerTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.batch.item.Chunk; import org.springframework.batch.item.ItemWriter; +import org.springframework.lang.NonNull; public class CamelItemWriter<I> implements ItemWriter<I> { private static final Logger LOG = LoggerFactory.getLogger(CamelItemWriter.class); - private final ProducerTemplate producerTemplate; + private final ProducerTemplate template; private final String endpointUri; - public CamelItemWriter(ProducerTemplate producerTemplate, String endpointUri) { - this.producerTemplate = producerTemplate; + public CamelItemWriter(ProducerTemplate template, String endpointUri) { + this.template = template; this.endpointUri = endpointUri; } + @Override - public void write(List<? extends I> items) throws Exception { - for (I item : items) { + public void write(Chunk<? extends I> chunk) throws Exception { + for (I item : chunk) { LOG.debug("writing item [{}]...", item); - producerTemplate.sendBody(endpointUri, item); + template.sendBody(endpointUri, item); LOG.debug("wrote item"); } } - } 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 629588eba18..7a24d5d31fd 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 @@ -225,22 +225,6 @@ public class SpringBatchEndpointTest extends CamelTestSupport { assertEquals(parameter, headerValue); } - @Test - public void setNullValueToJobParams() throws Exception { - // Given - String headerKey = "headerKey"; - Date headerValue = null; - - // When - template.sendBodyAndHeader("direct:start", "Start the job, please.", headerKey, headerValue); - - // Then - ArgumentCaptor<JobParameters> jobParameters = ArgumentCaptor.forClass(JobParameters.class); - verify(jobLauncher).run(any(Job.class), jobParameters.capture()); - Date parameter = jobParameters.getValue().getDate(headerKey); - assertEquals(parameter, headerValue); - } - @Test public void shouldConvertDateHeadersToJobParams() throws Exception { // Given diff --git a/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchIT.java b/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchIT.java index 666ec8a4fdf..163315a1441 100644 --- a/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchIT.java +++ b/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchIT.java @@ -20,10 +20,13 @@ import org.apache.camel.EndpointInject; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.spring.junit5.CamelSpringTestSupport; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; + +@Disabled("Requires a running database") public class SpringBatchIT extends CamelSpringTestSupport { @EndpointInject("mock:header") MockEndpoint headerEndpoint; diff --git a/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchJobLauncherTest.java b/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchJobLauncherIT.java similarity index 94% rename from components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchJobLauncherTest.java rename to components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchJobLauncherIT.java index 5ce85e53b90..82aba0f1591 100644 --- a/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchJobLauncherTest.java +++ b/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchJobLauncherIT.java @@ -20,11 +20,13 @@ import org.apache.camel.EndpointInject; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.spring.junit5.CamelSpringTestSupport; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -public class SpringBatchJobLauncherTest extends CamelSpringTestSupport { +@Disabled("Requires a running database") +public class SpringBatchJobLauncherIT extends CamelSpringTestSupport { @EndpointInject("mock:output") MockEndpoint outputEndpoint; diff --git a/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/support/CamelItemWriterTest.java b/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/support/CamelItemWriterTest.java index 8094252956a..8f8e1032f5b 100644 --- a/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/support/CamelItemWriterTest.java +++ b/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/support/CamelItemWriterTest.java @@ -20,6 +20,7 @@ import java.util.Collections; import org.apache.camel.test.junit5.CamelTestSupport; import org.junit.jupiter.api.Test; +import org.springframework.batch.item.Chunk; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -43,7 +44,7 @@ public class CamelItemWriterTest extends CamelTestSupport { @Test public void shouldReadMessage() throws Exception { // When - camelItemWriter.write(Collections.singletonList(message)); + camelItemWriter.write(Chunk.of(message)); // Then assertEquals(message, consumer().receiveBody("seda:queue")); diff --git a/components/camel-spring-batch/src/test/resources/org/apache/camel/component/spring/batch/springBatchtestContext.xml b/components/camel-spring-batch/src/test/resources/org/apache/camel/component/spring/batch/springBatchtestContext.xml index ce6e419dbe7..95e046ee1bf 100644 --- a/components/camel-spring-batch/src/test/resources/org/apache/camel/component/spring/batch/springBatchtestContext.xml +++ b/components/camel-spring-batch/src/test/resources/org/apache/camel/component/spring/batch/springBatchtestContext.xml @@ -66,9 +66,17 @@ <!-- Spring Batch infrastructure --> + <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> + <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> + <property name="url" value="jdbc:hsqldb:mem:testdb;sql.enforce_strict_size=true;hsqldb.tx=mvcc" /> + <property name="username" value="sa" /> + <property name="password" value="" /> + </bean> + <bean id="jobRepository" - class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean"> + class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"> <property name="transactionManager" ref="transactionManager"/> + <property name="dataSource" ref="dataSource"/> </bean> <bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/> @@ -79,24 +87,24 @@ </bean> <bean id="camelReader" class="org.apache.camel.component.spring.batch.support.CamelItemReader"> - <constructor-arg ref="consumerTemplate"/> - <constructor-arg value="seda:inputQueue"/> + <constructor-arg index="0" ref="consumerTemplate"/> + <constructor-arg index="1" value="seda:inputQueue"/> </bean> <bean id="camelWriter" class="org.apache.camel.component.spring.batch.support.CamelItemWriter"> - <constructor-arg ref="template"/> - <constructor-arg value="mock:output"/> + <constructor-arg index="0" ref="template"/> + <constructor-arg index="1" value="mock:output"/> </bean> <bean id="camelProcessor" class="org.apache.camel.component.spring.batch.support.CamelItemProcessor"> - <constructor-arg ref="template"/> - <constructor-arg value="direct:processor"/> + <constructor-arg index="0" ref="template"/> + <constructor-arg index="1" value="direct:processor"/> </bean> <bean id="camelJobExecutionListener" class="org.apache.camel.component.spring.batch.support.CamelJobExecutionListener"> - <constructor-arg ref="template"/> - <constructor-arg value="mock:jobExecutionEventsQueue"/> + <constructor-arg index="0" ref="template"/> + <constructor-arg index="1" value="mock:jobExecutionEventsQueue"/> </bean> </beans> diff --git a/components/camel-spring-batch/src/test/resources/org/apache/camel/component/spring/batch/springBatchtestJobLauncherContext.xml b/components/camel-spring-batch/src/test/resources/org/apache/camel/component/spring/batch/springBatchtestJobLauncherContext.xml index c141db4f25e..ab19b1bb2cb 100644 --- a/components/camel-spring-batch/src/test/resources/org/apache/camel/component/spring/batch/springBatchtestJobLauncherContext.xml +++ b/components/camel-spring-batch/src/test/resources/org/apache/camel/component/spring/batch/springBatchtestJobLauncherContext.xml @@ -63,11 +63,18 @@ <camel:template id="template" camelContextId="camel"/> - <!-- Spring Batch infrastructure --> + + <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> + <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> + <property name="url" value="jdbc:hsqldb:mem:testdb;sql.enforce_strict_size=true;hsqldb.tx=mvcc" /> + <property name="username" value="sa" /> + <property name="password" value="" /> + </bean> <bean id="jobRepository" - class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean"> + class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"> <property name="transactionManager" ref="transactionManager"/> + <property name="dataSource" ref="dataSource"/> </bean> <bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/> @@ -78,24 +85,24 @@ </bean> <bean id="camelReader" class="org.apache.camel.component.spring.batch.support.CamelItemReader"> - <constructor-arg ref="consumerTemplate"/> - <constructor-arg value="seda:inputQueue"/> + <constructor-arg index="0" ref="consumerTemplate"/> + <constructor-arg index="1" value="seda:inputQueue"/> </bean> <bean id="camelWriter" class="org.apache.camel.component.spring.batch.support.CamelItemWriter"> - <constructor-arg ref="template"/> - <constructor-arg value="mock:output"/> + <constructor-arg index="0" ref="template"/> + <constructor-arg index="1" value="mock:output"/> </bean> <bean id="camelProcessor" class="org.apache.camel.component.spring.batch.support.CamelItemProcessor"> - <constructor-arg ref="template"/> - <constructor-arg value="direct:processor"/> + <constructor-arg index="0" ref="template"/> + <constructor-arg index="1" value="direct:processor"/> </bean> <bean id="camelJobExecutionListener" class="org.apache.camel.component.spring.batch.support.CamelJobExecutionListener"> - <constructor-arg ref="template"/> - <constructor-arg value="mock:jobExecutionEventsQueue"/> + <constructor-arg index="0" ref="template"/> + <constructor-arg index="1" value="mock:jobExecutionEventsQueue"/> </bean> </beans> diff --git a/parent/pom.xml b/parent/pom.xml index 783d1396260..14522dfec41 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -452,7 +452,7 @@ <solr-zookeeper-version>3.6.2</solr-zookeeper-version> <splunk-version>1.9.0_1</splunk-version> <spock-version>2.3-groovy-4.0</spock-version> - <spring-batch-version>4.3.8</spring-batch-version> + <spring-batch-version>5.0.1</spring-batch-version> <spring-data-redis-version>3.0.5</spring-data-redis-version> <spring-ldap-version>3.1.0</spring-ldap-version> <spring-vault-core-version>3.0.2</spring-vault-core-version>