@Override public void flush() { if (!isEnabled()) { return; } if (cache == null) { LOG.error("Cache configuration is invalid! NOT Caching. Check EH Cache configuration."); return; } LOG.info("Expire all items in cache"); for (Object key : cache.getKeys()) { setExpired(cache.get(key), 0); } for (Object key : dependencyCache.getKeys()) { setExpired(dependencyCache.get(key), ADJUST_TTL); } }
public void setExpired(Element element, int adjustTTL) { if (!isEnabled()) { return; } if (element == null) { return; } if (element.getObjectValue() instanceof CacheElement) { CacheElement cacheElement = (CacheElement) element.getObjectValue(); if (!cacheElement.isExpired()) { cacheElement.setExpired(true); expireElement(element, adjustTTL); } } else { expireElement(element, adjustTTL); } }
@Override public void flush() { if (!isEnabled()) { return; } if (!cacheExists()) { LOG.error("Cache configuration is invalid! NOT Caching. Check EH Cache configuration."); return; } LOG.info("Expiring all items in cache"); cache.clear(); LOG.info("Expiring all items in dependency cache"); dependencyCache.clear(); }
@Override public <T> void storeInItemCache(String key, CacheElement<T> cacheElement, List<CacheDependency> dependencies) { if (!isEnabled()) { return; } if (!cacheExists()) { LOG.error("Cache configuration is invalid! NOT Caching. Check EH Cache configuration."); return; } // detect undeclared nulls, complain, and set to null if (!cacheElement.isNull() && cacheElement.getPayload() == null) { Exception exToLogToHaveStacktraceWhoCausedIt = new Exception(); LOG.error("Detected undeclared null payload on element with key " + key + " at insert time!", exToLogToHaveStacktraceWhoCausedIt); cacheElement.setNull(true); } cacheElement.setExpired(false); Element element = cache.get(key); if (element == null) { element = new Element(key, cacheElement); } cache.put(element); element.setTimeToLive(cacheDependencyTTL); for (CacheDependency dep : dependencies) { String dependentKey = getKey(dep.getPublicationId(), dep.getItemId()); cacheElement.setDependentKey(dependentKey); addDependency(key, dependentKey); updateTTL(dependencyCache.get(dependentKey)); } }
public <T> CacheElement<T> loadPayloadFromLocalCache(String key) { if (!isEnabled()) { LOG.debug("Cache is disabled. Returning a null Cache Element."); return new CacheElementImpl<>(null, true); if (!doCheckForPreview() || (TridionUtils.getSessionPreviewToken() == null && cache != null)) { Element currentElement = cache.get(key); if (currentElement == null) { currentElement = new Element(key, new CacheElementImpl<T>(null)); setExpired(currentElement, 0); Element oldElement = cache.putIfAbsent(currentElement); if (oldElement != null) { addDependency(key, dependencyKey);
@Override public <T> void storeInItemCache(final String key, final CacheElement<T> cacheElement, final List<CacheDependency> dependencies) { if (!isEnabled()) { return; } if (!cacheExists()) { LOG.error("Cache configuration is invalid! NOT Caching. Check EH Cache configuration."); return; } // detect undeclared nulls, complain, and set to null if (!cacheElement.isNull() && cacheElement.getPayload() == null) { Exception exToLogToHaveStacktraceWhoCausedIt = new Exception(); LOG.error("Detected undeclared null payload on element with key " + key + " at insert time!", exToLogToHaveStacktraceWhoCausedIt); cacheElement.setNull(true); cacheElement.setExpired(true); } cacheElement.setExpired(false); if (cache.containsKey(key)) { cache.replace(key, cacheElement); } else { cache.put(key, cacheElement); } for (CacheDependency dep : dependencies) { String dependentKey = getKey(dep.getPublicationId(), dep.getItemId()); cacheElement.setDependentKey(dependentKey); addDependency(key, dependentKey); } }
@Override public void invalidate(final String key) { if (!isEnabled()) { return; } if (dependencyCache == null) { LOG.error("Cache configuration is invalid! NOT Caching. Check EH Cache configuration."); return; } String dependencyKey = getKey(key); Element dependencyElement = dependencyCache.get(dependencyKey); if (dependencyElement != null) { LOG.info("Expire key: {} from dependency cache", dependencyKey); setExpired(dependencyElement, ADJUST_TTL); ConcurrentSkipListSet<String> cacheSet = ((CacheElement<ConcurrentSkipListSet<String>>) dependencyElement .getObjectValue()).getPayload(); if (cacheSet != null) { for (String cacheKey : cacheSet) { LOG.debug("Expire cache key: {} from cache", cacheKey); Element cacheElement = cache.get(cacheKey); setExpired(cacheElement, 0); } } } else { LOG.info("Attempting to expire key {} but not found in dependency cache", dependencyKey); } }
/** * Store given item in the cache with a simple time-to-live property. * * @param key String representing the key to store the payload under * @param cacheElement CacheElement a wrapper around the actual value to store in * cache */ @Override public <T> void storeInItemCache(String key, CacheElement<T> cacheElement) { if (!isEnabled()) { return; } if (!cacheExists()) { LOG.error("Cache configuration is invalid! NOT Caching. Check EH Cache configuration."); return; } // detect undeclared nulls, complain, and set to null if (!cacheElement.isNull() && cacheElement.getPayload() == null) { Exception exToLogToHaveStacktraceWhoCausedIt = new Exception(); LOG.error("Detected undeclared null payload on element with key " + key + " at insert time!", exToLogToHaveStacktraceWhoCausedIt); cacheElement.setNull(true); } cacheElement.setExpired(false); storeElement(key, cacheElement); }
@Override public void invalidate(final String key) { if (!isEnabled()) { return; if (!dependencyCacheExists()) { LOG.error("Cache configuration is invalid! NOT Caching. Check EH Cache configuration."); return; String dependencyKey = getKey(key); if (!dependencyCache.containsKey(dependencyKey)) { LOG.debug("No dependency key found for key:{}. Doing nothing");
@Override public void addDependency(final String cacheKey, final String dependencyKey) { if (!isEnabled()) { return; } if (!dependencyCacheExists()) { LOG.error("Cache configuration is invalid! NOT Caching. Check EH Cache configuration."); return; } LOG.debug("Add dependency from key: {} to key: {}", dependencyKey, cacheKey); if (dependencyCache.containsKey(dependencyKey)) { CacheElement<ConcurrentSkipListSet<String>> dependencyElement = dependencyCache.get(dependencyKey); if (dependencyElement != null && dependencyElement.getPayload() != null) { ConcurrentSkipListSet<String> cacheSet = dependencyElement.getPayload(); if (!cacheSet.contains(cacheKey)) { LOG.info("Adding cachekey: {} to dependent key: {}", cacheKey, dependencyKey); cacheSet.add(cacheKey); } dependencyElement.setExpired(false); dependencyCache.replace(dependencyKey, dependencyElement); } else { addNewDependencyCacheElement(cacheKey, dependencyKey); } } else { addNewDependencyCacheElement(cacheKey, dependencyKey); } LOG.info("Added or replaced cache element with dependency key: {} and dependent key: {}", dependencyKey, cacheKey); }
/** * Store given item in the cache with a reference to supplied Tridion Item. * * @param key String representing the key to store the cacheItem under * @param cacheElement Object the actual value to store in cache * @param dependingPublicationId int representing the Publication id of the Tridion item the * cacheItem depends on * @param dependingItemId int representing the Item id of the Tridion item the cacheItem * depends on */ @Override public <T> void storeInItemCache(String key, CacheElement<T> cacheElement, int dependingPublicationId, int dependingItemId) { if (!isEnabled()) { return; } CacheDependency dependency = new CacheDependencyImpl(dependingPublicationId, dependingItemId); List<CacheDependency> dependencies = new ArrayList<>(); dependencies.add(dependency); storeInItemCache(key, cacheElement, dependencies); }
@Override public <T> CacheElement<T> loadPayloadFromLocalCache(final String key) { if (!isEnabled()) { LOG.debug("Cache is disabled. Returning a null Cache Element."); return new CacheElementImpl<>(null, true); } if (!doCheckForPreview() || (TridionUtils.getSessionPreviewToken() == null && cache != null)) { CacheElement<T> currentElement = cache.get(key); if (currentElement == null) { currentElement = new CacheElementImpl<>(null, true); } return currentElement; } else { LOG.debug("Disable cache for Preview Session Token: {}", TridionUtils.getSessionPreviewToken()); return new CacheElementImpl<T>((T) null, true); } }
@Override public void addDependency(String cacheKey, String dependencyKey) { if (!isEnabled()) { return; if (dependencyElement != null) { cacheSet = ((CacheElement<ConcurrentSkipListSet<String>>) dependencyElement.getObjectValue()).getPayload(); setNotExpired(dependencyElement);
private void setNotExpired(Element dependentElement) { if (dependentElement == null) { return; } CacheElement cacheElement = (CacheElement) dependentElement.getObjectValue(); if (cacheElement.isExpired()) { cacheElement.setExpired(false); updateTTL(dependentElement); } }
@Override protected <T> void storeElement(final String key, final CacheElement<T> cacheElement) { if (!isEnabled()) { return; } if (cache.containsKey(key)) { cache.replace(key, cacheElement); LOG.debug("Replaced item with key:{} in cache.", key); } else { cache.put(key, cacheElement); LOG.debug("Added item with key:{} in cache.", key); } }
@Override protected <T> void storeElement(final String key, CacheElement<T> cacheElement) { if (!isEnabled()) { return; } final Element element = new Element(key, cacheElement); element.setTimeToLive(cacheTTL); if (cache.isKeyInCache(key)) { cache.replace(element); } else { cache.put(element); } }