An open API service indexing awesome lists of open source software.

https://github.com/spring-projects/spring-session-data-geode

Spring Session support for Apache Geode and VMware Tanzu GemFire
https://github.com/spring-projects/spring-session-data-geode

apache-geode framework java spring-session

Last synced: 4 months ago
JSON representation

Spring Session support for Apache Geode and VMware Tanzu GemFire

Awesome Lists containing this project

README

        

:version: 3.0.0-M5
:geode-version: 115

image:https://badges.gitter.im/spring-projects/spring-session.svg[link="https://gitter.im/spring-projects/spring-session?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge"]

image:https://travis-ci.org/spring-projects/spring-session.svg?branch=master["Build Status", link="https://travis-ci.org/spring-projects/spring-session-data-geode"]

[[ssdg]]
== Spring Session for Apache Geode

_Spring Session_ core provides an API along with several provider implementations to manage user sessions. It also
simplifies the support for clustered session state management without being tied to an application container
specific solution.

[[notice]]
== NOTICE

[[notice-2023-january]]
*2023-January-17*:

At the end of 2022, VMware https://tanzu.vmware.com/content/blog/spring-for-vmware-gemfire-is-now-available[announced]
the general availability of the Spring for VMware GemFire portfolio of projects.

While these Spring based projects for VMware GemFire are open source and a succession to the Spring for Apache Geode
projects, they are not a replacement. VMware GemFire forked from the Apache Geode project and is not open source.
Additionally, newer Apache Geode and VMware GemFire clients are not backwards compatible with older Apache Geode
and VMware GemFire servers. You can begin the transition by starting https://docs.vmware.com/en/Spring-Session-for-VMware-GemFire/index.html[here].

Alternatively, the Spring portfolio provides first-class https://spring.io/projects/spring-session[integration]
with other comparable session caching providers. Also, see https://docs.spring.io/spring-session/reference/modules.html[here].

Finally, keep in mind, the Spring for Apache Geode projects will still be maintained until OSS and commercial support
ends. Maintenance will only include CVE and critical fixes. No new features or major enhancements will be made.
The Spring Session for Apache Geode support timelines can be viewed https://spring.io/projects/spring-session#support[here].

[[notice-2022-october]]
*2022-October-24*:

See the October 24th https://github.com/spring-projects/spring-data-geode#notice[NOTICE]
on the _Spring Data for Apache Geode_ GitHub project page for complete details.

[[project-features]]
== Features

Out of the box _Spring Session_ provides integration with:

* `HttpSession` - replaces the `HttpSession` supplied by the application container (e.g. Apache Tomcat)
in a neutral way along with providing HTTP Session IDs in the HTTP Header to work with REST APIs.

* `WebSocket` - keeps the `HttpSession` active when receiving WebSocket messages.

On top of the core _Spring Session_ features, _Spring Session for Apache Geode and VMware Tanzu GemFire_ (SSDG)
positions either https://geode.apache.org/[Apache Geode] or https://pivotal.io/pivotal-gemfire[VMware Tanzu GemFire]
as a session repository provider and adds additional capabilities required by enterprise class solutions:

* Custom `Expiration Policies` - in addition to the default, 30 minute session _idle expiration timeout_ (TTI), which
is configurable, SSDG also supports _fixed-duration expiration timeout_ (e.g. expire the session after 1 hour
regardless of whether the session is active or inactive). Users may also define custom expiration policies using the
https://docs.spring.io/autorepo/docs/spring-session-data-geode-build/{version}/api/org/springframework/session/data/gemfire/expiration/SessionExpirationPolicy.html[`SessionExpirationPolicy`] interface.
See the https://docs.spring.io/autorepo/docs/spring-session-data-geode-build/{version}/reference/html5/#httpsession-gemfire-expiration[documentation] for more details.

