diff --git a/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java index 77435c1..39e69c5 100644 --- a/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java +++ b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java @@ -27,8 +27,6 @@ import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.function.Function; -import jakarta.annotation.PostConstruct; - import org.apache.geode.DataSerializer; import org.apache.geode.cache.Cache; import org.apache.geode.cache.ExpirationAction; @@ -664,6 +662,9 @@ public class GemFireHttpSessionConfiguration extends AbstractGemFireHttpSessionC // Expose configuration as {@link Properties} in the Spring {@link Environment} // if {@link EnableGemFireHttpSession#exposeConfigurationAsProperties} is set to {@literal true}. exposeSpringSessionGemFireConfiguration(); + + // Initialize GemFire/Geode if possible + registerSessionSerializerBeanAlias(); } private void configureClientRegionShortcut(AnnotationAttributes enableGemFireHttpSessionAttributes) { @@ -918,8 +919,7 @@ public class GemFireHttpSessionConfiguration extends AbstractGemFireHttpSessionC } } - @PostConstruct - public void initGemFire() { + public void registerSessionSerializerBeanAlias() { getBeanFactory().registerAlias(getSessionSerializerBeanName(), SESSION_SERIALIZER_BEAN_ALIAS); } diff --git a/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationUnitTests.java b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationUnitTests.java index 7eb3745..79642f0 100644 --- a/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationUnitTests.java +++ b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationUnitTests.java @@ -23,12 +23,14 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import java.lang.reflect.Field; @@ -50,6 +52,7 @@ import org.apache.geode.cache.client.ClientRegionShortcut; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.NoUniqueBeanDefinitionException; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; @@ -144,10 +147,13 @@ public class GemFireHttpSessionConfigurationUnitTests { this.gemfireConfiguration = spy(new GemFireHttpSessionConfiguration()); - ApplicationContext mockApplicationContext = mock(ApplicationContext.class); + ConfigurableApplicationContext mockApplicationContext = mock(ConfigurableApplicationContext.class); - when(mockApplicationContext.getBean(eq(SpringSessionGemFireConfigurer.class))) - .thenThrow(new NoSuchBeanDefinitionException("No SpringSessionGemFireConfigurer bean present")); + ConfigurableListableBeanFactory mockBeanFactory = mock(ConfigurableListableBeanFactory.class); + + doReturn(mockBeanFactory).when(mockApplicationContext).getBeanFactory(); + doThrow(new NoSuchBeanDefinitionException("No SpringSessionGemFireConfigurer bean present")) + .when(mockApplicationContext).getBean(eq(SpringSessionGemFireConfigurer.class)); this.gemfireConfiguration.setApplicationContext(mockApplicationContext); } @@ -684,25 +690,18 @@ public class GemFireHttpSessionConfigurationUnitTests { @Test public void postConstructInitRegistersBeanAlias() { - ConfigurableListableBeanFactory mockBeanFactory = mock(ConfigurableListableBeanFactory.class); - - ConfigurableApplicationContext mockApplicationContext = mock(ConfigurableApplicationContext.class); - - given(mockApplicationContext.getBeanFactory()).willReturn(mockBeanFactory); - assertThat(System.getProperty(GemFireHttpSessionConfiguration.SESSION_SERIALIZER_BEAN_ALIAS)).isNull(); - this.gemfireConfiguration.setApplicationContext(mockApplicationContext); + ConfigurableBeanFactory beanFactory = this.gemfireConfiguration.getBeanFactory(); + this.gemfireConfiguration.setSessionSerializerBeanName("testSessionSerializer"); - this.gemfireConfiguration.initGemFire(); + this.gemfireConfiguration.registerSessionSerializerBeanAlias(); this.gemfireConfiguration.init(); - assertThat(this.gemfireConfiguration.getApplicationContext()).isSameAs(mockApplicationContext); - - verify(mockApplicationContext, times(1)).getBeanFactory(); - - verify(mockBeanFactory, times(1)) + verify(beanFactory, times(1)) .registerAlias(eq("testSessionSerializer"), eq(GemFireHttpSessionConfiguration.SESSION_SERIALIZER_BEAN_ALIAS)); + + verifyNoMoreInteractions(beanFactory); } @Test