From 617bd340d0d1b79e4a9f1656b8c07da0c83945cb Mon Sep 17 00:00:00 2001 From: John Blum Date: Wed, 17 Aug 2016 17:24:30 -0700 Subject: [PATCH] Register non-anonymous, named Instantiators for GemFireSession and GemFireSessionAttributes (#594) Fixes gh-594 & gh-595 --- ...actGemFireOperationsSessionRepository.java | 58 ++++++++++++++----- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/spring-session/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java b/spring-session/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java index 9b9c1692..28ebb59b 100644 --- a/spring-session/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java +++ b/spring-session/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java @@ -208,21 +208,11 @@ public abstract class AbstractGemFireOperationsSessionRepository extends CacheLi Region region = ((GemfireAccessor) template).getRegion(); this.fullyQualifiedRegionName = region.getFullPath(); + region.getAttributesMutator().addCacheListener(this); - Instantiator.register(new Instantiator(GemFireSession.class, 800813552) { - @Override - public DataSerializable newInstance() { - return new GemFireSession(); - } - }); - - Instantiator.register(new Instantiator(GemFireSessionAttributes.class, 800828008) { - @Override - public DataSerializable newInstance() { - return new GemFireSessionAttributes(); - } - }); + Instantiator.register(GemFireSessionInstantiator.create()); + Instantiator.register(GemFireSessionAttributesInstantiator.create()); } /* (non-Javadoc) */ @@ -635,6 +625,27 @@ public abstract class AbstractGemFireOperationsSessionRepository extends CacheLi } } + /** + * GemFireSessionInstantiator is a GemFire {@link Instantiator} use to instantiate instances + * of the {@link GemFireSession} object used in GemFire's data serialization framework when + * persisting Session state in GemFire. + */ + public static class GemFireSessionInstantiator extends Instantiator { + + public static GemFireSessionInstantiator create() { + return new GemFireSessionInstantiator(GemFireSession.class, 800813552); + } + + public GemFireSessionInstantiator(Class type, int id) { + super(type, id); + } + + @Override + public DataSerializable newInstance() { + return new GemFireSession(); + } + } + /** * The GemFireSessionAttributes class is a container for Session attributes implementing * both the {@link DataSerializable} and {@link Delta} GemFire interfaces for efficient @@ -831,4 +842,25 @@ public abstract class AbstractGemFireOperationsSessionRepository extends CacheLi return this.sessionAttributes.toString(); } } + + /** + * GemFireSessionAttributesInstantiator is a GemFire {@link Instantiator} use to instantiate instances + * of the {@link GemFireSessionAttributes} object used in GemFire's data serialization framework when + * persisting Session attributes state in GemFire. + */ + public static class GemFireSessionAttributesInstantiator extends Instantiator { + + public static GemFireSessionAttributesInstantiator create() { + return new GemFireSessionAttributesInstantiator(GemFireSessionAttributes.class, 800828008); + } + + public GemFireSessionAttributesInstantiator(Class type, int id) { + super(type, id); + } + + @Override + public DataSerializable newInstance() { + return new GemFireSessionAttributes(); + } + } }