public class HazelcastSessionRepository extends java.lang.Object implements FindByIndexNameSessionRepository<org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession>, com.hazelcast.map.listener.EntryAddedListener<java.lang.String,MapSession>, com.hazelcast.map.listener.EntryEvictedListener<java.lang.String,MapSession>, com.hazelcast.map.listener.EntryRemovedListener<java.lang.String,MapSession>
SessionRepository
implementation that stores
sessions in Hazelcast's distributed IMap
.
An example of how to create a new instance can be seen below:
Config config = new Config(); // ... configure Hazelcast ... HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(config); HazelcastSessionRepository sessionRepository = new HazelcastSessionRepository(hazelcastInstance);In order to support finding sessions by principal name using
findByIndexNameAndIndexValue(String, String)
method, custom configuration of
IMap
supplied to this implementation is required.
The following snippet demonstrates how to define required configuration using
programmatic Hazelcast Configuration:
MapAttributeConfig attributeConfig = new MapAttributeConfig() .setName(HazelcastSessionRepository.PRINCIPAL_NAME_ATTRIBUTE) .setExtractor(PrincipalNameExtractor.class.getName()); Config config = new Config(); config.getMapConfig(HazelcastSessionRepository.DEFAULT_SESSION_MAP_NAME) .addMapAttributeConfig(attributeConfig) .addMapIndexConfig(new MapIndexConfig( HazelcastSessionRepository.PRINCIPAL_NAME_ATTRIBUTE, false)); Hazelcast.newHazelcastInstance(config);This implementation listens for events on the Hazelcast-backed SessionRepository and translates those events into the corresponding Spring Session events. Publish the Spring Session events with the given
ApplicationEventPublisher
.
SessionCreatedEvent
SessionExpiredEvent
SessionDeletedEvent
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
DEFAULT_SESSION_MAP_NAME
The default name of map used by Spring Session to store sessions.
|
static java.lang.String |
PRINCIPAL_NAME_ATTRIBUTE
The principal name custom attribute name.
|
PRINCIPAL_NAME_INDEX_NAME
Constructor and Description |
---|
HazelcastSessionRepository(com.hazelcast.core.HazelcastInstance hazelcastInstance) |
Modifier and Type | Method and Description |
---|---|
void |
close() |
org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession |
createSession()
Creates a new
Session that is capable of being persisted by this
SessionRepository . |
void |
deleteById(java.lang.String id)
|
void |
entryAdded(com.hazelcast.core.EntryEvent<java.lang.String,MapSession> event) |
void |
entryEvicted(com.hazelcast.core.EntryEvent<java.lang.String,MapSession> event) |
void |
entryRemoved(com.hazelcast.core.EntryEvent<java.lang.String,MapSession> event) |
org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession |
findById(java.lang.String id)
|
java.util.Map<java.lang.String,org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession> |
findByIndexNameAndIndexValue(java.lang.String indexName,
java.lang.String indexValue)
Find a Map of the session id to the
Session of all sessions that contain
the session attribute with the name
FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME and the value of
the specified principal name. |
void |
init() |
void |
save(org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession session)
Ensures the
Session created by
SessionRepository.createSession() is saved. |
void |
setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher applicationEventPublisher)
Sets the
ApplicationEventPublisher that is used to publish
session events . |
void |
setDefaultMaxInactiveInterval(java.lang.Integer defaultMaxInactiveInterval)
Set the maximum inactive interval in seconds between requests before newly created
sessions will be invalidated.
|
void |
setHazelcastFlushMode(HazelcastFlushMode hazelcastFlushMode)
Sets the Hazelcast flush mode.
|
void |
setSessionMapName(java.lang.String sessionMapName)
Set the name of map used to store sessions.
|
public static final java.lang.String DEFAULT_SESSION_MAP_NAME
public static final java.lang.String PRINCIPAL_NAME_ATTRIBUTE
public HazelcastSessionRepository(com.hazelcast.core.HazelcastInstance hazelcastInstance)
@PostConstruct public void init()
@PreDestroy public void close()
public void setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher applicationEventPublisher)
ApplicationEventPublisher
that is used to publish
session events
. The default is to not publish session
events.applicationEventPublisher
- the ApplicationEventPublisher
that is used
to publish session events. Cannot be null.public void setDefaultMaxInactiveInterval(java.lang.Integer defaultMaxInactiveInterval)
defaultMaxInactiveInterval
- the maximum inactive interval in secondspublic void setSessionMapName(java.lang.String sessionMapName)
sessionMapName
- the session map namepublic void setHazelcastFlushMode(HazelcastFlushMode hazelcastFlushMode)
HazelcastFlushMode.ON_SAVE
.hazelcastFlushMode
- the new Hazelcast flush modepublic org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession createSession()
SessionRepository
Session
that is capable of being persisted by this
SessionRepository
.
This allows optimizations and customizations in how the Session
is
persisted. For example, the implementation returned might keep track of the changes
ensuring that only the delta needs to be persisted on a save.
createSession
in interface SessionRepository<org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession>
Session
that is capable of being persisted by this
SessionRepository
public void save(org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession session)
SessionRepository
Session
created by
SessionRepository.createSession()
is saved.
Some implementations may choose to save as the Session
is updated by
returning a Session
that immediately persists any changes. In this case,
this method may not actually do anything.
save
in interface SessionRepository<org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession>
session
- the Session
to savepublic org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession findById(java.lang.String id)
SessionRepository
findById
in interface SessionRepository<org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession>
id
- the Session.getId()
to lookupSession
by the Session.getId()
or null if no
Session
is found.public void deleteById(java.lang.String id)
SessionRepository
deleteById
in interface SessionRepository<org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession>
id
- the Session.getId()
to deletepublic java.util.Map<java.lang.String,org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession> findByIndexNameAndIndexValue(java.lang.String indexName, java.lang.String indexValue)
FindByIndexNameSessionRepository
Session
of all sessions that contain
the session attribute with the name
FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME
and the value of
the specified principal name.findByIndexNameAndIndexValue
in interface FindByIndexNameSessionRepository<org.springframework.session.hazelcast.HazelcastSessionRepository.HazelcastSession>
indexName
- the name of the index (i.e.
FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME
)indexValue
- the value of the index to search for.Session
of all sessions
that contain the session specified index name and the value of the specified index
name. If no results are found, an empty Map is returned.public void entryAdded(com.hazelcast.core.EntryEvent<java.lang.String,MapSession> event)
entryAdded
in interface com.hazelcast.map.listener.EntryAddedListener<java.lang.String,MapSession>
public void entryEvicted(com.hazelcast.core.EntryEvent<java.lang.String,MapSession> event)
entryEvicted
in interface com.hazelcast.map.listener.EntryEvictedListener<java.lang.String,MapSession>
public void entryRemoved(com.hazelcast.core.EntryEvent<java.lang.String,MapSession> event)
entryRemoved
in interface com.hazelcast.map.listener.EntryRemovedListener<java.lang.String,MapSession>