diff --git a/src/main/java/org/springframework/data/jpa/util/BeanDefinitionUtils.java b/src/main/java/org/springframework/data/jpa/util/BeanDefinitionUtils.java index e8780376e..f93c8d75d 100644 --- a/src/main/java/org/springframework/data/jpa/util/BeanDefinitionUtils.java +++ b/src/main/java/org/springframework/data/jpa/util/BeanDefinitionUtils.java @@ -127,6 +127,8 @@ public class BeanDefinitionUtils { if (!EntityManagerFactory.class.getName().equals(definition.getPropertyValues().get("expectedType"))) { return; } + } else if (!EntityManagerFactory.class.equals(beanFactory.getType(name))) { + return; } definitions.add(new EntityManagerFactoryBeanDefinition(name, beanFactory)); diff --git a/src/test/java/org/springframework/data/jpa/repository/support/DefaultJpaContextIntegrationTests.java b/src/test/java/org/springframework/data/jpa/repository/support/DefaultJpaContextIntegrationTests.java index e5b9eb1e4..b92de1733 100644 --- a/src/test/java/org/springframework/data/jpa/repository/support/DefaultJpaContextIntegrationTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/support/DefaultJpaContextIntegrationTests.java @@ -17,12 +17,15 @@ package org.springframework.data.jpa.repository.support; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; +import static org.mockito.Mockito.*; import java.util.Arrays; import java.util.HashSet; +import javax.naming.NamingException; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; import org.junit.Before; import org.junit.BeforeClass; @@ -44,6 +47,8 @@ import org.springframework.data.jpa.repository.JpaContext; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; +import org.springframework.jndi.JndiObjectFactoryBean; +import org.springframework.mock.jndi.ExpectedLookupTemplate; import org.springframework.mock.jndi.SimpleNamingContextBuilder; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.stereotype.Component; @@ -113,6 +118,7 @@ public class DefaultJpaContextIntegrationTests { /** * @see DATAJPA-813 + * @see DATAJPA-956 */ @Test public void bootstrapsDefaultJpaContextInSpringContainer() { @@ -163,7 +169,7 @@ public class DefaultJpaContextIntegrationTests { } @EnableJpaRepositories - @ComponentScan(includeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, value = ApplicationComponent.class) , + @ComponentScan(includeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, value = ApplicationComponent.class), useDefaultFilters = false) static class Config { @@ -171,6 +177,21 @@ public class DefaultJpaContextIntegrationTests { public LocalContainerEntityManagerFactoryBean entityManagerFactory() { return createEntityManagerFactoryBean("spring-data-jpa"); } + + // A non-EntityManagerFactory JNDI object to make sure the detection doesn't include it + // @see DATAJPA-956 + + @Bean + public JndiObjectFactoryBean jndiObject() throws NamingException { + + JndiObjectFactoryBean bean = new JndiObjectFactoryBean(); + + bean.setJndiName("some/DataSource"); + bean.setJndiTemplate(new ExpectedLookupTemplate("some/DataSource", mock(DataSource.class))); + bean.setExpectedType(DataSource.class); + + return bean; + } } @Component