Class InfinispanChangelogBasedTransaction<K,V extends SessionEntity>
- All Implemented Interfaces:
SessionsChangelogBasedTransaction<K,
,V> NonBlockingTransaction
- Author:
- Marek Posolda
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final CacheHolder<K,
V> protected final KeycloakSession
static final org.jboss.logging.Logger
protected final Map<K,
SessionUpdatesList<V>> -
Constructor Summary
ConstructorsConstructorDescriptionInfinispanChangelogBasedTransaction
(KeycloakSession kcSession, CacheHolder<K, V> cacheHolder) -
Method Summary
Modifier and TypeMethodDescriptionvoid
addTask
(K key, SessionUpdateTask<V> task) void
addTask
(K key, SessionUpdateTask<V> task, V entity, UserSessionModel.SessionPersistenceState persistenceState) void
asyncCommit
(org.infinispan.commons.util.concurrent.AggregateCompletionStage<Void> stage, Consumer<DatabaseUpdate> databaseUpdates) Asynchronously commits the transaction.void
asyncRollback
(org.infinispan.commons.util.concurrent.AggregateCompletionStage<Void> stage) Asynchronously rollbacks the transaction.org.infinispan.Cache<K,
SessionEntityWrapper<V>> getCache()
importSession
(RealmModel realmModel, K key, SessionEntityWrapper<V> session, long lifespan, long maxIdle) Imports a session from an external source into theCache
.void
importSessionsConcurrently
(RealmModel realmModel, Map<K, SessionEntityWrapper<V>> sessions, SessionFunction<V> lifespanFunction, SessionFunction<V> maxIdleFunction) Imports multiple sessions from an external source into theCache
.void
reloadEntityInCurrentTransaction
(RealmModel realm, K key, SessionEntityWrapper<V> entity) Deprecated, for removal: This API element is subject to removal in a future version.
-
Field Details
-
logger
public static final org.jboss.logging.Logger logger -
kcSession
-
updates
-
cacheHolder
-
-
Constructor Details
-
InfinispanChangelogBasedTransaction
-
-
Method Details
-
addTask
- Specified by:
addTask
in interfaceSessionsChangelogBasedTransaction<K,
V extends SessionEntity>
-
addTask
public void addTask(K key, SessionUpdateTask<V> task, V entity, UserSessionModel.SessionPersistenceState persistenceState) -
reloadEntityInCurrentTransaction
@Deprecated(since="26.4", forRemoval=true) public void reloadEntityInCurrentTransaction(RealmModel realm, K key, SessionEntityWrapper<V> entity) Deprecated, for removal: This API element is subject to removal in a future version. -
get
-
asyncCommit
public void asyncCommit(org.infinispan.commons.util.concurrent.AggregateCompletionStage<Void> stage, Consumer<DatabaseUpdate> databaseUpdates) Description copied from interface:NonBlockingTransaction
Asynchronously commits the transaction.The implementation should not block the thread and add any (or none)
CompletionStage
into thestage
.Any blocking operation should be consumed by the
databaseUpdates
. It will be executed at a later instant.- Specified by:
asyncCommit
in interfaceNonBlockingTransaction
- Parameters:
stage
- TheAggregateCompletionStage
to collect theCompletionStage
.databaseUpdates
- TheConsumer
to use for blocking/database updates.
-
asyncRollback
public void asyncRollback(org.infinispan.commons.util.concurrent.AggregateCompletionStage<Void> stage) Description copied from interface:NonBlockingTransaction
Asynchronously rollbacks the transaction.The implementation should not block the thread and add any (or none)
CompletionStage
into thestage
.- Specified by:
asyncRollback
in interfaceNonBlockingTransaction
- Parameters:
stage
- TheAggregateCompletionStage
to collect theCompletionStage
.
-
getCache
- Returns:
- The
Cache
backing up this transaction.
-
importSession
public V importSession(RealmModel realmModel, K key, SessionEntityWrapper<V> session, long lifespan, long maxIdle) Imports a session from an external source into theCache
.If a session already exists in the cache, this method does not insert the
session
. The invoker should use the session returned by this method invocation. When the session is successfully imported, this method returns null and thesession
can be used by the transaction.This transaction will keep track of further changes in the session.
- Parameters:
realmModel
- TheRealmModel
where the session belong to.key
- The cache's key.session
- The session to import.lifespan
- How long the session stays cached until it is expired and removed.maxIdle
- How long the session can be idle (without reading or writing) before being removed.- Returns:
- The existing cached session. If it returns
null
, it means thesession
used in the parameters was cached.
-
importSessionsConcurrently
public void importSessionsConcurrently(RealmModel realmModel, Map<K, SessionEntityWrapper<V>> sessions, SessionFunction<V> lifespanFunction, SessionFunction<V> maxIdleFunction) Imports multiple sessions from an external source into theCache
.If the
lifespanFunction
ormaxIdleFunction
returnsSessionTimeouts.ENTRY_EXPIRED_FLAG
, the session is considered expired and not stored in the cache.Also, if one or more sessions already exist in the
Cache
, it will not be imported.This transaction will keep track of further changes in the sessions.
- Parameters:
realmModel
- TheRealmModel
where the sessions belong to.sessions
- TheMap
with the cache's key/session mapping to be imported.lifespanFunction
- TheFunction
to compute the lifespan of the session. It defines how long the session should be stored in the cache until it is removed.maxIdleFunction
- TheFunction
to compute the max-idle of the session. It defines how long the session will be idle before it is removed.
-