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.EntryRemovedListener<String,,MapSession> com.hazelcast.map.listener.MapListener,EventListener,FindByIndexNameSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>,SessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>
- Direct Known Subclasses:
HazelcastSessionRepository
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>
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:
MapAttributeConfig attributeConfig = new MapAttributeConfig()
.setName(HazelcastIndexedSessionRepository.PRINCIPAL_NAME_ATTRIBUTE)
.setExtractor(PrincipalNameExtractor.class.getName());
Config config = new Config();
config.getMapConfig(HazelcastIndexedSessionRepository.DEFAULT_SESSION_MAP_NAME)
.addMapAttributeConfig(attributeConfig)
.addMapIndexConfig(new MapIndexConfig(
HazelcastIndexedSessionRepository.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.
- entryAdded -
SessionCreatedEvent - entryEvicted -
SessionExpiredEvent - entryRemoved -
SessionDeletedEvent
- Since:
- 2.2.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThe default name of map used by Spring Session to store sessions.static final StringThe principal name custom attribute name.Fields inherited from interface org.springframework.session.FindByIndexNameSessionRepository
PRINCIPAL_NAME_INDEX_NAME -
Constructor Summary
ConstructorsConstructorDescriptionHazelcastIndexedSessionRepository(com.hazelcast.core.HazelcastInstance hazelcastInstance) Create a newHazelcastIndexedSessionRepositoryinstance. -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSessionCreates a newSessionthat is capable of being persisted by thisSessionRepository.voiddeleteById(String id) voidentryAdded(com.hazelcast.core.EntryEvent<String, MapSession> event) voidentryEvicted(com.hazelcast.core.EntryEvent<String, MapSession> event) voidentryRemoved(com.hazelcast.core.EntryEvent<String, MapSession> event) org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSessionMap<String,org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession> findByIndexNameAndIndexValue(String indexName, String indexValue) voidinit()voidsave(org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession session) Ensures theSessioncreated bySessionRepository.createSession()is saved.voidsetApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher applicationEventPublisher) Sets theApplicationEventPublisherthat is used to publishsession events.voidsetDefaultMaxInactiveInterval(Integer defaultMaxInactiveInterval) Set the maximum inactive interval in seconds between requests before newly created sessions will be invalidated.voidsetFlushMode(FlushMode flushMode) Sets the Hazelcast flush mode.voidsetIndexResolver(IndexResolver<Session> indexResolver) Set theIndexResolverto use.voidsetSaveMode(SaveMode saveMode) Set the save mode.voidsetSessionMapName(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, waitMethods 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 newHazelcastIndexedSessionRepositoryinstance.- Parameters:
hazelcastInstance- theHazelcastInstanceto use for managing sessions
-
-
Method Details
-
init
@PostConstruct public void init() -
close
@PreDestroy public void close() -
setApplicationEventPublisher
public void setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher applicationEventPublisher) Sets theApplicationEventPublisherthat is used to publishsession events. The default is to not publish session events.- Parameters:
applicationEventPublisher- theApplicationEventPublisherthat 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 timeout. The default is 1800 (30 minutes).- Parameters:
defaultMaxInactiveInterval- the maximum inactive interval in seconds
-
setIndexResolver
Set theIndexResolverto 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:SessionRepositoryCreates a newSessionthat is capable of being persisted by thisSessionRepository.This allows optimizations and customizations in how the
Sessionis 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:
createSessionin interfaceSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>- Returns:
- a new
Sessionthat is capable of being persisted by thisSessionRepository
-
save
public void save(org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession session) Description copied from interface:SessionRepositoryEnsures theSessioncreated bySessionRepository.createSession()is saved.Some implementations may choose to save as the
Sessionis updated by returning aSessionthat immediately persists any changes. In this case, this method may not actually do anything.- Specified by:
savein interfaceSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>- Parameters:
session- theSessionto save
-
findById
public org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession findById(String id) Description copied from interface:SessionRepository- Specified by:
findByIdin interfaceSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>- Parameters:
id- theSession.getId()to lookup- Returns:
- the
Sessionby theSession.getId()or null if noSessionis found.
-
deleteById
Description copied from interface:SessionRepository- Specified by:
deleteByIdin 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:FindByIndexNameSessionRepositoryFind aMapof the session id to theSessionof all sessions that contain the specified index name index value.- Specified by:
findByIndexNameAndIndexValuein 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 theSessionof all sessions that contain the specified index name and index value. If no results are found, an emptyMapis returned.
-
entryAdded
- Specified by:
entryAddedin interfacecom.hazelcast.map.listener.EntryAddedListener<String,MapSession>
-
entryEvicted
- Specified by:
entryEvictedin interfacecom.hazelcast.map.listener.EntryEvictedListener<String,MapSession>
-
entryRemoved
- Specified by:
entryRemovedin interfacecom.hazelcast.map.listener.EntryRemovedListener<String,MapSession>
-