diff --git a/src/main/java/org/springframework/data/jpa/repository/support/EntityManagerBeanDefinitionRegistrarPostProcessor.java b/src/main/java/org/springframework/data/jpa/repository/support/EntityManagerBeanDefinitionRegistrarPostProcessor.java index c098b94c8..985782be8 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/EntityManagerBeanDefinitionRegistrarPostProcessor.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/EntityManagerBeanDefinitionRegistrarPostProcessor.java @@ -21,6 +21,7 @@ import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; @@ -30,6 +31,7 @@ import org.springframework.beans.factory.support.AutowireCandidateQualifier; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.core.Ordered; import org.springframework.data.jpa.util.BeanDefinitionUtils.EntityManagerFactoryBeanDefinition; import org.springframework.orm.jpa.SharedEntityManagerCreator; @@ -42,21 +44,40 @@ import org.springframework.orm.jpa.SharedEntityManagerCreator; * * @author Oliver Gierke */ -public class EntityManagerBeanDefinitionRegistrarPostProcessor implements BeanFactoryPostProcessor { +public class EntityManagerBeanDefinitionRegistrarPostProcessor implements BeanFactoryPostProcessor, Ordered { - /* + /* + * (non-Javadoc) + * @see org.springframework.core.Ordered#getOrder() + */ + @Override + public int getOrder() { + return Ordered.HIGHEST_PRECEDENCE + 10; + } + + /* * (non-Javadoc) * @see org.springframework.beans.factory.config.BeanFactoryPostProcessor#postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory) */ @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { - for (EntityManagerFactoryBeanDefinition definition : getEntityManagerFactoryBeanDefinitions(beanFactory)) { + if (!ConfigurableListableBeanFactory.class.isInstance(beanFactory)) { + return; + } - if (!(definition.getBeanFactory() instanceof BeanDefinitionRegistry)) { + ConfigurableListableBeanFactory factory = (ConfigurableListableBeanFactory) beanFactory; + + for (EntityManagerFactoryBeanDefinition definition : getEntityManagerFactoryBeanDefinitions(factory)) { + + BeanFactory definitionFactory = definition.getBeanFactory(); + + if (!(definitionFactory instanceof BeanDefinitionRegistry)) { continue; } + BeanDefinitionRegistry definitionRegistry = (BeanDefinitionRegistry) definitionFactory; + BeanDefinitionBuilder builder = BeanDefinitionBuilder .rootBeanDefinition("org.springframework.orm.jpa.SharedEntityManagerCreator"); builder.setFactoryMethod("createSharedEntityManager"); @@ -68,8 +89,7 @@ public class EntityManagerBeanDefinitionRegistrarPostProcessor implements BeanFa emBeanDefinition.setScope(definition.getBeanDefinition().getScope()); emBeanDefinition.setSource(definition.getBeanDefinition().getSource()); - BeanDefinitionReaderUtils.registerWithGeneratedName(emBeanDefinition, - (BeanDefinitionRegistry) definition.getBeanFactory()); + BeanDefinitionReaderUtils.registerWithGeneratedName(emBeanDefinition, definitionRegistry); } } } diff --git a/src/test/java/org/springframework/data/jpa/repository/support/EntityManagerBeanDefinitionRegistratPostProcessorUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/support/EntityManagerBeanDefinitionRegistrarPostProcessorUnitTests.java similarity index 98% rename from src/test/java/org/springframework/data/jpa/repository/support/EntityManagerBeanDefinitionRegistratPostProcessorUnitTests.java rename to src/test/java/org/springframework/data/jpa/repository/support/EntityManagerBeanDefinitionRegistrarPostProcessorUnitTests.java index 07660cfb9..21b82088b 100644 --- a/src/test/java/org/springframework/data/jpa/repository/support/EntityManagerBeanDefinitionRegistratPostProcessorUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/support/EntityManagerBeanDefinitionRegistrarPostProcessorUnitTests.java @@ -34,7 +34,7 @@ import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; * * @author Oliver Gierke */ -public class EntityManagerBeanDefinitionRegistratPostProcessorUnitTests { +public class EntityManagerBeanDefinitionRegistrarPostProcessorUnitTests { @Test // DATAJPA-453 public void findsBeanDefinitionInParentBeanFactory() {