diff --git a/source/net/sourceforge/filebot/Cache.java b/source/net/sourceforge/filebot/Cache.java index 39bc1f04..8e656b0e 100644 --- a/source/net/sourceforge/filebot/Cache.java +++ b/source/net/sourceforge/filebot/Cache.java @@ -1,7 +1,5 @@ - package net.sourceforge.filebot; - import java.io.Serializable; import java.util.Arrays; import java.util.logging.Level; @@ -10,21 +8,18 @@ import java.util.logging.Logger; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; - public class Cache { - + public static Cache getCache(String name) { return new Cache(CacheManager.getInstance().getCache(name)); } - + private final net.sf.ehcache.Cache cache; - - + protected Cache(net.sf.ehcache.Cache cache) { this.cache = cache; } - - + public void put(Object key, Object value) { try { cache.put(new Element(key, value)); @@ -33,13 +28,11 @@ public class Cache { remove(key); // fail-safe } } - - + public Object get(Object key) { return get(key, Object.class); } - - + public T get(Object key, Class type) { try { Element element = cache.get(key); @@ -47,53 +40,53 @@ public class Cache { return type.cast(element.getValue()); } } catch (Exception e) { - Logger.getLogger(Cache.class.getName()).log(Level.WARNING, e.getMessage(), e); + Logger.getLogger(Cache.class.getName()).log(Level.WARNING, e.getMessage()); remove(key); // fail-safe } - + return null; } - - + public void remove(Object key) { try { cache.remove(key); - } catch (Exception e) { - Logger.getLogger(Cache.class.getName()).log(Level.WARNING, e.getMessage(), e); + } catch (Exception e1) { + Logger.getLogger(Cache.class.getName()).log(Level.WARNING, e1.getMessage()); + try { + Logger.getLogger(Cache.class.getName()).log(Level.INFO, "Cached data has become invalid: Clearing cache now"); + cache.removeAll(); + } catch (Exception e2) { + Logger.getLogger(Cache.class.getName()).log(Level.SEVERE, e2.getMessage()); + } } } - - + public static class Key implements Serializable { - + protected Object[] fields; - - + public Key(Object... fields) { this.fields = fields; } - - + @Override public int hashCode() { return Arrays.hashCode(fields); } - - + @Override public boolean equals(Object other) { if (other instanceof Key) { return Arrays.equals(this.fields, ((Key) other).fields); } - + return false; } - - + @Override public String toString() { return Arrays.toString(fields); } } - + }