Во-первых, версиями GemFire, на которые вы ссылаетесь, являются Spring Session для версий Pivotal GemFire (например, Spring Session Data GemFire (SSDG) 2.1.2.RELEASE
; см. здесь ).
К вашему сведению, чтобы определить актуальную версию Pivotal GemFire, вы должны следовать переходным зависимостям.Например, SSDG 2.1.2.RELEASE
зависит от данных Spring для Pivotal GemFire (SDG) Lovelace
/ 2.1.3.RELEASE
.SDG 2.1.x
в свою очередь зависит от Pivotal GemFire 9.5.2
.9.5.2
используется ли здесь версия Pivotal GemFire.
Относительно ...
Можно ли использовать сериализацию Java для объекта внутри сеанса в версии 2.1.2?
Да!
Как правило, если объекты домена вашего приложения (например, Customer
) хранятся в (HTTP) Session
как Session
значение атрибута 1) равно java.io.Serializable
, 2) существует НЕ существует "зарегистрированный" PdxSerializer
или DataSerializer
способныйде / сериализации объектов домена вашего приложения 3) и ни один из объектов домена вашего приложения (например, Customer
) не реализует DataSerializble
или PdxSerializable
, тогда ваши объекты должны бытьсериализуется с использованием Java Serialization и, следовательно, будет сериализовано с использованием Java Serialization , иначе возникнет исключение сериализации.Это особенно верно всякий раз, когда GemFire передает данные между клиентом и сервером, между равноправными членами в кластере (то есть распределенной системе), по топологии WAN или в любое время, когда GemFire переполняет / сохраняет данные на диск.Если собственные механизмы GemFire Serialization и механика не используются, тогда Java Serialization (если разрешено) - это применяемая резервная стратегия сериализации.
SSDG осторожен при де / сериализацииобъект Session
и его содержимое для делегирования обратно в GemFire для применения логики сериализации к содержимому (объекты домена приложения, хранящиеся в), а также Session
, особенно когда GemFire Data Serialization framework используется для де / сериализации самого объекта Session
, что в вашем случае, так как вы настроили ...
sessionSerializerBeanName =
GemFireHttpSessionConfiguration.SESSION_DATA_SERIALIZER_BEAN_NAME
Технически, вы можете увидеть это делегирование, начиная сSession
объект ( здесь ), который записывает атрибуты Session
(ключ / значения), которые будут делегироваться «зарегистрированным», и предоставляется SSDG, классом DataSerializationSessionAttributesSerializer
, который будет сериализоватьзначения атрибута Session
от делегата обратно в GemFire, здесь .
Вспомогательный метод SSDG serializeObject(:Object)
, в свою очередь, просто делегирует GemFire DataSerializable.writeObject(:Object, :DataOutput, allowJavaSerialization:boolean)
метод, здесь .allowJavaSerialization
по умолчанию true , см. здесь , затем здесь ).
На данный момент все это в руках Pivotal GemFire(после делегирования SSDG).В общем, Pivotal GemFire использует следующий алгоритм для применения де-сериализации к любому объекту:
1) Сериализация PDX 2) Сериализация данных 3) Сериализация Java
В соответствии с правилами, изложенными выше.Вы можете видеть эту логику в классе InternalDataSerializer
, используемом GemFire, здесь .В конечном счете, Сериализация Java происходит здесь , если разрешено.
Относительно ...
Какую аннотацию или атрибут необходимо использовать для сериализации объектов внутриобъект Session, использующий сериализацию Java?
Нет аннотаций и / или атрибутов для применения сериализация Java ;это стратегия сериализации по умолчанию / резервная, используемая, когда никакая другая опция не была явно настроена.
Это означает, что вы определенно не хотите использовать аннотацию SDG @EnablePdx
, поскольку SDG позволяет очень просто: 1) определить типы, подходящие для де / сериализации с помощью PDX, и 2) для де / сериализации этих объектов в потоке байтов PDX.Более подробную информацию можно найти в справочных документах о PDX здесь вместе с подробностями о SDG MappingPdxSerializer
(который @EnablePdx
применяет скрытно, как сконфигурированный / зарегистрированный PdxSerializer
, используемый GemFire), здесь .
Также не забудьте просмотреть документацию Pivotal GemFire о сериализации данных и о том, как она работает.
Надеюсь, это поможет!