Rename initGemFire() method to registerSessionSerializerBeanAlias().
Call registerSessionSerializerBeanAlias() from setImportMetadata(:AnnotationMetadata) and remove the @PostConstruct annotation. For an unknown reason, Spring Framework 6 possibly initializes Singleton beans before Spring @Configuration classes, @PostConstruct methods are invoked.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user