From 59b74fef3a49588fb15366fc7335369966a42d6f Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Thu, 20 Dec 2018 16:13:14 +0100 Subject: [PATCH] DATAJPA-1487 - Fixed bean definition registration for JpaMetamodelCacheCleanup. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, the bean definition was registered as lazy bean which caused it not to be instantiated in the first place and thus – more importantly – the disposal method not being triggered when the ApplicationContext shuts down. We now properly register it as eager bean. Related tickets: DATAJPA-1446. --- .../config/JpaRepositoryConfigExtension.java | 2 +- ...MetamodelCacheCleanupIntegrationTests.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java b/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java index 01f84f60c..c1a629395 100644 --- a/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java +++ b/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java @@ -194,7 +194,7 @@ public class JpaRepositoryConfigExtension extends RepositoryConfigurationExtensi }, registry, JPA_CONTEXT_BEAN_NAME, source); - registerLazyIfNotAlreadyRegistered(() -> new RootBeanDefinition(JPA_METAMODEL_CACHE_CLEANUP_CLASSNAME), registry, + registerIfNotAlreadyRegistered(() -> new RootBeanDefinition(JPA_METAMODEL_CACHE_CLEANUP_CLASSNAME), registry, JPA_METAMODEL_CACHE_CLEANUP_CLASSNAME, source); } diff --git a/src/test/java/org/springframework/data/jpa/util/JpaMetamodelCacheCleanupIntegrationTests.java b/src/test/java/org/springframework/data/jpa/util/JpaMetamodelCacheCleanupIntegrationTests.java index 72f848ecc..1e6e81e0e 100644 --- a/src/test/java/org/springframework/data/jpa/util/JpaMetamodelCacheCleanupIntegrationTests.java +++ b/src/test/java/org/springframework/data/jpa/util/JpaMetamodelCacheCleanupIntegrationTests.java @@ -16,6 +16,7 @@ package org.springframework.data.jpa.util; import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; import javax.persistence.metamodel.Metamodel; @@ -23,7 +24,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.support.GenericApplicationContext; +import org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension; +import org.springframework.data.repository.config.RepositoryConfigurationExtension; +import org.springframework.data.repository.config.RepositoryConfigurationSource; /** * Integration tests for {@link JpaMetamodelCacheCleanup}. @@ -50,4 +55,19 @@ public class JpaMetamodelCacheCleanupIntegrationTests { assertThat(model).isNotSameAs(JpaMetamodel.of(metamodel)); } + + @Test // DATAJPA-1487, DATAJPA-1446 + public void registersCleanupBeanAsNonLazy() { + + DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); + RepositoryConfigurationSource configurationSource = mock(RepositoryConfigurationSource.class); + + RepositoryConfigurationExtension extension = new JpaRepositoryConfigExtension(); + extension.registerBeansForRoot(beanFactory, configurationSource); + + String[] cleanupBeanNames = beanFactory.getBeanNamesForType(JpaMetamodelCacheCleanup.class); + + assertThat(cleanupBeanNames.length).isEqualTo(1); + assertThat(beanFactory.getBeanDefinition(cleanupBeanNames[0]).isLazyInit()).isFalse(); + } }