diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/serialization/data/support/DataSerializableSessionSerializerInitializerIntegrationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/serialization/data/support/DataSerializableSessionSerializerInitializerIntegrationTests.java index 8669a70..ddf3185 100644 --- a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/serialization/data/support/DataSerializableSessionSerializerInitializerIntegrationTests.java +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/serialization/data/support/DataSerializableSessionSerializerInitializerIntegrationTests.java @@ -18,6 +18,7 @@ package org.springframework.session.data.gemfire.serialization.data.support; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; @@ -59,7 +60,7 @@ import org.springframework.session.data.gemfire.serialization.data.provider.Data * @see org.springframework.session.data.gemfire.serialization.data.provider.DataSerializableSessionAttributesSerializer * @see org.springframework.session.data.gemfire.serialization.data.provider.DataSerializableSessionSerializer * @see org.springframework.session.data.gemfire.serialization.data.support.DataSerializableSessionSerializerInitializer - * @since 1.0.0 + * @since 2.1.1 */ @RunWith(MockitoJUnitRunner.class) public class DataSerializableSessionSerializerInitializerIntegrationTests extends AbstractGemFireIntegrationTests { @@ -99,7 +100,18 @@ public class DataSerializableSessionSerializerInitializerIntegrationTests extend } @Test - public void initializeWithCacheAndPropertiesParametersSetGemFireCacheReferenceAndCallsDoInitialize() { + public void ofFactoryMethodWithNullCache() { + + DataSerializableSessionSerializerInitializer initializer = + DataSerializableSessionSerializerInitializer.of(null); + + assertThat(initializer).isNotNull(); + assertThat(initializer.getGemFireCache().orElse(null)).isNull(); + assertThat(initializer.getLogger()).isNotNull(); + } + + @Test + public void initializeWithCacheAndPropertiesParametersSetsGemFireCacheReferenceAndCallsDoInitialize() { DataSerializableSessionSerializerInitializer initializer = spy(DataSerializableSessionSerializerInitializer.of(null)); @@ -116,6 +128,23 @@ public class DataSerializableSessionSerializerInitializerIntegrationTests extend verify(initializer, times(1)).doInitialization(); } + @Test + public void doInitializationResolvesGemFireCachesRegistersSessionSerializersAndConfiguresDataSerialization() { + + DataSerializableSessionSerializerInitializer initializer = + spy(DataSerializableSessionSerializerInitializer.of(null)); + + doReturn(this.mockCache).when(initializer).resolveGemFireCache(); + doNothing().when(initializer).registerDataSerializableSessionSerializer(); + doNothing().when(initializer).configureUseDataSerialization(); + + initializer.doInitialization(); + + verify(initializer, times(1)).resolveGemFireCache(); + verify(initializer, times(1)).registerDataSerializableSessionSerializer(); + verify(initializer, times(1)).configureUseDataSerialization(); + } + @Test public void doInitializationIsCorrect() { @@ -159,6 +188,7 @@ public class DataSerializableSessionSerializerInitializerIntegrationTests extend assertThat(InitializingGemFireOperationsSessionRepository.INSTANCE.isDataSerializationConfigured()).isFalse(); verify(initializer, times(1)).resolveGemFireCache(); + verify(initializer, never()).registerDataSerializableSessionSerializer(); verify(initializer, never()).configureUseDataSerialization(); } } diff --git a/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/serialization/data/support/DataSerializableSessionSerializerInitializer.java b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/serialization/data/support/DataSerializableSessionSerializerInitializer.java index ac6e195..903ad9b 100644 --- a/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/serialization/data/support/DataSerializableSessionSerializerInitializer.java +++ b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/serialization/data/support/DataSerializableSessionSerializerInitializer.java @@ -29,7 +29,6 @@ import org.apache.geode.cache.GemFireCache; import org.springframework.lang.Nullable; import org.springframework.session.Session; -import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; import org.springframework.session.data.gemfire.serialization.data.provider.DataSerializableSessionSerializer; import org.springframework.session.data.gemfire.support.GemFireOperationsSessionRepositorySupport; @@ -37,10 +36,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * Register the Spring Session for Apache Geode/Pivotal GemFire {@link DataSerializableSessionSerializer} - * with Apache Geode/Pivotal GemFire's DataSerialization framework as the {@link DataSerializer} used to handle - * de/serialization of the {@link Session}, the {@literal Session Attributes} and any application - * domain model objects contained in the {@link Session} (if necessary). + * Register the custom Spring Session {@link DataSerializableSessionSerializer} with Apache Geode/Pivotal GemFire's + * DataSerialization framework as the {@link DataSerializer} used to handle de/serialization of the {@link Session}, + * the {@link Session} Attributes and any application domain model objects contained in the {@link Session} + * (if necessary). * * @author John Blum * @see java.util.Properties @@ -59,16 +58,9 @@ import org.slf4j.LoggerFactory; @SuppressWarnings("unused") public class DataSerializableSessionSerializerInitializer implements Declarable { - private static final String DEFAULT_SESSION_REGION_NAME = - GemFireHttpSessionConfiguration.DEFAULT_SESSION_REGION_NAME; - - private static final String SESSION_REGION_NAME_PROPERTY = "spring.session.data.gemfire.session.region.name"; - private volatile GemFireCache gemfireCache; - private Logger logger = LoggerFactory.getLogger(getClass()); - - private String sessionRegionName; + private final Logger logger = LoggerFactory.getLogger(getClass()); /** * Factory method used to construct a new instance of {@link DataSerializableSessionSerializerInitializer} @@ -157,8 +149,8 @@ public class DataSerializableSessionSerializerInitializer implements Declarable public void doInitialization() { resolveGemFireCache(); + registerDataSerializableSessionSerializer(); configureUseDataSerialization(); - DataSerializableSessionSerializer.register(); } /** @@ -172,6 +164,16 @@ public class DataSerializableSessionSerializerInitializer implements Declarable return getGemFireCache().orElseGet(CacheFactory::getAnyInstance); } + /** + * Registers the {@link DataSerializableSessionSerializer} with Apache Geode/Pivotal GemFire + * in order to properly handle the Spring Session types. + * + * @see org.springframework.session.data.gemfire.serialization.data.provider.DataSerializableSessionSerializer#register() + */ + protected void registerDataSerializableSessionSerializer() { + DataSerializableSessionSerializer.register(); + } + /** * Configures Spring Session (for Apache Geode/Pivotal GemFire) to "use" Apache Geode/Pivotal GemFire's * DataSerialization framework and Delta capable {@link DataSerializable} Session objects.