adaptive-caching-framework

improving comparison for keys

11/22/2017 5:07:47 PM

Changes

Details

diff --git a/evaluation/Applications/AP/CloudStore/src/main/java/eu/cloudscale/showcase/Configuration.java b/evaluation/Applications/AP/CloudStore/src/main/java/eu/cloudscale/showcase/Configuration.java
index d5c8885..fc0a6c5 100644
--- a/evaluation/Applications/AP/CloudStore/src/main/java/eu/cloudscale/showcase/Configuration.java
+++ b/evaluation/Applications/AP/CloudStore/src/main/java/eu/cloudscale/showcase/Configuration.java
@@ -6,10 +6,9 @@ import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Cache
 import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Modelling;
 import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.RepositoryType;
 
-//working config: memory, fullexploration
 @AdaptiveCaching(cacheProvider = CacheProviderType.EHCACHE, logRepository = RepositoryType.MEMORY,
         modelling = Modelling.FULLEXPLORATION, analyzerEnabled = true, enabled = true, disableMonitoringAfterAnalysis = true,
-        clearMonitoringDataOnStart = true, traceAsync = false, tracerEnabled = true, analyzeOnce = true)
-@ComponentScan(allowed = "eu.cloudscale.showcase", denied = "eu.cloudscale.showcase.db.model")
+        clearMonitoringDataOnStart = true, traceAsync = false, tracerEnabled = true, analyzeOnce = true, expiryInterval = 86400)
+@ComponentScan(allowed = "eu.cloudscale.showcase", denied = {"eu.cloudscale.showcase.db.model", "eu.cloudscale.showcase.servlets", "eu.cloudscale.showcase.db.dao.hibernate"})
 public class Configuration {
 }
diff --git a/evaluation/Applications/AP/shopizer/sm-shop/src/main/java/com/salesmanager/web/Configuration.java b/evaluation/Applications/AP/shopizer/sm-shop/src/main/java/com/salesmanager/web/Configuration.java
index 70bb622..9ca4a91 100644
--- a/evaluation/Applications/AP/shopizer/sm-shop/src/main/java/com/salesmanager/web/Configuration.java
+++ b/evaluation/Applications/AP/shopizer/sm-shop/src/main/java/com/salesmanager/web/Configuration.java
@@ -6,10 +6,8 @@ import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Cache
 import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Modelling;
 import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.RepositoryType;
 
-//working config: mongo, full exploration
 @AdaptiveCaching(cacheProvider = CacheProviderType.EHCACHE, logRepository = RepositoryType.MEMORY,
-        modelling = Modelling.FULLEXPLORATION, analyzerEnabled = true, enabled = true, disableMonitoringAfterAnalysis = true,
-        clearMonitoringDataOnStart = true, traceAsync = false, tracerEnabled = true)
+        modelling = Modelling.FULLEXPLORATION, analyzerEnabled = true, enabled = true, disableMonitoringAfterAnalysis = true, traceAsync = false, tracerEnabled = true)
 @ComponentScan(allowed = "com.salesmanager", denied = "model")
 public class Configuration {
 }
diff --git a/evaluation/Applications/AP/spring-petclinic/pom.xml b/evaluation/Applications/AP/spring-petclinic/pom.xml
index 18e70c8..06460d6 100644
--- a/evaluation/Applications/AP/spring-petclinic/pom.xml
+++ b/evaluation/Applications/AP/spring-petclinic/pom.xml
@@ -126,15 +126,15 @@
             <artifactId>spring-oxm</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.aspectj</groupId>
-            <artifactId>aspectjrt</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.aspectj</groupId>
-            <artifactId>aspectjweaver</artifactId>
-            <scope>runtime</scope>
-        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>org.aspectj</groupId>-->
+            <!--<artifactId>aspectjrt</artifactId>-->
+        <!--</dependency>-->
+        <!--<dependency>-->
+            <!--<groupId>org.aspectj</groupId>-->
+            <!--<artifactId>aspectjweaver</artifactId>-->
+            <!--<scope>runtime</scope>-->
+        <!--</dependency>-->
 
         <!-- Database connection pool
         See here for more details on commons-dbcp versus tomcat-jdbc:
