Class CacheMgt

java.lang.Object
org.compiere.util.CacheMgt

public class CacheMgt extends Object
iDempiere global Cache Manager
Version:
$Id: CacheMgt.java,v 1.2 2006/07/30 00:54:35 jjanke Exp $
Author:
Jorg Janke
  • Field Details

    • MAX_SIZE

      public static int MAX_SIZE
      Default maximum cache size
  • Method Details

    • get

      public static CacheMgt get()
      Get global Cache Manager
      Returns:
      Cache Manager
    • register

      public <K, V> Map<K,V> register(CCache<K,V> instance, boolean distributed)
      Register new CCache Instance.
      This is use by CCache and developer usually shouldn't call this directly.
      Parameters:
      instance - Cache
      distributed -
      Returns:
      map for CCache
    • unregister

      public boolean unregister(CacheInterface instance)
      Un-Register Cache Instance
      Parameters:
      instance - Cache
      Returns:
      true if removed
    • reset

      public int reset()
      Do a cluster wide cache reset
      Returns:
      number of deleted local cache entries; 0 when a distributed cache service is active, since the reset is then dispatched fire-and-forget (remote nodes reset asynchronously)
    • reset

      public int reset(String tableName)
      Do a cluster wide cache reset for tableName
      Parameters:
      tableName - table name
      Returns:
      number of deleted local cache entries; 0 when a distributed cache service is active, since the reset is then dispatched fire-and-forget (remote nodes reset asynchronously)
    • reset

      public int reset(String tableName, int Record_ID)
      Do a cluster wide cache reset for tableName with recordId key
      Parameters:
      tableName -
      Record_ID - record id for the cache entries to delete. pass -1 if you don't want to delete cache entries by record id
      Returns:
      number of deleted local cache entries; 0 when a distributed cache service is active and tableName isn't debounced, since the reset is then dispatched fire-and-forget (remote nodes reset asynchronously)
    • reset

      public int reset(String tableName, String key)
      Do a cluster wide cache reset for tableName with key
      Parameters:
      tableName - cache name
      key - cache key
      Returns:
      number of deleted local cache entries; 0 when a distributed cache service is active and tableName isn't debounced, since the reset is then dispatched fire-and-forget (remote nodes reset asynchronously)
    • resetLocalCache

      public int resetLocalCache()
      Reset local Cache
      Returns:
      number of deleted cache entries
    • getInstancesAsArray

      public CacheInterface[] getInstancesAsArray()
      Get cache instances
      Returns:
      cache instances
    • resetLocalCache

      public int resetLocalCache(String tableName, Integer recordId)
      Reset local Cache
      Parameters:
      tableName - cache name
      recordId - cache key
      Returns:
      number of deleted cache entries
    • resetLocalCacheWithAntiStampede

      public int resetLocalCacheWithAntiStampede(String tableName, int recordId)
      Reset the local cache for tableName with anti-stampede protection. Called by the broadcast invalidation subscriber so nodes don't all hammer the DB simultaneously:
      • When Cache.ResetStaggerMaxMs is > 0, the actual reset is deferred onto Adempiere.getThreadPoolExecutor()'s delay queue by a deterministic delay — see computeStaggeredDelayMs() — so cluster members take a turn spread across the Cache.ResetStaggerMaxMs window instead of all reloading from the DB at the same millisecond. The queued delay costs no worker thread while pending, unlike blocking the caller with Thread.sleep. In that case this method returns 0 immediately; the real reset count is only known once the queued task runs.
      • Uses a per-guard key AtomicBoolean in-flight guard: if a reset is already in progress (or queued) on this node for the same guard key, the duplicate is skipped.
      Parameters:
      tableName - table to reset; when null resets all caches
      recordId - integer key; -1 resets all entries for the table
    • resetLocalCache

      public int resetLocalCache(String tableName, String key)
      Reset local Cache
      Parameters:
      tableName - cache name
      key - cache key
      Returns:
      number of deleted cache entries
    • resetLocalCacheWithAntiStampede

      public int resetLocalCacheWithAntiStampede(String tableName, String key)
      Reset the local cache for tableName with anti-stampede protection. See resetLocalCacheWithAntiStampede(String, int) for the stagger/queueing and in-flight guard semantics.
      Parameters:
      tableName - table to reset
      key - string key; empty string resets all entries for the table
    • localNewRecord

      protected void localNewRecord(String tableName, int Record_ID)
      New record notification for local cache instances
      Parameters:
      tableName - table name
      Record_ID - record if applicable or 0 for all
    • getElementCount

      public int getElementCount()
      Get Total Cached Elements
      Returns:
      total cache element count
    • toString

      public String toString()
      String Representation
      Overrides:
      toString in class Object
      Returns:
      info
    • toStringX

      public String toStringX()
      Extended String Representation
      Returns:
      info
    • newRecord

      public void newRecord(String tableName, int recordId)
      New record notification
      Parameters:
      tableName -
      recordId -
    • getCacheInfos

      public List<CacheInfo> getCacheInfos()
      Get info for cache instances
      Returns:
      info for cache instances
    • hasCache

      public boolean hasCache(String tableName)
      Is there a cache instance for this table name?
      Parameters:
      tableName -
      Returns:
      boolean
    • suspendTableCacheReset

      public void suspendTableCacheReset(String tableName)
      Suspend cache reset operations for tableName (usually to improve performance for batch operations).
      Caller must call resumeTableCacheReset(String) later to clear the suspend cache reset flag.
      Parameters:
      tableName -
    • resumeTableCacheReset

      public void resumeTableCacheReset(String tableName)
      Clear suspend cache reset flag for tableName
      Parameters:
      tableName -
    • scheduleCacheReset

      public static void scheduleCacheReset(String cacheName, Object key, boolean newRecord, String trxName)
      Schedule cache reset after transaction commit. If trxName is null or transaction cannot be found, the cache reset will be scheduled immediately exceptions are logged and ignored
      Parameters:
      cacheName -
      key - - can be an Integer ID or String key, if key is -1, the whole cache will be reset
      newRecord -
      trxName -