package org.gcube.portal.oauth.cache; import java.util.Date; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import org.slf4j.LoggerFactory; /** * This thread cleans a cache by removing expired entries. * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) */ public class CacheCleaner extends Thread { private Map cacheReference; private static final int CHECK_AFTER_MS = 1000 * 60 * 10; private static final org.slf4j.Logger logger = LoggerFactory.getLogger(CacheCleaner.class); /** * Build a cleaner thread. * @param cache */ public CacheCleaner(Map cache) { this.cacheReference = cache; } @Override public void run() { while (!isInterrupted()) { try { sleep(CHECK_AFTER_MS); logger.info("Going to clean up cache and old codes [" + new Date() + "]"); Iterator> iterator = cacheReference.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator .next(); if(CacheBean.isExpired(entry.getValue())){ logger.debug("Removing entry " + entry.getValue()); iterator.remove(); } } logger.info("Going to sleep [" + new Date() + "]"); } catch (InterruptedException e) { logger.warn("Exception was " + e.getMessage()); continue; } } } }