@@ -231,11 +231,6 @@
             <artifactId>autonomicmanager</artifactId>
             <version>0.5.0-SNAPSHOT</version>
         </dependency>
-        <dependency>
-            <groupId>org.mongodb</groupId>
-            <artifactId>mongo-java-driver</artifactId>
-            <version>[3.2.2]</version>
-        </dependency>
     </dependencies>
 
     <!-- Maven plugin versions are mentioned in order to guarantee the build reproducibility in the long term -->
@@ -302,7 +297,6 @@
                 <version>2.2</version>
                 <configuration>
                     <server>tomcat-development-server</server>
-                    <port>9966</port>
                     <path>/petclinic</path>
                     <systemProperties>
                         <JAVA_OPTS>-Xms1024m -Xmx2048m</JAVA_OPTS>
@@ -353,7 +347,7 @@
                     <dependency>
                         <groupId>org.aspectj</groupId>
                         <artifactId>aspectjtools</artifactId>
-                        <version>1.8.10</version>
+                        <version>1.8.9</version>
                     </dependency>
                 </dependencies>
             </plugin>
diff --git a/evaluation/Applications/AP/spring-petclinic/spring-petclinic.iml b/evaluation/Applications/AP/spring-petclinic/spring-petclinic.iml
index 0eeb2c9..a14afec 100644
--- a/evaluation/Applications/AP/spring-petclinic/spring-petclinic.iml
+++ b/evaluation/Applications/AP/spring-petclinic/spring-petclinic.iml
@@ -36,6 +36,7 @@
     <orderEntry type="library" name="Maven: org.springframework:spring-tx:4.2.8.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-beans:4.2.8.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-core:4.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjrt:1.8.9" level="project" />
     <orderEntry type="library" scope="RUNTIME" name="Maven: org.slf4j:jcl-over-slf4j:1.7.21" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.data:spring-data-jdbc-core:1.1.0.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.1.3.RELEASE" level="project" />
@@ -45,8 +46,6 @@
     <orderEntry type="library" name="Maven: org.springframework:spring-web:4.2.8.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-context-support:4.2.8.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-oxm:4.2.8.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.aspectj:aspectjrt:1.8.9" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.aspectj:aspectjweaver:1.8.9" level="project" />
     <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.tomcat:tomcat-jdbc:8.0.37" level="project" />
     <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.tomcat:tomcat-juli:8.0.37" level="project" />
     <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.21" level="project" />
@@ -82,9 +81,11 @@
     <orderEntry type="library" name="Maven: br.ufrgs.inf.prosoft.adaptivecaching:autonomicmanager:0.5.0-SNAPSHOT" level="project" />
     <orderEntry type="library" name="Maven: org.reflections:reflections:0.9.10" level="project" />
     <orderEntry type="library" name="Maven: com.google.code.findbugs:annotations:2.0.1" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.8.9" level="project" />
     <orderEntry type="library" name="Maven: org.ehcache:sizeof:0.3.0" level="project" />
     <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.3.2" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-hibernate4:2.6.7" level="project" />
+    <orderEntry type="library" name="Maven: org.mongodb:mongo-java-driver:2.13.3" level="project" />
     <orderEntry type="library" name="Maven: org.redisson:redisson:3.1.0" level="project" />
     <orderEntry type="library" name="Maven: javax.cache:cache-api:1.0.0" level="project" />
     <orderEntry type="library" name="Maven: io.netty:netty-common:4.0.42.Final" level="project" />
@@ -110,7 +111,6 @@
     <orderEntry type="library" name="Maven: com.esotericsoftware:reflectasm:1.10.1" level="project" />
     <orderEntry type="library" name="Maven: org.ow2.asm:asm:5.0.3" level="project" />
     <orderEntry type="library" name="Maven: com.esotericsoftware:minlog:1.3.0" level="project" />
-    <orderEntry type="library" name="Maven: org.mongodb:mongo-java-driver:3.2.2" level="project" />
     <orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:5.1.36" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/evaluation/Applications/AP/spring-petclinic/src/main/java/org/springframework/samples/petclinic/Configuration.java b/evaluation/Applications/AP/spring-petclinic/src/main/java/org/springframework/samples/petclinic/Configuration.java
