Class HazelcastIndexedSessionRepository
java.lang.Object
org.springframework.session.hazelcast.HazelcastIndexedSessionRepository
- All Implemented Interfaces:
com.hazelcast.map.listener.EntryAddedListener<String,
,MapSession> com.hazelcast.map.listener.EntryEvictedListener<String,
,MapSession> com.hazelcast.map.listener.EntryExpiredListener<String,
,MapSession> com.hazelcast.map.listener.EntryRemovedListener<String,
,MapSession> com.hazelcast.map.listener.MapListener
,EventListener
,org.springframework.beans.factory.DisposableBean
,org.springframework.beans.factory.InitializingBean
,FindByIndexNameSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>
,SessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>
public class HazelcastIndexedSessionRepository
extends Object
implements FindByIndexNameSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>, com.hazelcast.map.listener.EntryAddedListener<String,MapSession>, com.hazelcast.map.listener.EntryEvictedListener<String,MapSession>, com.hazelcast.map.listener.EntryRemovedListener<String,MapSession>, com.hazelcast.map.listener.EntryExpiredListener<String,MapSession>, org.springframework.beans.factory.InitializingBean, org.springframework.beans.factory.DisposableBean
A
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); HazelcastIndexedSessionRepository sessionRepository = new HazelcastIndexedSessionRepository(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:
AttributeConfig attributeConfig = new AttributeConfig() .setName(HazelcastIndexedSessionRepository.PRINCIPAL_NAME_ATTRIBUTE) .setExtractorClassName(rincipalNameExtractor.class.getName()); Config config = new Config(); config.getMapConfig(HazelcastIndexedSessionRepository.DEFAULT_SESSION_MAP_NAME) .addAttributeConfig(attributeConfig) .addIndexConfig(new IndexConfig( IndexType.HASH, HazelcastIndexedSessionRepository.PRINCIPAL_NAME_ATTRIBUTE)); 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
.
- entryAdded -
SessionCreatedEvent
- entryEvicted -
SessionExpiredEvent
- entryRemoved -
SessionDeletedEvent
- Since:
- 2.2.0
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
The default name of map used by Spring Session to store sessions.static final String
The principal name custom attribute name.Fields inherited from interface org.springframework.session.FindByIndexNameSessionRepository
PRINCIPAL_NAME_INDEX_NAME
-
Constructor Summary
ConstructorDescriptionHazelcastIndexedSessionRepository
(com.hazelcast.core.HazelcastInstance hazelcastInstance) Create a newHazelcastIndexedSessionRepository
instance. -
Method Summary
Modifier and TypeMethodDescriptionvoid
org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession
Creates a newSession
that is capable of being persisted by thisSessionRepository
.void
deleteById
(String id) void
destroy()
void
entryAdded
(com.hazelcast.core.EntryEvent<String, MapSession> event) void
entryEvicted
(com.hazelcast.core.EntryEvent<String, MapSession> event) void
entryExpired
(com.hazelcast.core.EntryEvent<String, MapSession> event) void
entryRemoved
(com.hazelcast.core.EntryEvent<String, MapSession> event) org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession
Map<String,
org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession> findByIndexNameAndIndexValue
(String indexName, String indexValue) void
save
(org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession session) Ensures theSession
created bySessionRepository.createSession()
is saved.void
setApplicationEventPublisher
(org.springframework.context.ApplicationEventPublisher applicationEventPublisher) Sets theApplicationEventPublisher
that is used to publishsession events
.void
setDefaultMaxInactiveInterval
(Integer defaultMaxInactiveInterval) Deprecated.void
setDefaultMaxInactiveInterval
(Duration defaultMaxInactiveInterval) Set the maximum inactive interval in seconds between requests before newly created sessions will be invalidated.void
setFlushMode
(FlushMode flushMode) Sets the Hazelcast flush mode.void
setIndexResolver
(IndexResolver<Session> indexResolver) Set theIndexResolver
to use.void
setSaveMode
(SaveMode saveMode) Set the save mode.void
setSessionMapName
(String sessionMapName) Set the name of map used to store sessions.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.session.FindByIndexNameSessionRepository
findByPrincipalName
-
Field Details
-
DEFAULT_SESSION_MAP_NAME
The default name of map used by Spring Session to store sessions.- See Also:
-
PRINCIPAL_NAME_ATTRIBUTE
The principal name custom attribute name.- See Also:
-
-
Constructor Details
-
HazelcastIndexedSessionRepository
public HazelcastIndexedSessionRepository(com.hazelcast.core.HazelcastInstance hazelcastInstance) Create a newHazelcastIndexedSessionRepository
instance.- Parameters:
hazelcastInstance
- theHazelcastInstance
to use for managing sessions
-
-
Method Details
-
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSet
in interfaceorg.springframework.beans.factory.InitializingBean
-
destroy
public void destroy()- Specified by:
destroy
in interfaceorg.springframework.beans.factory.DisposableBean
-
setApplicationEventPublisher
public void setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher applicationEventPublisher) Sets theApplicationEventPublisher
that is used to publishsession events
. The default is to not publish session events.- Parameters:
applicationEventPublisher
- theApplicationEventPublisher
that is used to publish session events. Cannot be null.
-
setDefaultMaxInactiveInterval
Set the maximum inactive interval in seconds between requests before newly created sessions will be invalidated. A negative time indicates that the session will never time out. The default is 30 minutes.- Parameters:
defaultMaxInactiveInterval
- the default maxInactiveInterval
-
setDefaultMaxInactiveInterval
@Deprecated(since="3.0.0") public void setDefaultMaxInactiveInterval(Integer defaultMaxInactiveInterval) Deprecated.since 3.0.0, in favor ofsetDefaultMaxInactiveInterval(Duration)
Set the maximum inactive interval in seconds between requests before newly created sessions will be invalidated. A negative time indicates that the session will never time out. The default is 1800 (30 minutes).- Parameters:
defaultMaxInactiveInterval
- the default maxInactiveInterval in seconds
-
setIndexResolver
Set theIndexResolver
to use.- Parameters:
indexResolver
- the index resolver
-
setSessionMapName
Set the name of map used to store sessions.- Parameters:
sessionMapName
- the session map name
-
setFlushMode
Sets the Hazelcast flush mode. Default flush mode isFlushMode.ON_SAVE
.- Parameters:
flushMode
- the new Hazelcast flush mode
-
setSaveMode
Set the save mode.- Parameters:
saveMode
- the save mode
-
createSession
public org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession createSession()Description copied from interface:SessionRepository
Creates a newSession
that is capable of being persisted by thisSessionRepository
.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.- Specified by:
createSession
in interfaceSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>
- Returns:
- a new
Session
that is capable of being persisted by thisSessionRepository
-
save
public void save(org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession session) Description copied from interface:SessionRepository
Ensures theSession
created bySessionRepository.createSession()
is saved.Some implementations may choose to save as the
Session
is updated by returning aSession
that immediately persists any changes. In this case, this method may not actually do anything.- Specified by:
save
in interfaceSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>
- Parameters:
session
- theSession
to save
-
findById
public org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession findById(String id) Description copied from interface:SessionRepository
- Specified by:
findById
in interfaceSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>
- Parameters:
id
- theSession.getId()
to lookup- Returns:
- the
Session
by theSession.getId()
or null if noSession
is found.
-
deleteById
Description copied from interface:SessionRepository
- Specified by:
deleteById
in interfaceSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>
- Parameters:
id
- theSession.getId()
to delete
-
findByIndexNameAndIndexValue
public Map<String,org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession> findByIndexNameAndIndexValue(String indexName, String indexValue) Description copied from interface:FindByIndexNameSessionRepository
Find aMap
of the session id to theSession
of all sessions that contain the specified index name index value.- Specified by:
findByIndexNameAndIndexValue
in interfaceFindByIndexNameSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>
- Parameters:
indexName
- the name of the index (i.e.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME
)indexValue
- the value of the index to search for.- Returns:
- a
Map
(nevernull
) of the session id to theSession
of all sessions that contain the specified index name and index value. If no results are found, an emptyMap
is returned.
-
entryAdded
- Specified by:
entryAdded
in interfacecom.hazelcast.map.listener.EntryAddedListener<String,
MapSession>
-
entryEvicted
- Specified by:
entryEvicted
in interfacecom.hazelcast.map.listener.EntryEvictedListener<String,
MapSession>
-
entryRemoved
- Specified by:
entryRemoved
in interfacecom.hazelcast.map.listener.EntryRemovedListener<String,
MapSession>
-
entryExpired
- Specified by:
entryExpired
in interfacecom.hazelcast.map.listener.EntryExpiredListener<String,
MapSession>
-
setDefaultMaxInactiveInterval(Duration)