From 30c6584e08bdf1de722d681da1a7188a0670c326 Mon Sep 17 00:00:00 2001 From: dhgarrette Date: Thu, 12 Mar 2009 17:48:54 +0000 Subject: [PATCH] BATCH-1136: Add setListeners(StepExecutionListener[]) to TaskletStep so that the parser will be able to set consistently on steps using the "listeners" property. --- .../configuration/xml/AbstractStepParser.java | 13 ++++++------- .../configuration/xml/StandaloneStepParser.java | 2 +- .../batch/core/step/tasklet/TaskletStep.java | 15 +++++++++++++++ .../StepListenerParserNoMergeTests-context.xml | 2 +- .../xml/StepListenerParserTests-context.xml | 2 +- .../StepParserParentAttributeTests-context.xml | 11 ++--------- 6 files changed, 26 insertions(+), 19 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java index ad7ec6111..c2eb133e2 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java @@ -64,7 +64,7 @@ public abstract class AbstractStepParser { bd.getPropertyValues().addPropertyValue("tasklet", taskletBeanRef); } - setUpBeanDefinition(stepElement, bd, parserContext, jobRepositoryRef, "stepExecutionListeners"); + setUpBeanDefinition(stepElement, bd, parserContext, jobRepositoryRef); return bd; @@ -78,13 +78,13 @@ public abstract class AbstractStepParser { ParserContext parserContext, String jobRepositoryRef) { AbstractBeanDefinition bd = taskletElementParser.parseTaskletElement(element, parserContext); - setUpBeanDefinition(stepElement, bd, parserContext, jobRepositoryRef, "listeners"); + setUpBeanDefinition(stepElement, bd, parserContext, jobRepositoryRef); return bd; } protected void setUpBeanDefinition(Element stepElement, AbstractBeanDefinition bd, ParserContext parserContext, - String jobRepositoryRef, String listenersPropertyNames) { + String jobRepositoryRef) { checkStepAttributes(stepElement, bd); RuntimeBeanReference jobRepositoryBeanRef = new RuntimeBeanReference(jobRepositoryRef); @@ -94,7 +94,7 @@ public abstract class AbstractStepParser { RuntimeBeanReference transactionManagerBeanRef = new RuntimeBeanReference(transactionManagerRef); bd.getPropertyValues().addPropertyValue("transactionManager", transactionManagerBeanRef); - handleListenersElement(stepElement, bd, parserContext, listenersPropertyNames); + handleListenersElement(stepElement, bd, parserContext); bd.setRole(BeanDefinition.ROLE_SUPPORT); @@ -117,8 +117,7 @@ public abstract class AbstractStepParser { } @SuppressWarnings("unchecked") - private void handleListenersElement(Element element, BeanDefinition bd, ParserContext parserContext, - String propertyName) { + private void handleListenersElement(Element element, BeanDefinition bd, ParserContext parserContext) { Element listenersElement = DomUtils.getChildElementByTagName(element, "listeners"); if (listenersElement != null) { CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(), @@ -132,7 +131,7 @@ public abstract class AbstractStepParser { listenerBeans.add(stepListenerParser.parse(listenerElement, parserContext)); } } - bd.getPropertyValues().addPropertyValue(propertyName, listenerBeans); + bd.getPropertyValues().addPropertyValue("listeners", listenerBeans); parserContext.popAndRegisterContainingComponent(); } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StandaloneStepParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StandaloneStepParser.java index 162b8598e..a5bc77afd 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StandaloneStepParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StandaloneStepParser.java @@ -58,7 +58,7 @@ public class StandaloneStepParser extends AbstractStepParser { } else { bd = new GenericBeanDefinition(); - setUpBeanDefinition(element, bd, parserContext, jobRepositoryRef, "listeners"); + setUpBeanDefinition(element, bd, parserContext, jobRepositoryRef); } bd.setAbstract(Boolean.valueOf(element.getAttribute("abstract"))); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java index 6083be1df..9d7f54a03 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java @@ -32,6 +32,7 @@ import org.springframework.batch.core.scope.context.StepContextRepeatCallback; import org.springframework.batch.core.step.AbstractStep; import org.springframework.batch.core.step.StepInterruptionPolicy; import org.springframework.batch.core.step.ThreadStepInterruptionPolicy; +import org.springframework.batch.core.step.item.SimpleStepFactoryBean; import org.springframework.batch.item.ExecutionContext; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemStream; @@ -216,6 +217,20 @@ public class TaskletStep extends AbstractStep { this.interruptionPolicy = interruptionPolicy; } + /** + * Variation on + * {@link AbstractStep#setStepExecutionListeners(StepExecutionListener[])}. + * This method exists because the parser requires a "listeners" property + * setter to match the one on {@link SimpleStepFactoryBean}. + * + * @param listeners + * @see AbstractStep#setStepExecutionListeners(StepExecutionListener[]) + * @see SimpleStepFactoryBean#setListeners(org.springframework.batch.core.StepListener[]) + */ + public void setListeners(StepExecutionListener[] listeners) { + this.setStepExecutionListeners(listeners); + } + /** * Process the step and update its context so that progress can be monitored * by the caller. The step is broken down into chunks, each one executing in diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserNoMergeTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserNoMergeTests-context.xml index 2fdf1476c..c5b6662df 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserNoMergeTests-context.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserNoMergeTests-context.xml @@ -18,7 +18,7 @@ - + diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserTests-context.xml index b42e8e44d..1fdd89c24 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserTests-context.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserTests-context.xml @@ -18,7 +18,7 @@ - + diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepParserParentAttributeTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepParserParentAttributeTests-context.xml index 8b0486a64..071b53b8f 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepParserParentAttributeTests-context.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepParserParentAttributeTests-context.xml @@ -11,7 +11,7 @@ - + @@ -19,7 +19,7 @@ - + @@ -28,12 +28,5 @@ - - - - - - - \ No newline at end of file