public class HazelcastIndexedSessionRepository extends java.lang.Object implements FindByIndexNameSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.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); 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
.
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 |
---|
HazelcastIndexedSessionRepository(com.hazelcast.core.HazelcastInstance hazelcastInstance)
Create a new
HazelcastIndexedSessionRepository instance. |
Modifier and Type | Method and Description |
---|---|
void |
close() |
org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.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.HazelcastIndexedSessionRepository.HazelcastSession |
findById(java.lang.String id)
|
java.util.Map<java.lang.String,org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.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 specified index name index value. |
void |
init() |
void |
save(org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.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 |
setFlushMode(FlushMode flushMode)
Sets the Hazelcast flush mode.
|
void |
setIndexResolver(IndexResolver<Session> indexResolver)
Set the
IndexResolver to use. |
void |
setSaveMode(SaveMode saveMode)
Set the save mode.
|
void |
setSessionMapName(java.lang.String sessionMapName)
Set the name of map used to store sessions.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
findByPrincipalName
public static final java.lang.String DEFAULT_SESSION_MAP_NAME
public static final java.lang.String PRINCIPAL_NAME_ATTRIBUTE
public HazelcastIndexedSessionRepository(com.hazelcast.core.HazelcastInstance hazelcastInstance)
HazelcastIndexedSessionRepository
instance.hazelcastInstance
- the HazelcastInstance
to use for managing sessions@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 setIndexResolver(IndexResolver<Session> indexResolver)
IndexResolver
to use.indexResolver
- the index resolverpublic void setSessionMapName(java.lang.String sessionMapName)
sessionMapName
- the session map namepublic void setFlushMode(FlushMode flushMode)
FlushMode.ON_SAVE
.flushMode
- the new Hazelcast flush modepublic void setSaveMode(SaveMode saveMode)
saveMode
- the save modepublic org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.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.HazelcastIndexedSessionRepository.HazelcastSession>
Session
that is capable of being persisted by this
SessionRepository
public void save(org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.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.HazelcastIndexedSessionRepository.HazelcastSession>
session
- the Session
to savepublic org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession findById(java.lang.String id)
SessionRepository
findById
in interface SessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.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.HazelcastIndexedSessionRepository.HazelcastSession>
id
- the Session.getId()
to deletepublic java.util.Map<java.lang.String,org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession> findByIndexNameAndIndexValue(java.lang.String indexName, java.lang.String indexValue)
FindByIndexNameSessionRepository
Map
of the session id to the Session
of all sessions that
contain the specified index name index value.findByIndexNameAndIndexValue
in interface FindByIndexNameSessionRepository<org.springframework.session.hazelcast.HazelcastIndexedSessionRepository.HazelcastSession>
indexName
- the name of the index (i.e.
FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME
)indexValue
- the value of the index to search for.Map
(never null
) of the session id to the Session
of all sessions that contain the specified index name and index value. 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>