* Custom `Data Serialization` - in addition to the default Apache Geode https://geode.apache.org/docs/guide/{geode-version}/developing/data_serialization/gemfire_pdx_serialization.html[PDX Serialization] format,
users may configure Apache Geode https://geode.apache.org/docs/guide/{geode-version}/developing/data_serialization/gemfire_data_serialization.html[Data Serialization]
with full support for https://geode.apache.org/docs/guide/{geode-version}/developing/delta_propagation/chapter_overview.html[Delta Propagation].
While _race conditions_ between competing HTTP requests (accessing the same HTTP Session) cannot be completely avoided with
any session provider, sending only the delta (or changes) minimizes the chance of _lost updates_, especially in a highly clustered
Web environment. By using PDX Serialization, your HTTP Session state is immediately transferable across environments, from non-managed,
standalone environments to managed environments, like https://pivotal.io/platform[Pivotal Cloud Foundry (PCF)]
using https://pivotal.io/platform/services-marketplace/data-management/pivotal-cloud-cache[Pivotal Cloud Cache (PCC)].

* Custom `Change Detection` - while most session implementations consider the session to be dirty anytime anything is written
to the session, even when your application domain objects stored in the session have not changed, SSDG will intelligently
determine whether there is anything to send before writing it to the wire. OOTB, SSDG will look at any application domain objects
that implement Apache Geode's https://geode.apache.org/releases/latest/javadoc/org/apache/geode/Delta.html[Delta] interface
and use that to determine if your application domain objects are indeed dirty before sending the delta. If your objects do not
implement the `Delta` interface, or the object is not the same, then it functions like all other Spring Session providers.
If you prefer, you may specify your own rules composed with the `IsDirtyPredicate` strategy interface.

* Powerful `Pub/Sub` - Apache Geode and VMware Tanzu GemFire both provide a very powerful and robust client/server
https://geode.apache.org/docs/guide/{geode-version}/developing/events/chapter_overview.html[event distribution and handling sub-system]
leveraged by SSDG in order to reliably manage session state, especially in a distributed/clustered environment.

These and many more Apache Geode or VMware Tanzu GemFire features may be leveraged in your application environment to
achieve resilient, highly available (HA), durable, consistent, and even multi-clustered (WAN), persistent
session statement management.

The best part, SSDG allows you to use either Apache Geode or VMware Tanzu GemFire interchangeably without having to change
a single line of code. Simply change your dependency from `org.springframework.session:spring-session-data-geode`
to `org.springframework.session:spring-session-data-gemfire`, or vice versa, and you can seemlessly move between
either Apache Geode or VMware Tanzu GemFire, or even PCC.

No other Spring Session provider offers you the same type of flexibility and power in 1 solution, especially as
your requirements and UC change (e.g. from simple session caching to a full on _System of Record_ with
_distributed compute_ and _streaming capabilities_).

[[website]]
== Spring Session Project Site

You can find the documentation, issue management, support, samples, and guides for using _Spring Session_
at https://projects.spring.io/spring-session/.

Additionally, you can find documentation, issue management, support, samples and guides using _Spring Session
for Apache Geode & VMware Tanzu GemFire_ at https://spring.io/projects/spring-session-data-geode.

[[documentation]]
=== Documentation

Documentation for _Spring Session for Apache Geode and VMware Tazu GemFire_ can be found
https://docs.spring.io/spring-session-data-geode/docs/current/reference/html5/[here]
and Javadoc is available https://docs.spring.io/spring-session-data-geode/docs/current/api/[here].

[[code-of-conduct]]
== Code of Conduct

Please see our https://github.com/spring-projects/.github/blob/master/CODE_OF_CONDUCT.md[code of conduct]

[[report-security-vulnerability]]
== Reporting Security Vulnerabilities

Please see our https://github.com/spring-projects/spring-session-data-geode/security/policy[Security policy].

[[license]]
== License

_Spring Session_ is Open Source Software released under the https://www.apache.org/licenses/LICENSE-2.0.html[Apache 2.0 license].