aplcache

Details

diff --git a/src/main/java/br/ufrgs/inf/prosoft/aplcache/caching/APLCache.java b/src/main/java/br/ufrgs/inf/prosoft/aplcache/caching/APLCache.java
index 2cf1c2b..4a01bca 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/aplcache/caching/APLCache.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/aplcache/caching/APLCache.java
@@ -5,6 +5,7 @@
  */
 package br.ufrgs.inf.prosoft.aplcache.caching;
 
+import br.ufrgs.inf.prosoft.cache.KeyNotFoundException;
 import br.ufrgs.inf.prosoft.cache.MultiCache;
 import br.ufrgs.inf.prosoft.jsonserialiser.JSONSerialiser;
 import com.google.gson.JsonObject;
@@ -17,7 +18,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Optional;
 import java.util.function.Supplier;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -35,7 +35,7 @@ public class APLCache<V> {
     private static String APLCACHE_CACHEABLE_PARAMETERS = System.getenv("APLCACHE_CACHEABLE_PARAMETERS");
     private static final Map<String, Collection<String>> APLCACHE_METHOD_HAS_CACHEABLE_PARAMETERS = new HashMap<>();
     private static final String APLCACHE_LOG = System.getenv("APLCACHE_LOG");
-    private final MultiCache<String, Optional<V>> multiCache;
+    private final MultiCache<String, V> multiCache;
 
     public APLCache() {
         this.multiCache = new MultiCache<>();
@@ -139,16 +139,15 @@ public class APLCache<V> {
         String serialisedParameters = Stream.of(parameters).map(JSONSerialiser::serialise)
                 .collect(Collectors.joining(",", "[", "]"));
         synchronized (serialisedParameters) {
-            Optional<V> optional = this.multiCache.get(serialisedParameters);
-            if (optional != null) {
-                return optional.orElse(null);
+            try {
+                return this.multiCache.get(serialisedParameters);
+            } catch (KeyNotFoundException ex) {
+                V get = supplier.get();
+                if (isCacheable(methodName, serialisedParameters)) {
+                    this.multiCache.put(serialisedParameters, get, timeToLive);
+                }
+                return get;
             }
-            V get = supplier.get();
-            optional = Optional.ofNullable(get);
-            if (isCacheable(methodName, serialisedParameters)) {
-                this.multiCache.put(serialisedParameters, optional, timeToLive);
-            }
-            return get;
         }
     }
 
@@ -165,16 +164,15 @@ public class APLCache<V> {
         String serialisedParameters = Stream.of(parameters).map(JSONSerialiser::serialise)
                 .collect(Collectors.joining(",", "[", "]"));
         synchronized (serialisedParameters) {
-            Optional<V> optional = this.multiCache.get(serialisedParameters);
-            if (optional != null) {
-                return optional.orElse(null);
-            }
-            V get = supplier.get();
-            optional = Optional.ofNullable(get);
-            if (isCacheable(methodName, serialisedParameters)) {
-                this.multiCache.put(serialisedParameters, optional);
+            try {
+                return this.multiCache.get(serialisedParameters);
+            } catch (KeyNotFoundException ex) {
+                V get = supplier.get();
+                if (isCacheable(methodName, serialisedParameters)) {
+                    this.multiCache.put(serialisedParameters, get);
+                }
+                return get;
             }
-            return get;
         }
     }