index 9da18c7..082f6a4 100644
--- a/evaluation/Applications/AP/spring-petclinic/src/main/java/org/springframework/samples/petclinic/Configuration.java
+++ b/evaluation/Applications/AP/spring-petclinic/src/main/java/org/springframework/samples/petclinic/Configuration.java
@@ -6,10 +6,9 @@ import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Cache
 import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Modelling;
 import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.RepositoryType;
 
-//working config: mongodb, accumulation
 @AdaptiveCaching(cacheProvider = CacheProviderType.EHCACHE, logRepository = RepositoryType.MEMORY,
-    modelling = Modelling.ACCUMULATION, analyzerEnabled = false, enabled = true, disableMonitoringAfterAnalysis = true,
-    clearMonitoringDataOnStart = true, traceAsync = false, tracerEnabled = true)
+    modelling = Modelling.FULLEXPLORATION, analyzerEnabled = true, enabled = true, disableMonitoringAfterAnalysis = true,
+    clearMonitoringDataOnStart = true, traceAsync = false, tracerEnabled = true, analyzeOnce = true, expiryInterval = 60)
 
 //Jhonny: workaround below. a better solution involve filter by serialization methods in aspect to avoid it
 @ComponentScan(allowed = "org.springframework.samples.petclinic", denied = "org.springframework.samples.petclinic.model")
diff --git a/evaluation/Applications/DEV/spring-petclinic/pom.xml b/evaluation/Applications/DEV/spring-petclinic/pom.xml
index 6fc28c4..f641aaf 100644
--- a/evaluation/Applications/DEV/spring-petclinic/pom.xml
+++ b/evaluation/Applications/DEV/spring-petclinic/pom.xml
@@ -282,7 +282,6 @@
                 <version>2.2</version>
                 <configuration>
                     <server>tomcat-development-server</server>
-                    <port>9966</port>
                     <path>/petclinic</path>
                     <systemProperties>
                         <JAVA_OPTS>-Xms1024m -Xmx2048m</JAVA_OPTS>
diff --git a/evaluation/Applications/NO/spring-petclinic/pom.xml b/evaluation/Applications/NO/spring-petclinic/pom.xml
index fbe37fd..2b0e77a 100644
--- a/evaluation/Applications/NO/spring-petclinic/pom.xml
+++ b/evaluation/Applications/NO/spring-petclinic/pom.xml
@@ -282,7 +282,6 @@
                 <version>2.2</version>
                 <configuration>
                     <server>tomcat-development-server</server>
-                    <port>9966</port>
                     <path>/petclinic</path>
                     <systemProperties>
                         <JAVA_OPTS>-Xms1024m -Xmx2048m</JAVA_OPTS>
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/FlowchartWorkFlow.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/FlowchartWorkFlow.java
index cb2422b..da570b7 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/FlowchartWorkFlow.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/FlowchartWorkFlow.java
@@ -9,6 +9,7 @@ import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.application.aspects.Trace
 import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.application.metadata.LogTrace;
 import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.application.metadata.MethodInfo;
 import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.cache.CacheInfo;
