Skip to content

Commit 0d3832f

Browse files
quafffmbenhassine
authored andcommitted
Improve MessageChannelPartitionHandler::receiveReplies
1. Message payload not always be `Set`, if you return payload directly, you will see tests failed: ``` [main] ERROR org.springframework.batch.core.step.AbstractStep - Encountered an error executing step step1-manager in job job1 java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class java.util.Set (java.util.ArrayList and java.util.Set are in module java.base of loader 'bootstrap') at org.springframework.batch.integration.partition.MessageChannelPartitionHandler.receiveReplies(MessageChannelPartitionHandler.java:298) at org.springframework.batch.integration.partition.MessageChannelPartitionHandler.doHandle(MessageChannelPartitionHandler.java:244) at org.springframework.batch.core.partition.support.AbstractPartitionHandler.handle(AbstractPartitionHandler.java:60) at org.springframework.batch.core.partition.support.PartitionStep.doExecute(PartitionStep.java:102) at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:230) at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:153) at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:68) at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:68) at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:165) at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:140) at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:132) at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:307) at org.springframework.batch.core.launch.support.TaskExecutorJobLauncher$1.run(TaskExecutorJobLauncher.java:155) at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) at org.springframework.batch.core.launch.support.TaskExecutorJobLauncher.run(TaskExecutorJobLauncher.java:146) at org.springframework.batch.integration.partition.VanillaIntegrationTests.testLaunchJob(VanillaIntegrationTests.java:58) ``` 2. No need to create a new `HashSet` if payload is `Set` since no modifications applied to it. Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
1 parent c8b0a5a commit 0d3832f

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

spring-batch-integration/src/main/java/org/springframework/batch/integration/partition/MessageChannelPartitionHandler.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.springframework.batch.integration.partition;
1717

18+
import java.util.Collection;
1819
import java.util.HashSet;
1920
import java.util.List;
2021
import java.util.Set;
@@ -79,6 +80,7 @@
7980
* @author Will Schipp
8081
* @author Michael Minella
8182
* @author Mahmoud Ben Hassine
83+
* @author Yanming Zhou
8284
*
8385
*/
8486
@MessageEndpoint
@@ -265,7 +267,7 @@ private Set<StepExecution> pollReplies(StepExecution managerStepExecution, final
265267

266268
@SuppressWarnings("unchecked")
267269
private Set<StepExecution> receiveReplies(PollableChannel currentReplyChannel) {
268-
Message<Set<StepExecution>> message = (Message<Set<StepExecution>>) messagingGateway
270+
Message<Collection<StepExecution>> message = (Message<Collection<StepExecution>>) messagingGateway
269271
.receive(currentReplyChannel);
270272

271273
if (message == null) {
@@ -275,7 +277,8 @@ else if (logger.isDebugEnabled()) {
275277
logger.debug("Received replies: " + message);
276278
}
277279

278-
return new HashSet<>(message.getPayload());
280+
Collection<StepExecution> payload = message.getPayload();
281+
return payload instanceof Set ? (Set<StepExecution>) payload : new HashSet<>(message.getPayload());
279282
}
280283

281284
private Message<StepExecutionRequest> createMessage(int sequenceNumber, int sequenceSize,

0 commit comments

Comments
 (0)