From f2bc6fc466d6459477a885a7fe4861df63e37a1c Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 13 Jan 2014 12:04:14 +0100 Subject: [PATCH] DATAJPA-442 - Enable CDI repositories to be instantiated eagerly. From the CDI extension we now use the callback newly introduced in Spring Data Commons to enable it to trigger eager initialization. See also: DATACMNS-416. --- .../jpa/repository/cdi/JpaRepositoryExtension.java | 11 ++++++++--- .../repository/cdi/CdiExtensionIntegrationTests.java | 7 +++++++ .../data/jpa/repository/cdi/PersonRepository.java | 3 +++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java b/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java index 8df2bb337..faa1b1997 100644 --- a/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java +++ b/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java @@ -33,6 +33,7 @@ import javax.persistence.EntityManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.repository.cdi.CdiRepositoryBean; import org.springframework.data.repository.cdi.CdiRepositoryExtensionSupport; /** @@ -87,10 +88,13 @@ public class JpaRepositoryExtension extends CdiRepositoryExtensionSupport { Class repositoryType = entry.getKey(); Set qualifiers = entry.getValue(); + // Create the bean representing the repository. - Bean repositoryBean = createRepositoryBean(repositoryType, qualifiers, beanManager); + CdiRepositoryBean repositoryBean = createRepositoryBean(repositoryType, qualifiers, beanManager); LOGGER.info("Registering bean for '{}' with qualifiers {}.", repositoryType.getName(), qualifiers); - // Register the bean to the container. + + // Register the bean to the extension and the container. + registerBean(repositoryBean); afterBeanDiscovery.addBean(repositoryBean); } } @@ -103,7 +107,8 @@ public class JpaRepositoryExtension extends CdiRepositoryExtensionSupport { * @param beanManager The BeanManager instance. * @return The bean. */ - private Bean createRepositoryBean(Class repositoryType, Set qualifiers, BeanManager beanManager) { + private CdiRepositoryBean createRepositoryBean(Class repositoryType, Set qualifiers, + BeanManager beanManager) { // Determine the entity manager bean which matches the qualifiers of the repository. Bean entityManagerBean = entityManagers.get(qualifiers); diff --git a/src/test/java/org/springframework/data/jpa/repository/cdi/CdiExtensionIntegrationTests.java b/src/test/java/org/springframework/data/jpa/repository/cdi/CdiExtensionIntegrationTests.java index 9da091e7a..1a2f123f3 100644 --- a/src/test/java/org/springframework/data/jpa/repository/cdi/CdiExtensionIntegrationTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/cdi/CdiExtensionIntegrationTests.java @@ -27,6 +27,8 @@ import org.apache.webbeans.cditest.CdiTestContainer; import org.apache.webbeans.cditest.CdiTestContainerLoader; import org.junit.BeforeClass; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Integration tests for Spring Data JPA CDI extension. @@ -36,12 +38,17 @@ import org.junit.Test; */ public class CdiExtensionIntegrationTests { + private static Logger LOGGER = LoggerFactory.getLogger(CdiExtensionIntegrationTests.class); + static CdiTestContainer container; @BeforeClass public static void setUp() throws Exception { + container = CdiTestContainerLoader.getCdiContainer(); container.bootContainer(); + + LOGGER.debug("CDI container bootstrapped!"); } /** diff --git a/src/test/java/org/springframework/data/jpa/repository/cdi/PersonRepository.java b/src/test/java/org/springframework/data/jpa/repository/cdi/PersonRepository.java index 7f5ed7117..19e85e023 100644 --- a/src/test/java/org/springframework/data/jpa/repository/cdi/PersonRepository.java +++ b/src/test/java/org/springframework/data/jpa/repository/cdi/PersonRepository.java @@ -17,6 +17,9 @@ package org.springframework.data.jpa.repository.cdi; import java.util.List; +import org.springframework.data.repository.cdi.Eager; + +@Eager public interface PersonRepository { List findAll();