+import org.apache.commons.lang3.builder.EqualsBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -33,10 +34,12 @@ public class FlowchartWorkFlow implements Processer {
     private double sumHitRatio;
     private double sumExecutionTime;
     private double sumShareability;
+    private double sumFrequency;
     private List<Double> hitRatios = new ArrayList<>();
     private List<Double> missRatios = new ArrayList<>();
     private List<Long> executionTimes = new ArrayList<>();
     private List<Double> shareabilities = new ArrayList<>();
+    private List<Long> frequencies = new ArrayList<>();
 
     public FlowchartWorkFlow(CacheDecider decider, CacheInfo cacheInfo, List<LogTrace> logList) {
         this.decider = decider;
@@ -63,6 +66,7 @@ public class FlowchartWorkFlow implements Processer {
         logger.debug("StdDv HitRatio: " + getStdDevHitRatio());
         logger.debug("StdDv MissRatio: " + getStdDevMissRatio());
         logger.debug("StdDv shareability: " + getStdDevShareability());
+        logger.debug("StdDv frequency: " + getStdDevFrequency());
 
         int k = 0;
         logger.debug("Using " + k + " stdDev to calculate thresholds...");
@@ -70,6 +74,7 @@ public class FlowchartWorkFlow implements Processer {
         logger.debug("Threshold HitRatio: " + hitThreshold(k));
         logger.debug("Threshold MissRatio: " + missThreshold(k));
         logger.debug("Threshold Shareability: " + shareabilityThreshold(k));
+        logger.debug("Threshold frequency: " + frequencyThreshold(k));
     }
 
 
@@ -124,31 +129,36 @@ public class FlowchartWorkFlow implements Processer {
         sumHitRatio = 0;
         sumMissRatio = 0;
         sumShareability = 0;
+        sumFrequency = 0;
+
         HashMap<MethodInfo, MethodStats> methodInfoMap = new HashMap<>();
 
         for (int i = 0; i < logs.size(); i++) {
             LogTrace logTrace = logs.get(i);
 
-            if (methodInfoMap.get(logTrace.getMethodInfo()) != null)
+            if (methodInfoMap.containsKey(logTrace.getMethodInfo()))
                 continue;
 
             MethodStats methodStats = new MethodStats(logTrace);
 
-            for (int j = i + 1; j < logs.size(); j++) {
+            for (int j = 0; j < logs.size(); j++) {
                 LogTrace traceCompare = logs.get(j);
 
+                if(i == j)
+                    continue;
+
                 //if similar methods: same signature and params, different return
 //                if(logTrace.getMethodInfo().getHashedArguments())
-
                 if (traceCompare.getMethodInfo().equalsWithoutReturnedValue(logTrace.getMethodInfo())
 //                      || traceCompare.getMethodInfo().equalsHashedWithoutReturnedValue(logTrace.getMethodInfo())
                         ) {
 
                     //if identical methods
-                    if (Objects.deepEquals(traceCompare.getMethodInfo().getReturnedValue(), logTrace.getMethodInfo().getReturnedValue())
+                    if (EqualsBuilder.reflectionEquals(traceCompare.getMethodInfo().getReturnedValue(), logTrace.getMethodInfo().getReturnedValue())
 //                            || Objects.equals(traceCompare.getMethodInfo().getHashedReturnedValue(), logTrace.getMethodInfo().getHashedReturnedValue())
 )
                         methodStats.addSameOccurrence(traceCompare);
+
                     else methodStats.addDifferentReturnOccurrence();
                 }
             }
@@ -166,6 +176,9 @@ public class FlowchartWorkFlow implements Processer {
 
             sumShareability += methodStats.shareability();
             shareabilities.add(methodStats.shareability());
+
+            sumFrequency += methodStats.getNumberOfSameOccurrences();
+            frequencies.add(methodStats.getNumberOfSameOccurrences());
         }
 
         return methodInfoMap;
@@ -219,6 +232,15 @@ public class FlowchartWorkFlow implements Processer {
         return Math.sqrt(temp / population);
     }
 
+    public double getStdDevFrequency() {
+        //todo salvar em mémoria e não ficar recalculando
+        double mean = getAverageFrequency();
+        double temp = 0;
+        for (Long a : frequencies)
+            temp += (a - mean) * (a - mean);
+        return Math.sqrt(temp / population);
+    }
+
     public double getStdDevShareability() {
         //todo salvar em mémoria e não ficar recalculando
         double mean = getAverageShareability();
@@ -251,6 +273,11 @@ public class FlowchartWorkFlow implements Processer {
         return getAverageShareability() + (kStdDev * getStdDevShareability());
     }
 
+    //getting X% most frenquent
+    public double frequencyThreshold(int kStdDev) {
+        return getAverageFrequency() + (kStdDev * getStdDevFrequency());
+    }
+
     /**
      * General miss ratio from a signature
      *
@@ -287,4 +314,7 @@ public class FlowchartWorkFlow implements Processer {
         return occurrences / methods;
     }
 
+    public double getAverageFrequency() {
+        return new BigDecimal(sumFrequency).divide(new BigDecimal(frequencies.size()), 5, RoundingMode.HALF_UP).doubleValue();
+    }
 }
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/stats/CacheabilityMetrics.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/stats/CacheabilityMetrics.java
index 2fe1e85..d873dd8 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/stats/CacheabilityMetrics.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/stats/CacheabilityMetrics.java
@@ -32,7 +32,6 @@ public class CacheabilityMetrics {
         long n = (long) ((N * Math.pow(Z, 2) * p * (1 - p)) /
                 ((N - 1) * Math.pow(e, 2) + Math.pow(Z, 2) * p * (1 - p)));
 
-
         //simplified without the population
         //int nn = (int) ((Math.pow(Z,2) * p * (1-p)) / Math.pow(e,2));
         return n;
@@ -41,11 +40,13 @@ public class CacheabilityMetrics {
     public static Optional<Boolean> isStaticData(MethodStats methodStats, FlowchartWorkFlow workflow, int population) {
 
         //executions of a method should represent a good portion of total logs in order to avoid 1 occur == 100% hit
-        if (!(methodStats.getNumberOfSameOccurrences() >= sampleSize(methodStats.getNumberOfOccurrences(), 1.645, 0.05)
-                && methodStats.getNumberOfOccurrences() >= sampleSize(population, 1.645, 0.05))) {
+//        if (!(methodStats.getNumberOfSameOccurrences() >= sampleSize(methodStats.getNumberOfOccurrences(), 1.645, 0.05)
+//                && methodStats.getNumberOfOccurrences() >= sampleSize(population, 1.645, 0.05))) {
+//            return Optional.empty();
+//        }
+        if (methodStats.getNumberOfSameOccurrences() < workflow.frequencyThreshold(0)) {
             return Optional.empty();
         }
-
         if (methodStats.hitRatio() == 100.0)
             return Optional.of(true);
         else
@@ -63,9 +64,10 @@ public class CacheabilityMetrics {
     public static Optional<Boolean> usedByManyRequests(MethodStats methodStats, FlowchartWorkFlow workflow, int population) {
 
         //same executions of a method should represent a good portion of total execution of such method
-        if (methodStats.getNumberOfOccurrences() >= sampleSize(population, 2.575, 0.03)) {
+        if (methodStats.getNumberOfSameOccurrences() >= workflow.frequencyThreshold(0)) {
+//        if (methodStats.getNumberOfOccurrences() >= sampleSize(population, 1.645, 0.05)) {
             return Optional.of(true);
-        } else return Optional.empty();
+        } else return Optional.of(false);
     }
 
     public static Optional<Boolean> isUserSpecific(MethodStats methodStats, FlowchartWorkFlow workflow) {
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/cacher/key/Key.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/cacher/key/Key.java
index 9968d91..5b26f03 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/cacher/key/Key.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/cacher/key/Key.java
@@ -9,24 +9,13 @@ import org.slf4j.LoggerFactory;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.Arrays;
-import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * Key of a callable target.
- *
- * @checkstyle DesignForExtensionCheck (2 lines)
  */
 public class Key {
 
     /**
-     * When instantiated.
-     */
-    private final transient long start;
-    /**
-     * How many times the key was already accessed.
-     */
-    private final transient AtomicInteger accessed;
-    /**
      * MethodInfo.
      */
     private final transient Method method;
@@ -52,8 +41,6 @@ public class Key {
      * @param point Joint point
      */
     public Key(final JoinPoint point) {
-        this.start = System.currentTimeMillis();
-        this.accessed = new AtomicInteger();
         this.method = MethodSignature.class
                 .cast(point.getSignature()).getMethod();
         this.target = Key.targetize(point);
@@ -99,9 +86,7 @@ public class Key {
     @Override
     public String toString() {
         return "Key{" +
-                "start=" + start +
-                ", accessed=" + accessed +
-                ", method=" + method +
+                "method=" + method +
                 ", target=" + target +
                 ", arguments=" + Arrays.toString(arguments) +
                 '}';
@@ -113,14 +98,29 @@ public class Key {
     }
 
     @Override
+//    public final boolean equals(final Object obj) {
+//        final boolean equals;
+//        if (this == obj) {
+//            equals = true;
+//        } else if (obj instanceof Key) {
+//            final Key key = Key.class.cast(obj);
+//            equals = key.method.equals(this.method)
+//                    && this.target.equals(key.target)
+//                    && Arrays.deepEquals(key.arguments, this.arguments);
+//        } else {
+//            equals = false;
+//        }
+//        return equals;
+//    }
     public final boolean equals(final Object obj) {
+
         final boolean equals;
         if (this == obj) {
             equals = true;
         } else if (obj instanceof Key) {
             final Key key = Key.class.cast(obj);
             equals = key.method.equals(this.method)
-                    && this.target.equals(key.target)
+                    //&& this.target.equals(key.target)
                     && Arrays.deepEquals(key.arguments, this.arguments);
         } else {
             equals = false;
@@ -136,15 +136,12 @@ public class Key {
      * @checkstyle DesignForExtensionCheck (2 lines)
      */
     public Object through(final Object result) {
-        final int hit = this.accessed.getAndIncrement();
         final Class<?> type = this.method.getDeclaringClass();
 //        if (hit > 0 && LogHelper.enabled(this.level, type)) {
         logger.debug(
                 "%s: %s from model (hit #%d, %[ms]s old)",
                 this,
-                Mnemos.toText(result, true, false),
-                hit,
-                System.currentTimeMillis() - this.start
+                Mnemos.toText(result, true, false)
         );
 //        }
         return result;
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/configuration/annotation/AdaptiveCaching.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/configuration/annotation/AdaptiveCaching.java
index 186428d..339e18a 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/configuration/annotation/AdaptiveCaching.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/configuration/annotation/AdaptiveCaching.java
@@ -24,7 +24,7 @@ public @interface AdaptiveCaching {
     Modelling modelling() default Modelling.ACCUMULATION;
 
     long expiryInterval() default 300000; //5 minutes
-    long firstExpiry() default 300000; //5 minutes
+    @Deprecated long firstExpiry() default 300000; //5 minutes
 
     //todo when analysis based on trigger do not make sense to have this, its similar to trigger by time
     @Deprecated long analysisInterval() default 300000; //5 minutes
@@ -32,7 +32,7 @@ public @interface AdaptiveCaching {
 
     TriggerType triggerType() default TriggerType.TIME; //if were not by time, load the class that implements the interface @Trigger
 
-    long triggerTime() default 300000; //in minutes
+    long triggerTime() default 300000; //5 minutes
 
     //enables the analyzer to be executed just once
     boolean analyzeOnce() default false;
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/configuration/interfaces/Trigger.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/configuration/interfaces/Trigger.java
index 92c8a02..256e95a 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/configuration/interfaces/Trigger.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/configuration/interfaces/Trigger.java
@@ -1,4 +1,5 @@
 package br.ufrgs.inf.prosoft.adaptivecaching.configuration.interfaces;
 
+//TODO
 public interface Trigger {
 }
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/aspects/TracerAspect.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/aspects/TracerAspect.java
index 877c53b..4e495e0 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/aspects/TracerAspect.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/aspects/TracerAspect.java
@@ -244,14 +244,12 @@ public class TracerAspect {
         if(!isAllowed(joinPoint))
             return joinPoint.proceed();
 
-        Key key = null;
+        //generate a hash of the method that will be used as: key to cache and compare if the method is allowed or not
+        Key key = new Key(joinPoint);
+        //when method is already cached and obtained from it, no trace will be generated
+        //System.out.println(key + "generated to " + joinPoint.getSignature().toLongString());
 
         if(cacheableMethodKeys.contains(key)) {
-            //generate a hash of the method that will be used as: key to cache and compare if the method is allowed or not
-            key = new Key(joinPoint);
-
-            //when method is already cached and obtained from it, no trace will be generated
-            //System.out.println(key + "generated to " + joinPoint.getSignature().toLongString());
 
             //System.out.println(key + "is a cacheable method");
             return cache(key, joinPoint);
@@ -276,9 +274,6 @@ public class TracerAspect {
         }
 
         if (tracerEnabled) {
-            if(key == null)
-                key = new Key(joinPoint);
-
             trace(key, joinPoint);
         }
 
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/LogTrace.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/LogTrace.java
index 16aa09e..9426aa7 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/LogTrace.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/LogTrace.java
@@ -1,16 +1,12 @@
 package br.ufrgs.inf.prosoft.adaptivecaching.monitoring.application.metadata;
 
-public class LogTrace {
+public class LogTrace{
 
     private MethodInfo methodInfo;
     private long startTime;
     private long endTime;
     private String userId;
 
-    public LogTrace() {
-
-    }
-
     public MethodInfo getMethodInfo() {
         return this.methodInfo;
     }
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/MethodInfo.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/MethodInfo.java
index 18c3c40..1d89e6e 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/MethodInfo.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/MethodInfo.java
@@ -1,6 +1,7 @@
 package br.ufrgs.inf.prosoft.adaptivecaching.monitoring.application.metadata;
 
 import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.cacher.key.Key;
+import org.apache.commons.lang3.builder.EqualsBuilder;
 
 import java.util.Objects;
 
@@ -65,28 +66,31 @@ public class MethodInfo {
     }
 
     public boolean equalsWithoutReturnedValue(Object o) {
+
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
 
         MethodInfo that = (MethodInfo) o;
 
-        if (!signature.equals(that.signature)) return false;
-        if (!Objects.deepEquals(arguments, that.arguments)) return false;
-//        if (!arguments.equals(that.arguments)) return false;
+        if (!EqualsBuilder.reflectionEquals(signature,that.signature)) return false;
+        if (!(Objects.deepEquals(arguments, that.arguments) || EqualsBuilder.reflectionEquals(arguments, that.arguments))) return false;
+
         return true;
+        //return EqualsBuilder.reflectionEquals(this, o, "returnedValue", "key");
     }
 
     @Override
     public boolean equals(Object o) {
+//        return EqualsBuilder.reflectionEquals(this, o, "key");
+
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
 
         MethodInfo that = (MethodInfo) o;
 
-        if (!signature.equals(that.signature)) return false;
-//        if (!arguments.equals(that.arguments)) return false;
-        if (!Objects.deepEquals(arguments, that.arguments)) return false;
-        return returnedValue != null ? Objects.deepEquals(returnedValue, that.returnedValue) : that.returnedValue == null;
+        if (!EqualsBuilder.reflectionEquals(signature,that.signature)) return false;
+        if (!EqualsBuilder.reflectionEquals(arguments, that.arguments)) return false;
+        return EqualsBuilder.reflectionEquals(returnedValue, that.returnedValue) || Objects.deepEquals(returnedValue, that.returnedValue);
     }
 
 //    public boolean equalsHashed(Object o) {
@@ -129,10 +133,9 @@ public class MethodInfo {
 
     @Override
     public int hashCode() {
-        int result = signature.hashCode();
-        result = 31 * result + Objects.hash(arguments);
-        result = 31 * result + (returnedValue != null ? Objects.hash(returnedValue) : 0);
-        return result;
+        //TODO equals is enough to distinghish, not able to get a unique hashcode
+        return 1;
+        //return HashCodeBuilder.reflectionHashCode(this, "key");
     }
 
     public String toString() {
diff --git a/framework/autonomicmanager/src/main/resources/logback.xml b/framework/autonomicmanager/src/main/resources/logback.xml
index e7cfc5b..8a7283d 100644
--- a/framework/autonomicmanager/src/main/resources/logback.xml
+++ b/framework/autonomicmanager/src/main/resources/logback.xml
@@ -26,7 +26,7 @@
         <!--<appender-ref ref="FILE" />-->
     </logger>
 
-    <logger name="br.ufrgs.inf.prosoft.adaptivecaching.analysis" level="info" additivity="false">
+    <logger name="br.ufrgs.inf.prosoft.adaptivecaching.analysis" level="debug" additivity="false">
         <appender-ref ref="STDOUT" />
         <!--<appender-ref ref="FILE" />-->
     </logger>
@@ -43,7 +43,7 @@
     <logger name="org.reflections.Reflections" level="INFO"/>
 
     <!-- By default, the level of the root level is set to DEBUG -->
-    <root level="info">
+    <root level="debug">
         <appender-ref ref="STDOUT"/>
     </root>