Add registerDataSerializableSessionSerializer() method.

Refactor doInitialization() to delegate to registerDataSerializableSessionSerializer() when registering custom Spring Session DataSerializers/SessionSerializer implementations.

Remove sessionRegionName configuration parameters and state.
This commit is contained in:
John Blum
2018-11-21 16:24:51 -08:00
parent fef2faa307
commit 153568d05c
2 changed files with 48 additions and 16 deletions

View File

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

View File

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