@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 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 <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 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); }
@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 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); } }