Class SoftRefCachingRowMapper

java.lang.Object
org.nuxeo.ecm.core.storage.sql.SoftRefCachingRowMapper
All Implemented Interfaces:
RowMapper
Direct Known Subclasses:
SoftRefCachingMapper

public class SoftRefCachingRowMapper extends Object implements RowMapper
A RowMapper that has an internal cache.

The cache only holds Rows that are known to be identical to what's in the underlying RowMapper.

  • Field Details

    • cacheQueue

      public final VCSInvalidationsQueue cacheQueue
      The queue of cache invalidations received from other session, to process at pre-transaction time.
    • registry

      protected final io.dropwizard.metrics5.MetricRegistry registry
      Cache statistics
      Since:
      5.7
    • cacheHitCount

      protected io.dropwizard.metrics5.Counter cacheHitCount
    • cacheGetTimer

      protected io.dropwizard.metrics5.Timer cacheGetTimer
    • sorRows

      protected io.dropwizard.metrics5.Counter sorRows
    • sorGetTimer

      protected io.dropwizard.metrics5.Timer sorGetTimer
  • Constructor Details

    • SoftRefCachingRowMapper

      public SoftRefCachingRowMapper()
  • Method Details

    • initialize

      public void initialize(String repositoryName, Model model, RowMapper rowMapper, VCSInvalidationsPropagator cachePropagator, Map<String,String> properties)
    • setMetrics

      protected void setMetrics(String repositoryName)
    • close

      public void close()
    • generateNewId

      public Serializable generateNewId()
      Description copied from interface: RowMapper
      Computes a new unique id.
      Specified by:
      generateNewId in interface RowMapper
      Returns:
      a new unique id
    • isAbsent

      protected static boolean isAbsent(Row row)
    • cachePut

      protected void cachePut(Row row)
    • sortACLRows

      protected ACLRow[] sortACLRows(ACLRow[] acls)
    • cachePutAbsent

      protected void cachePutAbsent(RowId rowId)
    • cachePutAbsentIfNull

      protected void cachePutAbsentIfNull(RowId rowId, Row row)
    • cachePutAbsentIfRowId

      protected void cachePutAbsentIfRowId(RowId rowId)
    • cacheGet

      protected Row cacheGet(RowId rowId)
    • cacheRemove

      protected void cacheRemove(RowId rowId)
    • receiveInvalidations

      public VCSInvalidations receiveInvalidations()
      Description copied from interface: RowMapper
      Processes and returns the invalidations queued for processing by the cache (if any).

      Called pre-transaction by session start or transactionless save;

      Specified by:
      receiveInvalidations in interface RowMapper
      Returns:
      the invalidations, or null
    • sendInvalidations

      public void sendInvalidations(VCSInvalidations invalidations)
      Description copied from interface: RowMapper
      Post-transaction invalidations notification.

      Called post-transaction by session commit/rollback or transactionless save.

      Specified by:
      sendInvalidations in interface RowMapper
      Parameters:
      invalidations - the known invalidations to send to others, or null
    • clearCache

      public void clearCache()
      Description copied from interface: RowMapper
      Clears the mapper's cache (if any)

      Called after a rollback, or a manual clear through RepositoryStatus MBean.

      Specified by:
      clearCache in interface RowMapper
    • getCacheSize

      public long getCacheSize()
      Description copied from interface: RowMapper
      Evaluate the cached elements size
      Specified by:
      getCacheSize in interface RowMapper
    • rollback

      public void rollback()
      Description copied from interface: RowMapper
      Rollback the transaction.

      This is in the RowMapper interface because on rollback the cache must be invalidated.

      Specified by:
      rollback in interface RowMapper
    • read

      public List<? extends RowId> read(Collection<RowId> rowIds, boolean cacheOnly)
      Description copied from interface: RowMapper
      Reads a set of rows for the given RowIds.

      For each requested row, either a Row is found and returned, or a RowId (not implementing Row) is returned to signify an absent row.

      Specified by:
      read in interface RowMapper
      Parameters:
      rowIds - the row ids (including their table name)
      cacheOnly - if true, only hit memory
      Returns:
      the collection of Rows (or RowIds if the row was absent from the database). Order is not the same as the input rowIds
    • write

      public void write(RowMapper.RowBatch batch)
      Description copied from interface: RowMapper
      Writes a set of rows. This includes creating, updating and deleting rows.
      Specified by:
      write in interface RowMapper
      Parameters:
      batch - the set of rows and the operations to do on them
    • readSimpleRow

      public Row readSimpleRow(RowId rowId)
      Description copied from interface: RowMapper
      Gets a row for a SimpleFragment from the database, given its table name and id. If the row doesn't exist, null is returned.
      Specified by:
      readSimpleRow in interface RowMapper
      Parameters:
      rowId - the row id
      Returns:
      the row, or null
    • getBinaryFulltext

      public Map<String,String> getBinaryFulltext(RowId rowId)
      Description copied from interface: RowMapper
      Gets the fulltext extracted from the binary fields.
      Specified by:
      getBinaryFulltext in interface RowMapper
      Parameters:
      rowId - the row id
      Returns:
      the fulltext string representation or null if unsupported
    • readCollectionRowArray

      public Serializable[] readCollectionRowArray(RowId rowId)
      Description copied from interface: RowMapper
      Gets an array for a CollectionFragment from the database, given its table name and id. If no rows are found, an empty array is returned.
      Specified by:
      readCollectionRowArray in interface RowMapper
      Parameters:
      rowId - the row id
      Returns:
      the array
    • readSelectionRows

      public List<Row> readSelectionRows(SelectionType selType, Serializable selId, Serializable filter, Serializable criterion, boolean limitToOne)
      Description copied from interface: RowMapper
      Reads the rows corresponding to a selection.
      Specified by:
      readSelectionRows in interface RowMapper
      Parameters:
      selType - the selection type
      selId - the selection id (parent id for a hierarchy selection)
      filter - the filter value (name for a hierarchy selection)
      criterion - an optional additional criterion depending on the selection type (complex prop flag for a hierarchy selection)
      limitToOne - whether to stop after one row retrieved
      Returns:
      the list of rows
    • readSelectionsIds

      public Set<Serializable> readSelectionsIds(SelectionType selType, List<Serializable> values)
      Description copied from interface: RowMapper
      Gets all the selection ids for a given list of values.
      Specified by:
      readSelectionsIds in interface RowMapper
    • copy

      public RowMapper.CopyResult copy(RowMapper.IdWithTypes source, Serializable destParentId, String destName, Row overwriteRow, boolean excludeSpecialChildren, boolean excludeACL)
      Description copied from interface: RowMapper
      Copies the hierarchy starting from a given row to a new parent with a new name.

      If the new parent is null, then this is a version creation, which doesn't recurse in regular children.

      If overwriteRow is passed, the copy is done onto this existing node as its root (version restore) instead of creating a new node in the parent.

      Specified by:
      copy in interface RowMapper
      Parameters:
      source - the id, primary type and mixin types of the row to copy
      destParentId - the new parent id, or null
      destName - the new name
      overwriteRow - when not null, the copy is done onto this existing row, and the values are set in hierarchy
      excludeSpecialChildren - the flag to exclude special children from copy
      excludeACL - the flag to exclude ACL from copy
      Returns:
      info about the copy
    • getDescendantsInfo

      public List<RowMapper.NodeInfo> getDescendantsInfo(Serializable rootId)
      Description copied from interface: RowMapper
      Gets descendants infos from a given root node. This does not include information about the root node itself.
      Specified by:
      getDescendantsInfo in interface RowMapper
      Parameters:
      rootId - the root node id from which to get descendants info
      Returns:
      the list of descendant nodes info
    • remove

      public void remove(Serializable rootId, List<RowMapper.NodeInfo> nodeInfos)
      Description copied from interface: RowMapper
      Deletes a hierarchy.
      Specified by:
      remove in interface RowMapper
      Parameters:
      rootId - the id of the root node to be deleted with its children
      nodeInfos - the information about all descendants being deleted along the root node