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:
John Blum
2021-12-01 21:07:40 -08:00
parent f1753d0758
commit 164dc2f0d1
2 changed files with 19 additions and 20 deletions

View File

@@ -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);
}

View File

@@ -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