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 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); } }
private void setNotExpired(Element dependentElement) { if (dependentElement == null) { return; } CacheElement cacheElement = (CacheElement) dependentElement.getObjectValue(); if (cacheElement.isExpired()) { cacheElement.setExpired(false); updateTTL(dependentElement); } }
@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); } }
@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 void addDependency(String cacheKey, String dependencyKey) { if (!isEnabled()) { return; if (dependencyElement != null) { cacheSet = ((CacheElement<ConcurrentSkipListSet<String>>) dependencyElement.getObjectValue()).getPayload(); setNotExpired(dependencyElement);
@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); } }