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>