From 0d7a16054c2bfceafd9bb4b7faa0eb387f33c46b Mon Sep 17 00:00:00 2001 From: Mahmoud Ben Hassine Date: Wed, 22 Jun 2022 10:58:57 +0200 Subject: [PATCH] Fix annotation based listener registration in FaultTolerantStepBuilder Resolves #4137 --- .../builder/FaultTolerantStepBuilder.java | 11 ++---- .../FaultTolerantStepBuilderTests.java | 37 +++++++++++++++---- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilder.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilder.java index f14d47f76..040d0294b 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilder.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2006-2021 the original author or authors. + * Copyright 2006-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -195,8 +195,7 @@ public class FaultTolerantStepBuilder extends SimpleStepBuilder { * @return this for fluent chaining */ @Override - @SuppressWarnings("unchecked") - public SimpleStepBuilder listener(Object listener) { + public FaultTolerantStepBuilder listener(Object listener) { super.listener(listener); Set skipListenerMethods = new HashSet<>(); @@ -210,9 +209,7 @@ public class FaultTolerantStepBuilder extends SimpleStepBuilder { skipListeners.add((SkipListener) factory.getObject()); } - @SuppressWarnings("unchecked") - SimpleStepBuilder result = this; - return result; + return this; } @@ -432,7 +429,7 @@ public class FaultTolerantStepBuilder extends SimpleStepBuilder { } return this; } - + /** * Override parent method to prevent creation of a new FaultTolerantStepBuilder */ diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilderTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilderTests.java index b9f5bf331..d86a28da7 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilderTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 the original author or authors. + * Copyright 2021-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,15 +15,38 @@ */ package org.springframework.batch.core.step.builder; +import org.junit.Assert; import org.junit.Test; -import static org.junit.Assert.assertEquals; +import org.springframework.batch.core.Step; +import org.springframework.batch.core.configuration.xml.DummyItemReader; +import org.springframework.batch.core.configuration.xml.DummyItemWriter; +import org.springframework.batch.core.configuration.xml.DummyJobRepository; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; +import static org.junit.Assert.assertEquals; public class FaultTolerantStepBuilderTests { - @Test - public void faultTolerantReturnsSameInstance() { - FaultTolerantStepBuilder builder = new FaultTolerantStepBuilder<>(new StepBuilder("test")); - assertEquals(builder, builder.faultTolerant()); - } + @Test + public void faultTolerantReturnsSameInstance() { + FaultTolerantStepBuilder builder = new FaultTolerantStepBuilder<>(new StepBuilder("test")); + assertEquals(builder, builder.faultTolerant()); + } + + @Test + public void testAnnotationBasedStepExecutionListenerRegistration() { + // given + FaultTolerantStepBuilder faultTolerantStepBuilder = new StepBuilder("myStep") + .repository(new DummyJobRepository()) + .transactionManager(new ResourcelessTransactionManager()) + .chunk(5).reader(new DummyItemReader()).writer(new DummyItemWriter()).faultTolerant() + .listener(new StepBuilderTests.AnnotationBasedStepExecutionListener()); + + // when + Step step = faultTolerantStepBuilder.build(); + + // then + Assert.assertNotNull(step); + } + }