You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2023/05/17 12:05:10 UTC

[camel] 01/03: CAMEL-19363 - Upgrade Spring Batch to version 5.x

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 <an...@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 <an...@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>