From 3005e6a8106d848635f71d60dd4cc6715bc8a815 Mon Sep 17 00:00:00 2001 From: dhgarrette Date: Sat, 23 May 2009 16:32:12 +0000 Subject: [PATCH] BATCH-1213: *Removed isAbstractStep() from BeanDefinitionUtils. The formulation "beanFactory.isTypeMatch(beanName, AbstractStep.class)" should be used instead because it will automatically check the resultant type of a FactoryBean as well. *Changed *StepFactoryBean's getObjectType() to return TaskletStep.class, which is the most specific class name for the resulting object. This allows BeanFactory.isTypeMatch() to to recognize the factory bean's output properly. *Renamed CoreNamespaceBeanDefinitionUtils to BeanDefinitionUtils since it is no longer specific to the core namespace. --- ...nitionUtils.java => BeanDefinitionUtils.java} | 16 +--------------- .../xml/CoreNamespacePostProcessor.java | 7 ++++--- .../xml/StepParserStepFactoryBean.java | 4 ++-- .../core/step/item/SimpleStepFactoryBean.java | 4 ++-- .../FaultTolerantStepFactoryBeanRetryTests.java | 2 +- .../RepeatOperationsStepFactoryBeanTests.java | 2 +- 6 files changed, 11 insertions(+), 24 deletions(-) rename spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/{CoreNamespaceBeanDefinitionUtils.java => BeanDefinitionUtils.java} (72%) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/CoreNamespaceBeanDefinitionUtils.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/BeanDefinitionUtils.java similarity index 72% rename from spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/CoreNamespaceBeanDefinitionUtils.java rename to spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/BeanDefinitionUtils.java index 53849077c..3817f58a1 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/CoreNamespaceBeanDefinitionUtils.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/BeanDefinitionUtils.java @@ -15,7 +15,6 @@ */ package org.springframework.batch.core.configuration.xml; -import org.springframework.batch.core.step.AbstractStep; import org.springframework.beans.PropertyValue; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; @@ -24,20 +23,7 @@ import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; * @author Dan Garrette * @since 2.0.1 */ -public class CoreNamespaceBeanDefinitionUtils { - - /** - * @param beanName the name of a bean definition in the bean factory - * @param beanFactory a {@link BeanFactory} - * @return TRUE if the bean represents an {@link AbstractStep} (or - * {@link StepParserStepFactoryBean}). - */ - public static boolean isAbstractStep(String beanName, ConfigurableListableBeanFactory beanFactory) { - if (beanFactory.isFactoryBean(beanName)) { - return beanFactory.isTypeMatch(BeanFactory.FACTORY_BEAN_PREFIX + beanName, StepParserStepFactoryBean.class); - } - return beanFactory.isTypeMatch(beanName, AbstractStep.class); - } +public class BeanDefinitionUtils { /** * @param beanName a bean definition name diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/CoreNamespacePostProcessor.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/CoreNamespacePostProcessor.java index 630442fbf..77df28c44 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/CoreNamespacePostProcessor.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/CoreNamespacePostProcessor.java @@ -16,6 +16,7 @@ package org.springframework.batch.core.configuration.xml; import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.step.AbstractStep; import org.springframework.beans.BeansException; import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.PropertyValue; @@ -66,9 +67,9 @@ public class CoreNamespacePostProcessor implements BeanPostProcessor, BeanFactor BeanDefinition bd = beanFactory.getBeanDefinition(beanName); if (bd.hasAttribute(JOB_FACTORY_PROPERTY_NAME)) { MutablePropertyValues pvs = (MutablePropertyValues) bd.getPropertyValues(); - if (CoreNamespaceBeanDefinitionUtils.isAbstractStep(beanName, beanFactory)) { + if (beanFactory.isTypeMatch(beanName, AbstractStep.class)) { String jobName = (String) bd.getAttribute(JOB_FACTORY_PROPERTY_NAME); - PropertyValue jobRepository = CoreNamespaceBeanDefinitionUtils.getPropertyValue(jobName, + PropertyValue jobRepository = BeanDefinitionUtils.getPropertyValue(jobName, JOB_REPOSITORY_PROPERTY_NAME, beanFactory); if (jobRepository != null) { // Set the job's JobRepository onto the step @@ -93,7 +94,7 @@ public class CoreNamespacePostProcessor implements BeanPostProcessor, BeanFactor */ private void overrideStepClass(String beanName, ConfigurableListableBeanFactory beanFactory) { BeanDefinition bd = beanFactory.getBeanDefinition(beanName); - Object isNamespaceStep = CoreNamespaceBeanDefinitionUtils + Object isNamespaceStep = BeanDefinitionUtils .getAttribute(beanName, "isNamespaceStep", beanFactory); if (isNamespaceStep != null && (Boolean) isNamespaceStep == true) { ((AbstractBeanDefinition) bd).setBeanClass(StepParserStepFactoryBean.class); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StepParserStepFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StepParserStepFactoryBean.java index dc5807ea3..3b0582ac0 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StepParserStepFactoryBean.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StepParserStepFactoryBean.java @@ -352,8 +352,8 @@ class StepParserStepFactoryBean implements FactoryBean, BeanNameAware { return n != null && n > 0; } - public Class getObjectType() { - return Step.class; + public Class getObjectType() { + return TaskletStep.class; } public boolean isSingleton() { diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java index 1cb0f3a33..85a997c3d 100755 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java @@ -335,8 +335,8 @@ public class SimpleStepFactoryBean implements FactoryBean, BeanNameAware { return step; } - public Class getObjectType() { - return Step.class; + public Class getObjectType() { + return TaskletStep.class; } /** diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRetryTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRetryTests.java index 50c76f9f0..bd374a968 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRetryTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRetryTests.java @@ -124,7 +124,7 @@ public class FaultTolerantStepFactoryBeanRetryTests { @Test public void testType() throws Exception { - assertEquals(Step.class, factory.getObjectType()); + assertTrue(Step.class.isAssignableFrom(factory.getObjectType())); } @Test diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/RepeatOperationsStepFactoryBeanTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/RepeatOperationsStepFactoryBeanTests.java index 0f3ebee51..2f29789ab 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/RepeatOperationsStepFactoryBeanTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/RepeatOperationsStepFactoryBeanTests.java @@ -54,7 +54,7 @@ public class RepeatOperationsStepFactoryBeanTests extends TestCase { } public void testType() throws Exception { - assertEquals(Step.class, factory.getObjectType()); + assertTrue(Step.class.isAssignableFrom(factory.getObjectType())); } public void testDefaultValue() throws Exception {