Class InfinispanChangelogBasedTransaction<K,V extends SessionEntity>

java.lang.Object
org.keycloak.models.sessions.infinispan.changes.InfinispanChangelogBasedTransaction<K,V>
All Implemented Interfaces:
SessionsChangelogBasedTransaction<K,V>, NonBlockingTransaction

public class InfinispanChangelogBasedTransaction<K,V extends SessionEntity> extends Object implements SessionsChangelogBasedTransaction<K,V>, NonBlockingTransaction
Author:
Marek Posolda
  • Field Details

  • Constructor Details

    • InfinispanChangelogBasedTransaction

      public InfinispanChangelogBasedTransaction(KeycloakSession kcSession, CacheHolder<K,V> cacheHolder)
  • Method Details

    • addTask

      public void addTask(K key, SessionUpdateTask<V> task)
      Specified by:
      addTask in interface SessionsChangelogBasedTransaction<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

      public SessionEntityWrapper<V> get(K key)
    • 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 the stage.

      Any blocking operation should be consumed by the databaseUpdates. It will be executed at a later instant.

      Specified by:
      asyncCommit in interface NonBlockingTransaction
      Parameters:
      stage - The AggregateCompletionStage to collect the CompletionStage.
      databaseUpdates - The Consumer 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 the stage.

      Specified by:
      asyncRollback in interface NonBlockingTransaction
      Parameters:
      stage - The AggregateCompletionStage to collect the CompletionStage.
    • getCache

      public org.infinispan.Cache<K,SessionEntityWrapper<V>> 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 the Cache.

      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 the session can be used by the transaction.

      This transaction will keep track of further changes in the session.

      Parameters:
      realmModel - The RealmModel 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 the session 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 the Cache.

      If the lifespanFunction or maxIdleFunction returns SessionTimeouts.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 - The RealmModel where the sessions belong to.
      sessions - The Map with the cache's key/session mapping to be imported.
      lifespanFunction - The Function to compute the lifespan of the session. It defines how long the session should be stored in the cache until it is removed.
      maxIdleFunction - The Function to compute the max-idle of the session. It defines how long the session will be idle before it is removed.