Class ConcurrentHashMapStorage<K,V extends AbstractEntity & UpdatableEntity,M,CRUD extends CrudOperations<V,M>>

java.lang.Object
org.keycloak.models.map.storage.chm.ConcurrentHashMapStorage<K,V,M,CRUD>
All Implemented Interfaces:
KeycloakTransaction, HasRealmId, MapStorage<V,M>
Direct Known Subclasses:
FileMapStorage, HotRodUserSessionMapStorage, SingleUseObjectMapStorage

public class ConcurrentHashMapStorage<K,V extends AbstractEntity & UpdatableEntity,M,CRUD extends CrudOperations<V,M>> extends Object implements MapStorage<V,M>, KeycloakTransaction, HasRealmId
  • Field Details

  • Constructor Details

  • Method Details

    • begin

      public void begin()
      Specified by:
      begin in interface KeycloakTransaction
    • commit

      public void commit()
      Specified by:
      commit in interface KeycloakTransaction
    • rollback

      public void rollback()
      Specified by:
      rollback in interface KeycloakTransaction
    • setRollbackOnly

      public void setRollbackOnly()
      Specified by:
      setRollbackOnly in interface KeycloakTransaction
    • getRollbackOnly

      public boolean getRollbackOnly()
      Specified by:
      getRollbackOnly in interface KeycloakTransaction
    • isActive

      public boolean isActive()
      Specified by:
      isActive in interface KeycloakTransaction
    • addTask

      protected void addTask(String key, ConcurrentHashMapStorage<K,V,M,CRUD>.MapTaskWithValue task)
      Adds a given task if not exists for the given key
    • registerEntityForChanges

      public V registerEntityForChanges(V origEntity)
      Returns a deep clone of an entity. If the clone is already in the transaction, returns this one.

      Usually used before giving an entity from a source back to the caller, to prevent changing it directly in the data store, but to keep transactional properties.

      Parameters:
      origEntity - Original entity
      Returns:
    • read

      public V read(String sKey)
      Description copied from interface: MapStorage
      Provides possibility to lookup for values by a key in the underlying store with respect to changes done in current transaction. Updates to the returned instance would be visible in the current transaction and will propagate into the underlying store upon commit. If V implements ExpirableEntity this method should not return entities that are expired. See ExpirableEntity JavaDoc for more details.
      Specified by:
      read in interface MapStorage<K,V extends AbstractEntity & UpdatableEntity>
      Parameters:
      sKey - identifier of a value
      Returns:
      a value associated with the given key
    • read

      public Stream<V> read(QueryParameters<M> queryParameters)
      Returns the stream of records that match given criteria and includes changes made in this transaction, i.e. the result contains updates and excludes records that have been deleted in this transaction.
      Specified by:
      read in interface MapStorage<K,V extends AbstractEntity & UpdatableEntity>
      Parameters:
      queryParameters -
      Returns:
    • getCount

      public long getCount(QueryParameters<M> queryParameters)
      Description copied from interface: MapStorage
      Returns a number of values present in the underlying storage that fulfill the given criteria with respect to changes done in the current transaction.
      Specified by:
      getCount in interface MapStorage<K,V extends AbstractEntity & UpdatableEntity>
      Parameters:
      queryParameters - parameters for the query like firstResult, maxResult, requested ordering, etc.
      Returns:
      number of values present in the storage that fulfill the given criteria
    • create

      public V create(V value)
      Description copied from interface: MapStorage
      Instructs this storage to add a new value into the underlying store on commit in the context of the current transaction.

      Updates to the returned instances of V would be visible in the current transaction and will propagate into the underlying store upon commit. The ID of the entity passed in the parameter might change to a different value in the returned value if the underlying storage decided this was necessary. If the ID of the entity was null before, it will be set on the returned value.

      Specified by:
      create in interface MapStorage<K,V extends AbstractEntity & UpdatableEntity>
      Parameters:
      value - the value
      Returns:
      Entity representing the value in the store. It may or may not be the same instance as value.
    • updateIfChanged

      public V updateIfChanged(V value, Predicate<V> shouldPut)
    • delete

      public boolean delete(String key)
      Description copied from interface: MapStorage
      Instructs this storage to delete a value associated with the identifier key from the underlying store upon commit.
      Specified by:
      delete in interface MapStorage<K,V extends AbstractEntity & UpdatableEntity>
      Parameters:
      key - identifier of a value
      Returns:
      Returns true if the object has been deleted or result cannot be determined, false otherwise.
    • delete

      public long delete(QueryParameters<M> queryParameters)
      Description copied from interface: MapStorage
      Instructs this transaction to remove values (identified by mcb filter) from the underlying store upon commit.
      Specified by:
      delete in interface MapStorage<K,V extends AbstractEntity & UpdatableEntity>
      Parameters:
      queryParameters - parameters for the query like firstResult, maxResult, requested ordering, etc.
      Returns:
      number of removed objects (might return -1 if not supported)
    • exists

      public boolean exists(String key)
      Description copied from interface: MapStorage
      Returns true if the object with the given key exists in the underlying storage with respect to changes done in the current transaction. false otherwise.
      Specified by:
      exists in interface MapStorage<K,V extends AbstractEntity & UpdatableEntity>
      Parameters:
      key - Key of the object. Must not be null.
      Returns:
      See description
    • getRealmId

      public String getRealmId()
      Description copied from interface: HasRealmId
      Returns realm ID of the entity.
      Specified by:
      getRealmId in interface HasRealmId
      Returns:
      See description
    • setRealmId

      public void setRealmId(String realmId)
      Description copied from interface: HasRealmId
      Sets the realm ID of this object.
      Specified by:
      setRealmId in interface HasRealmId
      Parameters:
      realmId - Realm ID.