adaptive-caching-framework

Changes

experiments.sh 42(+27 -15)

framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/cacher/key/generic/SimpleKeyGenerator.java 44(+0 -44)

README.md 34(+17 -17)

Details

diff --git a/evaluation/Applications/AP/CloudStore/pom.xml b/evaluation/Applications/AP/CloudStore/pom.xml
index 43a97fd..145fd8a 100644
--- a/evaluation/Applications/AP/CloudStore/pom.xml
+++ b/evaluation/Applications/AP/CloudStore/pom.xml
@@ -185,7 +185,7 @@
         <dependency>
             <groupId>br.ufrgs.inf.prosoft.adaptivecaching</groupId>
             <artifactId>autonomicmanager</artifactId>
-            <version>0.3.0-SNAPSHOT</version>
+            <version>0.5.0-SNAPSHOT</version>
         </dependency>
     </dependencies>
     <build>
diff --git a/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/country/model/Country.java b/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/country/model/Country.java
index 6be29db..bbb1890 100755
--- a/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/country/model/Country.java
+++ b/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/country/model/Country.java
@@ -1,30 +1,17 @@
 package com.salesmanager.core.business.reference.country.model;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.persistence.Cacheable;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-import javax.persistence.Transient;
-
 import com.salesmanager.core.business.generic.model.SalesManagerEntity;
 import com.salesmanager.core.business.reference.geozone.model.GeoZone;
 import com.salesmanager.core.business.reference.zone.model.Zone;
 import com.salesmanager.core.constants.SchemaConstant;
 
+import javax.persistence.*;
+import java.util.ArrayList;
+import java.util.List;
+
 @Entity
 @Table(name = "COUNTRY", schema=SchemaConstant.SALESMANAGER_SCHEMA)
-@Cacheable
+//@Cacheable
 public class Country extends SalesManagerEntity<Integer, Country> {
 	private static final long serialVersionUID = -7388011537255588035L;
 
diff --git a/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/currency/model/Currency.java b/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/currency/model/Currency.java
index 0e1912c..a2c3136 100755
--- a/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/currency/model/Currency.java
+++ b/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/currency/model/Currency.java
@@ -1,22 +1,14 @@
 package com.salesmanager.core.business.reference.currency.model;
 
-import java.io.Serializable;
-
-import javax.persistence.Cacheable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-
 import com.salesmanager.core.business.generic.model.SalesManagerEntity;
 import com.salesmanager.core.constants.SchemaConstant;
 
+import javax.persistence.*;
+import java.io.Serializable;
+
 @Entity
 @Table(name = "CURRENCY", schema = SchemaConstant.SALESMANAGER_SCHEMA)
-@Cacheable
+//@Cacheable
 public class Currency extends SalesManagerEntity<Long, Currency> implements Serializable {
 	private static final long serialVersionUID = -999926410367685145L;
 	
diff --git a/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/language/model/Language.java b/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/language/model/Language.java
index d359f59..7850dee 100755
--- a/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/language/model/Language.java
+++ b/evaluation/Applications/AP/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/language/model/Language.java
@@ -1,21 +1,5 @@
 package com.salesmanager.core.business.reference.language.model;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.persistence.Cacheable;
-import javax.persistence.Column;
-import javax.persistence.Embedded;
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-
 import com.salesmanager.core.business.common.model.audit.AuditListener;
 import com.salesmanager.core.business.common.model.audit.AuditSection;
 import com.salesmanager.core.business.common.model.audit.Auditable;
@@ -23,10 +7,14 @@ import com.salesmanager.core.business.generic.model.SalesManagerEntity;
 import com.salesmanager.core.business.merchant.model.MerchantStore;
 import com.salesmanager.core.constants.SchemaConstant;
 
+import javax.persistence.*;
+import java.util.ArrayList;
+import java.util.List;
+
 @Entity
 @EntityListeners(value = AuditListener.class)
 @Table(name = "LANGUAGE", schema=SchemaConstant.SALESMANAGER_SCHEMA)
-@Cacheable
+//@Cacheable
 public class Language extends SalesManagerEntity<Integer, Language> implements Auditable {
 	private static final long serialVersionUID = -7676627812941330669L;
 	
diff --git a/evaluation/Applications/AP/shopizer/sm-shop/pom.xml b/evaluation/Applications/AP/shopizer/sm-shop/pom.xml
index e5741d2..96fbd23 100755
--- a/evaluation/Applications/AP/shopizer/sm-shop/pom.xml
+++ b/evaluation/Applications/AP/shopizer/sm-shop/pom.xml
@@ -361,7 +361,7 @@
         <dependency>
             <groupId>br.ufrgs.inf.prosoft.adaptivecaching</groupId>
             <artifactId>autonomicmanager</artifactId>
-            <version>0.3.0-SNAPSHOT</version>
+            <version>0.5.0-SNAPSHOT</version>
         </dependency>
 
         <dependency>
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 e4a4a37..70bb622 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
@@ -10,6 +10,6 @@ import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Repos
 @AdaptiveCaching(cacheProvider = CacheProviderType.EHCACHE, logRepository = RepositoryType.MEMORY,
         modelling = Modelling.FULLEXPLORATION, analyzerEnabled = true, enabled = true, disableMonitoringAfterAnalysis = true,
         clearMonitoringDataOnStart = true, traceAsync = false, tracerEnabled = true)
-@ComponentScan(allowed = "com.salesmanager", denied = "modelasdasd21323asd")
+@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 e554c95..18e70c8 100644
--- a/evaluation/Applications/AP/spring-petclinic/pom.xml
+++ b/evaluation/Applications/AP/spring-petclinic/pom.xml
@@ -229,7 +229,7 @@
         <dependency>
             <groupId>br.ufrgs.inf.prosoft.adaptivecaching</groupId>
             <artifactId>autonomicmanager</artifactId>
-            <version>0.4.0-SNAPSHOT</version>
+            <version>0.5.0-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>org.mongodb</groupId>
diff --git a/evaluation/Applications/AP/spring-petclinic/spring-petclinic.iml b/evaluation/Applications/AP/spring-petclinic/spring-petclinic.iml
index 1be412a..0eeb2c9 100644
--- a/evaluation/Applications/AP/spring-petclinic/spring-petclinic.iml
+++ b/evaluation/Applications/AP/spring-petclinic/spring-petclinic.iml
@@ -1,30 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="jetty-web.xml" url="file://$MODULE_DIR$/src/main/webapp/WEB-INF/jetty-web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="AspectJ" name="AspectJ">
-      <configuration>
-        <option name="aspectPath">
-          <module>
-            <option name="name" value="autonomicmanager" />
-          </module>
-        </option>
-      </configuration>
-    </facet>
-  </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="false">
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
@@ -104,7 +79,7 @@
     <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.1" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-all:1.3" level="project" />
     <orderEntry type="library" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
-    <orderEntry type="module" module-name="autonomicmanager" />
+    <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.ehcache:sizeof:0.3.0" level="project" />
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 c41b705..9da18c7 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
@@ -7,7 +7,7 @@ import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Model
 import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.RepositoryType;
 
 //working config: mongodb, accumulation
-@AdaptiveCaching(cacheProvider = CacheProviderType.EHCACHE, logRepository = RepositoryType.MONGODB,
+@AdaptiveCaching(cacheProvider = CacheProviderType.EHCACHE, logRepository = RepositoryType.MEMORY,
     modelling = Modelling.ACCUMULATION, analyzerEnabled = false, enabled = true, disableMonitoringAfterAnalysis = true,
     clearMonitoringDataOnStart = true, traceAsync = false, tracerEnabled = true)
 
diff --git a/evaluation/Applications/DEV/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/merchant/model/MerchantStore.java b/evaluation/Applications/DEV/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/merchant/model/MerchantStore.java
index 35e77dd..0bcf5f4 100755
--- a/evaluation/Applications/DEV/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/merchant/model/MerchantStore.java
+++ b/evaluation/Applications/DEV/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/merchant/model/MerchantStore.java
@@ -1,29 +1,5 @@
 package com.salesmanager.core.business.merchant.model;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.persistence.Transient;
-import javax.validation.constraints.Pattern;
-
-import org.hibernate.validator.constraints.Email;
-import org.hibernate.validator.constraints.NotEmpty;
-
 import com.salesmanager.core.business.generic.model.SalesManagerEntity;
 import com.salesmanager.core.business.reference.country.model.Country;
 import com.salesmanager.core.business.reference.currency.model.Currency;
@@ -32,6 +8,14 @@ import com.salesmanager.core.business.reference.zone.model.Zone;
 import com.salesmanager.core.constants.MeasureUnit;
 import com.salesmanager.core.constants.SchemaConstant;
 import com.salesmanager.core.utils.CloneUtils;
+import org.hibernate.validator.constraints.Email;
+import org.hibernate.validator.constraints.NotEmpty;
+
+import javax.persistence.*;
+import javax.validation.constraints.Pattern;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 @Entity
 @Table(name = "MERCHANT_STORE", schema=SchemaConstant.SALESMANAGER_SCHEMA)
@@ -106,7 +90,7 @@ public class MerchantStore extends SalesManagerEntity<Integer, MerchantStore> {
 	private List<Language> languages = new ArrayList<Language>();
 	
 	@Column(name = "USE_CACHE")
-	private boolean useCache = false;
+	private boolean useCache = true;
 	
 	@Column(name="STORE_TEMPLATE", length=25)
 	private String storeTemplate;
diff --git a/evaluation/Applications/DEV/shopizer/sm-shop/sm-shop.iml b/evaluation/Applications/DEV/shopizer/sm-shop/sm-shop.iml
index b91e59f..c4919f3 100644
--- a/evaluation/Applications/DEV/shopizer/sm-shop/sm-shop.iml
+++ b/evaluation/Applications/DEV/shopizer/sm-shop/sm-shop.iml
@@ -1,30 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="AspectJ" name="AspectJ">
-      <configuration>
-        <option name="aspectPath">
-          <projectLibrary>
-            <option name="name" value="Maven: br.ufrgs.inf.prosoft.adaptivecaching:autonomicmanager:0.3.0-SNAPSHOT" />
-          </projectLibrary>
-        </option>
-      </configuration>
-    </facet>
-    <facet type="web" name="Web">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/src/main/webapp/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-  </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="false">
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
diff --git a/evaluation/Applications/NO/CloudStore/showcase.iml b/evaluation/Applications/NO/CloudStore/showcase.iml
index 85d79a6..152eda5 100644
--- a/evaluation/Applications/NO/CloudStore/showcase.iml
+++ b/evaluation/Applications/NO/CloudStore/showcase.iml
@@ -1,21 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/src/main/webapp/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-  </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
diff --git a/evaluation/Applications/NO/shopizer/sm-core-model/sm-core-model.iml b/evaluation/Applications/NO/shopizer/sm-core-model/sm-core-model.iml
index b62a63b..53f8d13 100644
--- a/evaluation/Applications/NO/shopizer/sm-core-model/sm-core-model.iml
+++ b/evaluation/Applications/NO/shopizer/sm-core-model/sm-core-model.iml
@@ -3,13 +3,9 @@
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="false">
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <exclude-output />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/apt" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/querydsl" isTestSource="false" generated="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target/maven-archiver" />
-      <excludeFolder url="file://$MODULE_DIR$/target/maven-status" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
diff --git a/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/country/model/Country.java b/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/country/model/Country.java
index 6be29db..bbb1890 100755
--- a/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/country/model/Country.java
+++ b/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/country/model/Country.java
@@ -1,30 +1,17 @@
 package com.salesmanager.core.business.reference.country.model;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.persistence.Cacheable;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-import javax.persistence.Transient;
-
 import com.salesmanager.core.business.generic.model.SalesManagerEntity;
 import com.salesmanager.core.business.reference.geozone.model.GeoZone;
 import com.salesmanager.core.business.reference.zone.model.Zone;
 import com.salesmanager.core.constants.SchemaConstant;
 
+import javax.persistence.*;
+import java.util.ArrayList;
+import java.util.List;
+
 @Entity
 @Table(name = "COUNTRY", schema=SchemaConstant.SALESMANAGER_SCHEMA)
-@Cacheable
+//@Cacheable
 public class Country extends SalesManagerEntity<Integer, Country> {
 	private static final long serialVersionUID = -7388011537255588035L;
 
diff --git a/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/currency/model/Currency.java b/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/currency/model/Currency.java
index 0e1912c..a2c3136 100755
--- a/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/currency/model/Currency.java
+++ b/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/currency/model/Currency.java
@@ -1,22 +1,14 @@
 package com.salesmanager.core.business.reference.currency.model;
 
-import java.io.Serializable;
-
-import javax.persistence.Cacheable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-
 import com.salesmanager.core.business.generic.model.SalesManagerEntity;
 import com.salesmanager.core.constants.SchemaConstant;
 
+import javax.persistence.*;
+import java.io.Serializable;
+
 @Entity
 @Table(name = "CURRENCY", schema = SchemaConstant.SALESMANAGER_SCHEMA)
-@Cacheable
+//@Cacheable
 public class Currency extends SalesManagerEntity<Long, Currency> implements Serializable {
 	private static final long serialVersionUID = -999926410367685145L;
 	
diff --git a/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/language/model/Language.java b/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/language/model/Language.java
index d359f59..7850dee 100755
--- a/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/language/model/Language.java
+++ b/evaluation/Applications/NO/shopizer/sm-core-model/src/main/java/com/salesmanager/core/business/reference/language/model/Language.java
@@ -1,21 +1,5 @@
 package com.salesmanager.core.business.reference.language.model;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.persistence.Cacheable;
-import javax.persistence.Column;
-import javax.persistence.Embedded;
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-
 import com.salesmanager.core.business.common.model.audit.AuditListener;
 import com.salesmanager.core.business.common.model.audit.AuditSection;
 import com.salesmanager.core.business.common.model.audit.Auditable;
@@ -23,10 +7,14 @@ import com.salesmanager.core.business.generic.model.SalesManagerEntity;
 import com.salesmanager.core.business.merchant.model.MerchantStore;
 import com.salesmanager.core.constants.SchemaConstant;
 
+import javax.persistence.*;
+import java.util.ArrayList;
+import java.util.List;
+
 @Entity
 @EntityListeners(value = AuditListener.class)
 @Table(name = "LANGUAGE", schema=SchemaConstant.SALESMANAGER_SCHEMA)
-@Cacheable
+//@Cacheable
 public class Language extends SalesManagerEntity<Integer, Language> implements Auditable {
 	private static final long serialVersionUID = -7676627812941330669L;
 	
diff --git a/evaluation/Applications/NO/shopizer/sm-shop/sm-shop.iml b/evaluation/Applications/NO/shopizer/sm-shop/sm-shop.iml
index 63d4fca..4e62059 100644
--- a/evaluation/Applications/NO/shopizer/sm-shop/sm-shop.iml
+++ b/evaluation/Applications/NO/shopizer/sm-shop/sm-shop.iml
@@ -1,30 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="AspectJ" name="AspectJ">
-      <configuration>
-        <option name="aspectPath">
-          <projectLibrary>
-            <option name="name" value="Maven: br.ufrgs.inf.prosoft.adaptivecaching:autonomicmanager:0.3.0-SNAPSHOT" />
-          </projectLibrary>
-        </option>
-      </configuration>
-    </facet>
-    <facet type="web" name="Web">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/src/main/webapp/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-  </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="false">
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
diff --git a/evaluation/JMeter/cloudscale-max.jmx b/evaluation/JMeter/cloudscale-max.jmx
index 69270bf..6cc3dee 100644
--- a/evaluation/JMeter/cloudscale-max.jmx
+++ b/evaluation/JMeter/cloudscale-max.jmx
@@ -96,7 +96,7 @@
         </collectionProp>
       </Arguments>
       <hashTree/>
-      <kg.apc.jmeter.threads.UltimateThreadGroup guiclass="kg.apc.jmeter.threads.UltimateThreadGroupGui" testclass="kg.apc.jmeter.threads.UltimateThreadGroup" testname="jp@gc - Ultimate Thread Group" enabled="true">
+      <kg.apc.jmeter.threads.UltimateThreadGroup guiclass="kg.apc.jmeter.threads.UltimateThreadGroupGui" testclass="kg.apc.jmeter.threads.UltimateThreadGroup" testname="jp@gc - Ultimate Thread Group" enabled="false">
         <collectionProp name="ultimatethreadgroupdata">
           <collectionProp name="1277204053">
             <stringProp name="1537214">2000</stringProp>
@@ -1352,6 +1352,1262 @@ if( ids.size() &gt; 0 )
           </hashTree>
         </hashTree>
       </hashTree>
+      <kg.apc.jmeter.threads.UltimateThreadGroup guiclass="kg.apc.jmeter.threads.UltimateThreadGroupGui" testclass="kg.apc.jmeter.threads.UltimateThreadGroup" testname="Workload forced to cache" enabled="true">
+        <collectionProp name="ultimatethreadgroupdata">
+          <collectionProp name="1277204053">
+            <stringProp name="1537214">2000</stringProp>
+            <stringProp name="48">0</stringProp>
+            <stringProp name="56499">960</stringProp>
+            <stringProp name="48">0</stringProp>
+            <stringProp name="48">0</stringProp>
+          </collectionProp>
+        </collectionProp>
+        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+      </kg.apc.jmeter.threads.UltimateThreadGroup>
+      <hashTree>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] Tresholds" enabled="false">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">int ADMIN_CONFIRM = 0;
+int ADMIN_REQUEST = 1;
+int BEST_SELLERS = 2;
+int BUY_CONFIRM = 3;
+int BUY_REQUEST = 4;
+int CUSTOMER_REGISTRATION = 5;
+int HOME = 6;
+int NEW_PRODUCTS = 7;
+int ORDER_DISPLAY = 8;
+int ORDER_INQUIRY = 9;
+int PRODUCT_DETAIL = 10;
+int SEARCH_REQUEST = 11;
+int SEARCH_RESULTS = 12;
+int SHOPPING_CART = 13;
+
+/*
+ * See http://www.tpc.org/tpcw/spec/tpcw_v16.pdf page 94
+ */
+int[][] tresholdsMatrix = {
+	{0, 0, 0, 0, 0, 0, 9952, 0, 0, 0, 0, 9999, 0, 0},
+	{8999, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0},
+	{0,0,0,0,0, 0, 167, 0,0,0, 472, 9927,0,9999},
+	{0,0,0,0,0, 0, 84, 0,0,0,0,9999,0,0},
+	{0,0,0,4614,0, 0, 6546, 0,0,0,0,0,0,9999},
+	{0,0,0,0,8666, 0, 8760, 0,0,0,0,9999,0,0},
+	{0,0,3124,0,0, 0, 0, 6249,0, 6718,0,7026,0,9999},
+	{0,0,0,0,0, 0, 156, 0,0,0,9735,9784,0,9999},
+	{0,0,0,0,0, 0, 69, 0,0,0,0,9999,0,0},
+	{0,0,0,0,0, 0, 72, 0,8872,0,0,9999,0,0},
+	{0,58,0,0,0, 0, 832, 0,0,0,1288,8603,0,9999},
+	{0,0,0,0,0, 0, 635, 0,0,0,0,0,9135,9999},
+	{0,0,0,0,0, 0, 2657, 0,0,0,9294,9304,0,9999},
+	{0,0,0,0,0, 2585, 9552, 0,0,0,0,0,0,9999},
+};
+
+int nextOperation(int currentOperation)
+{
+	int newOperation = -1;
+	
+	Random rand = new Random();
+	int r = 1 + rand.nextInt(9999);
+	
+	for( int i = 0; i &lt; tresholdsMatrix[currentOperation].length; i++)
+	{
+		int t = tresholdsMatrix[currentOperation][i];
+		if( r &lt;= t)
+			return i;
+	}
+	
+	return newOperation;
+}
+
+previousOperation = vars.get(&quot;OPERATION&quot;);
+newOp = nextOperation(Integer.parseInt(previousOperation));
+vars.put(&quot;OPERATION&quot;, String.valueOf(newOp));</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] ITEM_ID" enabled="true">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import java.util.Random;
+import java.util.ArrayList;
+
+prevTreshold = vars.get(&quot;TRESHOLD&quot;);
+prevSwitchId = vars.get(&quot;SWITCH_ID&quot;);
+numItems = Integer.parseInt(vars.get(&quot;NUM_ITEMS&quot;));
+
+Random rand = new Random();
+item = 1 + rand.nextInt(numItems);
+vars.put(&quot;ITEM_ID&quot;, Integer.toString(item));
+
+treshold = 1+rand.nextInt(numItems);
+vars.put(&quot;TRESHOLD&quot;, Integer.toString(treshold));
+
+//System.out.println(&quot;Treshold1 = &quot; + treshold);
+//System.out.println(&quot;ITEM_ID1 = &quot; + item);
+</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] probability3" enabled="false">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import org.apache.commons.math3.distribution.EnumeratedDistribution;
+import org.apache.commons.math3.util.Pair;
+import java.util.ArrayList;
+
+class Item
+{
+	String operation;
+	double probability;
+	int jmeterIndex;
+	
+	public Item(String operation, double probability, int jmeterIndex)
+	{
+		this.operation = operation;
+		this.probability = probability;
+		this.jmeterIndex = jmeterIndex;
+	}
+}
+
+ArrayList items = new ArrayList(){{
+	add(new Item(&quot;Home&quot;, 29, 7)); 
+	add(new Item(&quot;New products&quot;, 11, 8)); 
+	add(new Item(&quot;Best Sellers&quot;, 11, 3));
+	add(new Item(&quot;Product Detail&quot;, 21, 11)); 
+	add(new Item(&quot;Search Request&quot;, 12, 12));
+	add(new Item(&quot;Search Results&quot;, 11, 13)); 
+	add(new Item(&quot;Shopping Cart&quot;, 1.25, 14));
+	add(new Item(&quot;Customer Registration&quot;, 0.82, 6));
+	add(new Item(&quot;Buy Request&quot;, 0.75, 5));
+	add(new Item(&quot;Buy Confirm&quot;, 0.69, 4));
+	add(new Item(&quot;Order Inquiry&quot;, 0.30, 10));
+	add(new Item(&quot;Order Display&quot;, 0.25, 9));
+	add(new Item(&quot;Admin Request&quot;, 0.10, 2));
+	add(new Item(&quot;Admin Confirm&quot;, 0.09, 1));
+}};
+
+ArrayList itemWeights = new ArrayList();
+for(Item i : items)
+{
+	itemWeights.add(new Pair(i, i.probability));
+}
+
+newOperation = new EnumeratedDistribution(itemWeights).sample();
+
+vars.put(&quot;SWITCH_ID&quot;, String.valueOf(newOperation.jmeterIndex));</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] probability2" enabled="true">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import java.util.Random;
+
+Random rand = vars.getObject(&quot;RANDOM&quot;);
+if(rand == null)
+{
+	rand = new Random();
+	vars.putObject(&quot;RANDOM&quot;, rand);
+}
+
+int[] browsingMix = {
+	2900, //home
+	2100, // product-detail
+	1100, // new-products
+	75, //buy
+	69, // buy-confirm	
+	25, // order-display	
+	9, // admin confirm
+	10, // admin request
+	30, // order-inquiry
+	82, //customer-registration
+	125, // shopping-cart
+	1100, // best-sellers
+	1100, // search-result
+	1200, // search-request
+};
+
+int probSum = 0;
+
+for( int i=0; i &lt; browsingMix.length; i++)
+{
+  probSum += browsingMix[i];
+}
+
+int[] range = new int[2 * browsingMix.length];
+
+for( int i=0; i &lt; browsingMix.length; i++)
+{
+  int sum = 0;
+  for( int j=0; j&lt;i; j++)
+   {
+       sum += browsingMix[j];
+   }
+
+  range[i] = sum;
+  range[i+1] = range[i] + browsingMix[i];
+}
+
+
+int randNum = rand.nextInt(probSum);
+
+for(int i=0; i &lt; browsingMix.length; i++)
+{
+  if( randNum &gt;= range[i] &amp;&amp; randNum &lt; range[i+1] )
+  {
+      vars.put(&quot;SWITCH_ID&quot;, String.valueOf(i));
+      return;
+  }	
+}
+</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] buy-confirm" enabled="true">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import java.util.Random;
+
+Random rand = new Random();
+
+String[] ccTypes = {
+         &quot;Visa&quot;,
+         &quot;MasterCard&quot;,
+         &quot;Discover&quot;,
+         &quot;Amex&quot;,
+         &quot;Diners&quot;
+};
+
+String[] shippingTypes = {
+         &quot;AIR&quot;,
+         &quot;UPS&quot;,
+         &quot;FEDEX&quot;,
+         &quot;SHIP&quot;,
+         &quot;COURIER&quot;,
+         &quot;MAIL&quot;
+};
+
+int min = 0;
+int max = ccTypes.length -1;
+
+ccType = ccTypes[rand.nextInt((max - min) + 1) + min];
+
+max = shippingTypes.length-1;
+
+shipping = shippingTypes[rand.nextInt((max - min) + 1) + min];
+
+vars.put(&quot;RAND_CC_TYPE&quot;, ccType);
+vars.put(&quot;RAND_SHIPPING&quot;, shipping);</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] Random subject" enabled="true">
+          <stringProp name="filename"></stringProp>
+          <stringProp name="parameters"></stringProp>
+          <boolProp name="resetInterpreter">true</boolProp>
+          <stringProp name="script">import java.util.*;
+
+String[] subjects = {
+        &quot;ARTS&quot;,
+        &quot;BIOGRAPHIES&quot;,
+        &quot;BUSINESS&quot;,
+        &quot;CHILDREN&quot;,
+        &quot;COMPUTERS&quot;,
+        &quot;COOKING&quot;,
+        &quot;HEALTH&quot;,
+        &quot;HISTORY&quot;,
+        &quot;HOME&quot;,
+        &quot;HUMOR&quot;,
+        &quot;LITERATURE&quot;,
+        &quot;MYSTERY&quot;,
+        &quot;NON-FICTION&quot;,
+        &quot;PARENTING&quot;,
+        &quot;POLITICS&quot;,
+        &quot;REFERENCE&quot;,
+        &quot;RELIGION&quot;,
+        &quot;ROMANCE&quot;,
+        &quot;SELF-HELP&quot;,
+        &quot;SCIENCE-NATURE&quot;,
+        &quot;SCIENCE-FICTION&quot;,
+        &quot;SPORTS&quot;,
+        &quot;YOUTH&quot;,
+        &quot;TRAVEL&quot;
+    };
+
+min = 0;
+max = subjects.length-1;
+
+Random rand = new Random();
+subject = subjects[rand.nextInt((max - min) + 1) + min];
+
+vars.put(&quot;RAND_SUBJECT&quot;, subject);</stringProp>
+          <stringProp name="TestPlan.comments">Random subject</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] Random searchField" enabled="true">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import java.util.Random;
+
+Random rand = new Random();
+
+String[] searchFields = {
+         &quot;author&quot;,
+         &quot;title&quot;,
+         &quot;subject&quot;
+};
+
+min = 0;
+max = searchFields.length -1;
+
+searchField = searchFields[rand.nextInt((max - min) + 1) + min];
+
+vars.put(&quot;RAND_SEARCHFIELD&quot;, searchField);</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] Random new_price" enabled="true">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import java.util.Random;
+
+Random rand = new Random();
+max = 300;
+min = 10;
+price = rand.nextInt((max - min) + 1) + min;
+
+vars.put(&quot;NEW_PRICE&quot;, Integer.toString(price));</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <SwitchController guiclass="SwitchControllerGui" testclass="SwitchController" testname="Switch Controller" enabled="true">
+          <stringProp name="SwitchController.value">${SWITCH_ID}</stringProp>
+        </SwitchController>
+        <hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/home" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="SHOPPING_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${SHOPPING_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHOPPING_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">true</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/product-detail" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/product-detail" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="I_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${ITEM_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">I_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/product-detail</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/new-products" enabled="true"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/new-products" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="SUBJECT" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_SUBJECT}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SUBJECT</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/new-products</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree>
+              <BeanShellPostProcessor guiclass="TestBeanGUI" testclass="BeanShellPostProcessor" testname="[BeanShell PostProcessor] get ITEM_ID" enabled="true">
+                <stringProp name="filename"></stringProp>
+                <stringProp name="parameters"></stringProp>
+                <boolProp name="resetInterpreter">false</boolProp>
+                <stringProp name="script">import java.util.regex;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.Random;
+import java.util.ArrayList;
+
+String testString = prev.getResponseDataAsString();
+
+String patternString = &quot;product-detail(.+)\\?I_ID=([0-9]+)(.+)&quot;;
+Pattern pattern = Pattern.compile(patternString);
+Matcher matcher = pattern.matcher(testString);
+
+ArrayList ids = new ArrayList();
+
+while(matcher.find())
+{
+	ids.add(matcher.group(2));
+}
+
+Random rand = new Random();
+
+if( ids.size() &gt; 0 )
+{
+	String itemId = String.valueOf(ids.get(rand.nextInt( ids.size() ) ) );
+	vars.put(&quot;ITEM_ID&quot;,  itemId);
+}</stringProp>
+              </BeanShellPostProcessor>
+              <hashTree/>
+            </hashTree>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/buy" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/shopping-cart?I_ID=&amp;QTY=1&amp;ADD_FLAG=Y" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="I_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${ITEM_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">I_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="QTY" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">1</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">QTY</stringProp>
+                  </elementProp>
+                  <elementProp name="ADD_FLAG" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">Y</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">ADD_FLAG</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/shopping-cart</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree>
+              <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor - SHOPPING_ID" enabled="true">
+                <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+                <stringProp name="RegexExtractor.refname">SHOPPING_ID</stringProp>
+                <stringProp name="RegexExtractor.regex">SHOPPING_ID=([0-9]+)</stringProp>
+                <stringProp name="RegexExtractor.template">$1$</stringProp>
+                <stringProp name="RegexExtractor.default">0</stringProp>
+                <stringProp name="RegexExtractor.match_number">0</stringProp>
+              </RegexExtractor>
+              <hashTree/>
+            </hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/buy?RETURNING_FLAG=Y" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="RETURNING_FLAG" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">Y</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">RETURNING_FLAG</stringProp>
+                  </elementProp>
+                  <elementProp name="SHOPPING_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${SHOPPING_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHOPPING_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="username" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__digSyl(${CUSTOMER_ID})}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">username</stringProp>
+                  </elementProp>
+                  <elementProp name="password" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__digSyl(${CUSTOMER_ID})}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">password</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/buy</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">false</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/buy-confirm" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/buy-confirm" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="street1" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">street1</stringProp>
+                  </elementProp>
+                  <elementProp name="street2" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">street2</stringProp>
+                  </elementProp>
+                  <elementProp name="city" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">city</stringProp>
+                  </elementProp>
+                  <elementProp name="state" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">state</stringProp>
+                  </elementProp>
+                  <elementProp name="zip" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">zip</stringProp>
+                  </elementProp>
+                  <elementProp name="country" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">country</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_TYPE" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_CC_TYPE}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_TYPE</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_NAME" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__RandomString(12,qwertyuiopasdfghjklzxcvbnm)}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_NAME</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_NUMBER" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">55555555</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_NUMBER</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_EXPIRY" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">04/01/2017</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_EXPIRY</stringProp>
+                  </elementProp>
+                  <elementProp name="SHIPPING" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_SHIPPING}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHIPPING</stringProp>
+                  </elementProp>
+                  <elementProp name="SHOPPING_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${SHOPPING_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHOPPING_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/buy-confirm</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/payment" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="street1" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">true</boolProp>
+                    <stringProp name="Argument.value">Izanska c. 233</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">street1</stringProp>
+                  </elementProp>
+                  <elementProp name="street2" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">street2</stringProp>
+                  </elementProp>
+                  <elementProp name="city" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">Ljubljana</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">city</stringProp>
+                  </elementProp>
+                  <elementProp name="zip" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">1000</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">zip</stringProp>
+                  </elementProp>
+                  <elementProp name="country" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">Germany</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">country</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_TYPE" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_CC_TYPE}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_TYPE</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_NAME" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">true</boolProp>
+                    <stringProp name="Argument.value">Simon Ivansek</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_NAME</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_NUMBER" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">12345678</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_NUMBER</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_EXPIRY" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">true</boolProp>
+                    <stringProp name="Argument.value">04/03/2014</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_EXPIRY</stringProp>
+                  </elementProp>
+                  <elementProp name="SHIPPING" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_SHIPPING}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHIPPING</stringProp>
+                  </elementProp>
+                  <elementProp name="SHOPPING_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${SHOPPING_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHOPPING_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="distribution" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">expo</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">distribution</stringProp>
+                  </elementProp>
+                  <elementProp name="attr1" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">5</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">attr1</stringProp>
+                  </elementProp>
+                  <elementProp name="attr3" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">2</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">attr3</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/payment</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/order-display" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/order-display" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="username" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__digSyl(${CUSTOMER_ID})}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">username</stringProp>
+                  </elementProp>
+                  <elementProp name="password" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__digSyl(${CUSTOMER_ID})}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">password</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/order-display</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/admin-confirm" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/admin-confirm" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="I_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${ITEM_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">I_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="new_price" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${NEW_PRICE}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">new_price</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/admin-confirm</stringProp>
+              <stringProp name="HTTPSampler.method">POST</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/admin" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/admin" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="I_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${ITEM_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">I_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/admin</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/order-inquiry" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/order-inquiry" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments"/>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/order-inquiry</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/customer-registration" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/customer-registration?SHOPPING_ID=" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="SHOPPING_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${SHOPPING_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHOPPING_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/customer-registration</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/shopping-cart?ADD_FLAG=N" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/shopping-cart?ADD_FLAG=N" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="ADD_FLAG" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">N</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">ADD_FLAG</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/shopping-cart</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree>
+              <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor - SHOPPING_ID" enabled="true">
+                <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+                <stringProp name="RegexExtractor.refname">SHOPPING_ID</stringProp>
+                <stringProp name="RegexExtractor.regex">SHOPPING_ID=([0-9]+)</stringProp>
+                <stringProp name="RegexExtractor.template">$1$</stringProp>
+                <stringProp name="RegexExtractor.default">0</stringProp>
+                <stringProp name="RegexExtractor.match_number">0</stringProp>
+                <stringProp name="Sample.scope">all</stringProp>
+                <stringProp name="Scope.variable">${SHOPPING_ID}</stringProp>
+              </RegexExtractor>
+              <hashTree/>
+            </hashTree>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/best-sellers" enabled="true"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/best-sellers" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="SUBJECT" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_SUBJECT}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SUBJECT</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/best-sellers</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree>
+              <BeanShellPostProcessor guiclass="TestBeanGUI" testclass="BeanShellPostProcessor" testname="[BeanShell PostProcessor] get ITEM_ID" enabled="true">
+                <stringProp name="filename"></stringProp>
+                <stringProp name="parameters"></stringProp>
+                <boolProp name="resetInterpreter">false</boolProp>
+                <stringProp name="script">import java.util.regex;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.Random;
+import java.util.ArrayList;
+
+String testString = prev.getResponseDataAsString();
+
+String patternString = &quot;product-detail(.+)\\?I_ID=([0-9]+)(.+)&quot;;
+Pattern pattern = Pattern.compile(patternString);
+Matcher matcher = pattern.matcher(testString);
+
+ArrayList ids = new ArrayList();
+
+while(matcher.find())
+{
+	ids.add(matcher.group(2));
+}
+
+Random rand = new Random();
+
+if( ids.size() &gt; 0 )
+{
+	String itemId = String.valueOf(ids.get(rand.nextInt( ids.size() ) ) );
+	vars.put(&quot;ITEM_ID&quot;,  itemId);
+}</stringProp>
+              </BeanShellPostProcessor>
+              <hashTree/>
+            </hashTree>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="search( is SHOPPING_ID?)" enabled="true"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/search?searchField=&amp;keyword=&amp;C_ID=" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="searchField" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_SEARCHFIELD}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">searchField</stringProp>
+                  </elementProp>
+                  <elementProp name="keyword" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__getRandomKeyword(${RAND_SEARCHFIELD}, ${NUM_ITEMS})}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">keyword</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/search</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/search" enabled="true"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/search" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments"/>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/search</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">true</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+        </hashTree>
+      </hashTree>
       <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="false">
         <boolProp name="ResultCollector.error_logging">false</boolProp>
         <objProp>
diff --git a/evaluation/JMeter/cloudscale-sustain.jmx b/evaluation/JMeter/cloudscale-sustain.jmx
index be1a4e5..9b9fb2d 100644
--- a/evaluation/JMeter/cloudscale-sustain.jmx
+++ b/evaluation/JMeter/cloudscale-sustain.jmx
@@ -1544,7 +1544,7 @@ vars.put(&quot;RAND_SEARCH_STRING_LENGTH&quot;, Integer.toString(price));</strin
         <boolProp name="exclude_checkbox_state">false</boolProp>
       </kg.apc.jmeter.vizualizers.CorrectedResultCollector>
       <hashTree/>
-      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="false">
         <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
         <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
           <boolProp name="LoopController.continue_forever">false</boolProp>
@@ -2879,6 +2879,1240 @@ vars.put(&quot;RAND_SEARCH_STRING_LENGTH&quot;, Integer.toString(price));</strin
         </kg.apc.jmeter.vizualizers.CorrectedResultCollector>
         <hashTree/>
       </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Workload forced to cache" enabled="true">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">100</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">20</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
+        <longProp name="ThreadGroup.start_time">1479978082000</longProp>
+        <longProp name="ThreadGroup.end_time">1479978082000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] Tresholds" enabled="false">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">int ADMIN_CONFIRM = 0;
+int ADMIN_REQUEST = 1;
+int BEST_SELLERS = 2;
+int BUY_CONFIRM = 3;
+int BUY_REQUEST = 4;
+int CUSTOMER_REGISTRATION = 5;
+int HOME = 6;
+int NEW_PRODUCTS = 7;
+int ORDER_DISPLAY = 8;
+int ORDER_INQUIRY = 9;
+int PRODUCT_DETAIL = 10;
+int SEARCH_REQUEST = 11;
+int SEARCH_RESULTS = 12;
+int SHOPPING_CART = 13;
+
+/*
+ * See http://www.tpc.org/tpcw/spec/tpcw_v16.pdf page 94
+ */
+int[][] tresholdsMatrix = {
+	{0, 0, 0, 0, 0, 0, 9952, 0, 0, 0, 0, 9999, 0, 0},
+	{8999, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0},
+	{0,0,0,0,0, 0, 167, 0,0,0, 472, 9927,0,9999},
+	{0,0,0,0,0, 0, 84, 0,0,0,0,9999,0,0},
+	{0,0,0,4614,0, 0, 6546, 0,0,0,0,0,0,9999},
+	{0,0,0,0,8666, 0, 8760, 0,0,0,0,9999,0,0},
+	{0,0,3124,0,0, 0, 0, 6249,0, 6718,0,7026,0,9999},
+	{0,0,0,0,0, 0, 156, 0,0,0,9735,9784,0,9999},
+	{0,0,0,0,0, 0, 69, 0,0,0,0,9999,0,0},
+	{0,0,0,0,0, 0, 72, 0,8872,0,0,9999,0,0},
+	{0,58,0,0,0, 0, 832, 0,0,0,1288,8603,0,9999},
+	{0,0,0,0,0, 0, 635, 0,0,0,0,0,9135,9999},
+	{0,0,0,0,0, 0, 2657, 0,0,0,9294,9304,0,9999},
+	{0,0,0,0,0, 2585, 9552, 0,0,0,0,0,0,9999},
+};
+
+int nextOperation(int currentOperation)
+{
+	int newOperation = -1;
+	
+	Random rand = new Random();
+	int r = 1 + rand.nextInt(9999);
+	
+	for( int i = 0; i &lt; tresholdsMatrix[currentOperation].length; i++)
+	{
+		int t = tresholdsMatrix[currentOperation][i];
+		if( r &lt;= t)
+			return i;
+	}
+	
+	return newOperation;
+}
+
+previousOperation = vars.get(&quot;OPERATION&quot;);
+newOp = nextOperation(Integer.parseInt(previousOperation));
+vars.put(&quot;OPERATION&quot;, String.valueOf(newOp));</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] ITEM_ID" enabled="true">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import java.util.Random;
+import java.util.ArrayList;
+
+prevTreshold = vars.get(&quot;TRESHOLD&quot;);
+prevSwitchId = vars.get(&quot;SWITCH_ID&quot;);
+numItems = Integer.parseInt(vars.get(&quot;NUM_ITEMS&quot;));
+
+Random rand = new Random();
+item = 1 + rand.nextInt(numItems);
+vars.put(&quot;ITEM_ID&quot;, Integer.toString(item));
+
+treshold = 1+rand.nextInt(numItems);
+vars.put(&quot;TRESHOLD&quot;, Integer.toString(treshold));
+
+//System.out.println(&quot;Treshold1 = &quot; + treshold);
+//System.out.println(&quot;ITEM_ID1 = &quot; + item);
+</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] probability3" enabled="false">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import org.apache.commons.math3.distribution.EnumeratedDistribution;
+import org.apache.commons.math3.util.Pair;
+import java.util.ArrayList;
+
+class Item
+{
+	String operation;
+	double probability;
+	int jmeterIndex;
+	
+	public Item(String operation, double probability, int jmeterIndex)
+	{
+		this.operation = operation;
+		this.probability = probability;
+		this.jmeterIndex = jmeterIndex;
+	}
+}
+
+ArrayList items = new ArrayList(){{
+	add(new Item(&quot;Home&quot;, 29, 7)); 
+	add(new Item(&quot;New products&quot;, 11, 8)); 
+	add(new Item(&quot;Best Sellers&quot;, 11, 3));
+	add(new Item(&quot;Product Detail&quot;, 21, 11)); 
+	add(new Item(&quot;Search Request&quot;, 12, 12));
+	add(new Item(&quot;Search Results&quot;, 11, 13)); 
+	add(new Item(&quot;Shopping Cart&quot;, 1.25, 14));
+	add(new Item(&quot;Customer Registration&quot;, 0.82, 6));
+	add(new Item(&quot;Buy Request&quot;, 0.75, 5));
+	add(new Item(&quot;Buy Confirm&quot;, 0.69, 4));
+	add(new Item(&quot;Order Inquiry&quot;, 0.30, 10));
+	add(new Item(&quot;Order Display&quot;, 0.25, 9));
+	add(new Item(&quot;Admin Request&quot;, 0.10, 2));
+	add(new Item(&quot;Admin Confirm&quot;, 0.09, 1));
+}};
+
+ArrayList itemWeights = new ArrayList();
+for(Item i : items)
+{
+	itemWeights.add(new Pair(i, i.probability));
+}
+
+newOperation = new EnumeratedDistribution(itemWeights).sample();
+
+vars.put(&quot;SWITCH_ID&quot;, String.valueOf(newOperation.jmeterIndex));</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] probability2" enabled="true">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import java.util.Random;
+
+Random rand = vars.getObject(&quot;RANDOM&quot;);
+if(rand == null)
+{
+	rand = new Random();
+	vars.putObject(&quot;RANDOM&quot;, rand);
+}
+
+int[] browsingMix = {
+	//2900, //home
+	//2100, // product-detail
+	1100, // new-products
+	//75, //buy
+	//69, // buy-confirm	
+	//25, // order-display	
+	//9, // admin confirm
+	//10, // admin request
+	//30, // order-inquiry
+	//82, //customer-registration
+	//125, // shopping-cart
+	1100, // best-sellers
+	1100, // search-result
+	//1200, // search-request
+};
+
+int probSum = 0;
+
+for( int i=0; i &lt; browsingMix.length; i++)
+{
+  probSum += browsingMix[i];
+}
+
+int[] range = new int[2 * browsingMix.length];
+
+for( int i=0; i &lt; browsingMix.length; i++)
+{
+  int sum = 0;
+  for( int j=0; j&lt;i; j++)
+   {
+       sum += browsingMix[j];
+   }
+
+  range[i] = sum;
+  range[i+1] = range[i] + browsingMix[i];
+}
+
+
+int randNum = rand.nextInt(probSum);
+
+for(int i=0; i &lt; browsingMix.length; i++)
+{
+  if( randNum &gt;= range[i] &amp;&amp; randNum &lt; range[i+1] )
+  {
+      vars.put(&quot;SWITCH_ID&quot;, String.valueOf(i));
+      return;
+  }	
+}
+</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] buy-confirm" enabled="true">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import java.util.Random;
+
+Random rand = new Random();
+
+String[] ccTypes = {
+         &quot;Visa&quot;,
+         &quot;MasterCard&quot;,
+         &quot;Discover&quot;,
+         &quot;Amex&quot;,
+         &quot;Diners&quot;
+};
+
+String[] shippingTypes = {
+         &quot;AIR&quot;,
+         &quot;UPS&quot;,
+         &quot;FEDEX&quot;,
+         &quot;SHIP&quot;,
+         &quot;COURIER&quot;,
+         &quot;MAIL&quot;
+};
+
+int min = 0;
+int max = ccTypes.length -1;
+
+ccType = ccTypes[rand.nextInt((max - min) + 1) + min];
+
+max = shippingTypes.length-1;
+
+shipping = shippingTypes[rand.nextInt((max - min) + 1) + min];
+
+vars.put(&quot;RAND_CC_TYPE&quot;, ccType);
+vars.put(&quot;RAND_SHIPPING&quot;, shipping);</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] Random subject" enabled="true">
+          <stringProp name="filename"></stringProp>
+          <stringProp name="parameters"></stringProp>
+          <boolProp name="resetInterpreter">true</boolProp>
+          <stringProp name="script">import java.util.*;
+
+String[] subjects = {
+        &quot;ARTS&quot;,
+        &quot;BIOGRAPHIES&quot;,
+        &quot;BUSINESS&quot;,
+        &quot;CHILDREN&quot;,
+        &quot;COMPUTERS&quot;,
+        &quot;COOKING&quot;,
+        &quot;HEALTH&quot;,
+        &quot;HISTORY&quot;,
+        &quot;HOME&quot;,
+        &quot;HUMOR&quot;,
+        &quot;LITERATURE&quot;,
+        &quot;MYSTERY&quot;,
+        &quot;NON-FICTION&quot;,
+        &quot;PARENTING&quot;,
+        &quot;POLITICS&quot;,
+        &quot;REFERENCE&quot;,
+        &quot;RELIGION&quot;,
+        &quot;ROMANCE&quot;,
+        &quot;SELF-HELP&quot;,
+        &quot;SCIENCE-NATURE&quot;,
+        &quot;SCIENCE-FICTION&quot;,
+        &quot;SPORTS&quot;,
+        &quot;YOUTH&quot;,
+        &quot;TRAVEL&quot;
+    };
+
+min = 0;
+max = subjects.length-1;
+
+Random rand = new Random();
+subject = subjects[rand.nextInt((max - min) + 1) + min];
+
+vars.put(&quot;RAND_SUBJECT&quot;, subject);</stringProp>
+          <stringProp name="TestPlan.comments">Random subject</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] Random searchField" enabled="true">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import java.util.Random;
+
+Random rand = new Random();
+
+String[] searchFields = {
+         &quot;author&quot;,
+         &quot;title&quot;,
+         &quot;subject&quot;
+};
+
+min = 0;
+max = searchFields.length -1;
+
+searchField = searchFields[rand.nextInt((max - min) + 1) + min];
+
+vars.put(&quot;RAND_SEARCHFIELD&quot;, searchField);</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] Random new_price" enabled="true">
+          <boolProp name="resetInterpreter">false</boolProp>
+          <stringProp name="parameters"></stringProp>
+          <stringProp name="filename"></stringProp>
+          <stringProp name="script">import java.util.Random;
+
+Random rand = new Random();
+max = 300;
+min = 10;
+price = rand.nextInt((max - min) + 1) + min;
+
+vars.put(&quot;NEW_PRICE&quot;, Integer.toString(price));</stringProp>
+        </BeanShellPreProcessor>
+        <hashTree/>
+        <SwitchController guiclass="SwitchControllerGui" testclass="SwitchController" testname="Switch Controller" enabled="true">
+          <stringProp name="SwitchController.value">${SWITCH_ID}</stringProp>
+        </SwitchController>
+        <hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/home" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="SHOPPING_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${SHOPPING_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHOPPING_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">true</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree>
+              <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+                <collectionProp name="Asserion.test_strings"/>
+                <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+                <boolProp name="Assertion.assume_success">true</boolProp>
+                <intProp name="Assertion.test_type">16</intProp>
+                <stringProp name="Assertion.scope">all</stringProp>
+              </ResponseAssertion>
+              <hashTree/>
+            </hashTree>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/product-detail" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/product-detail" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="I_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${ITEM_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">I_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/product-detail</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/new-products" enabled="true"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/new-products" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="SUBJECT" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_SUBJECT}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SUBJECT</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/new-products</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/buy" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/shopping-cart?I_ID=&amp;QTY=1&amp;ADD_FLAG=Y" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="I_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${ITEM_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">I_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="QTY" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">1</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">QTY</stringProp>
+                  </elementProp>
+                  <elementProp name="ADD_FLAG" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">Y</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">ADD_FLAG</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/shopping-cart</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree>
+              <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor - SHOPPING_ID" enabled="true">
+                <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+                <stringProp name="RegexExtractor.refname">SHOPPING_ID</stringProp>
+                <stringProp name="RegexExtractor.regex">SHOPPING_ID=([0-9]+)</stringProp>
+                <stringProp name="RegexExtractor.template">$1$</stringProp>
+                <stringProp name="RegexExtractor.default">0</stringProp>
+                <stringProp name="RegexExtractor.match_number">0</stringProp>
+              </RegexExtractor>
+              <hashTree/>
+            </hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/buy?RETURNING_FLAG=Y" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="RETURNING_FLAG" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">Y</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">RETURNING_FLAG</stringProp>
+                  </elementProp>
+                  <elementProp name="SHOPPING_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${SHOPPING_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHOPPING_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="username" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__digSyl(${CUSTOMER_ID})}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">username</stringProp>
+                  </elementProp>
+                  <elementProp name="password" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__digSyl(${CUSTOMER_ID})}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">password</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/buy</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">false</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/buy-confirm" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/buy-confirm" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="street1" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">street1</stringProp>
+                  </elementProp>
+                  <elementProp name="street2" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">street2</stringProp>
+                  </elementProp>
+                  <elementProp name="city" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">city</stringProp>
+                  </elementProp>
+                  <elementProp name="state" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">state</stringProp>
+                  </elementProp>
+                  <elementProp name="zip" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">zip</stringProp>
+                  </elementProp>
+                  <elementProp name="country" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">country</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_TYPE" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_CC_TYPE}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_TYPE</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_NAME" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__RandomString(12,qwertyuiopasdfghjklzxcvbnm)}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_NAME</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_NUMBER" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">55555555</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_NUMBER</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_EXPIRY" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">04/01/2017</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_EXPIRY</stringProp>
+                  </elementProp>
+                  <elementProp name="SHIPPING" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_SHIPPING}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHIPPING</stringProp>
+                  </elementProp>
+                  <elementProp name="SHOPPING_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${SHOPPING_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHOPPING_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/buy-confirm</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/payment" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="street1" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">true</boolProp>
+                    <stringProp name="Argument.value">Izanska c. 233</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">street1</stringProp>
+                  </elementProp>
+                  <elementProp name="street2" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value"></stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">street2</stringProp>
+                  </elementProp>
+                  <elementProp name="city" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">Ljubljana</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">city</stringProp>
+                  </elementProp>
+                  <elementProp name="zip" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">1000</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">zip</stringProp>
+                  </elementProp>
+                  <elementProp name="country" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">Germany</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">country</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_TYPE" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_CC_TYPE}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_TYPE</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_NAME" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">true</boolProp>
+                    <stringProp name="Argument.value">Simon Ivansek</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_NAME</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_NUMBER" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">12345678</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_NUMBER</stringProp>
+                  </elementProp>
+                  <elementProp name="CC_EXPIRY" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">true</boolProp>
+                    <stringProp name="Argument.value">04/03/2014</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">CC_EXPIRY</stringProp>
+                  </elementProp>
+                  <elementProp name="SHIPPING" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_SHIPPING}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHIPPING</stringProp>
+                  </elementProp>
+                  <elementProp name="SHOPPING_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${SHOPPING_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHOPPING_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="distribution" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">expo</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">distribution</stringProp>
+                  </elementProp>
+                  <elementProp name="attr1" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">5</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">attr1</stringProp>
+                  </elementProp>
+                  <elementProp name="attr3" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">2</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">attr3</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/payment</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/order-display" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/order-display" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="username" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__digSyl(${CUSTOMER_ID})}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">username</stringProp>
+                  </elementProp>
+                  <elementProp name="password" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__digSyl(${CUSTOMER_ID})}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">password</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/order-display</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/admin-confirm" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/admin-confirm" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="I_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${ITEM_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">I_ID</stringProp>
+                  </elementProp>
+                  <elementProp name="new_price" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${NEW_PRICE}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">new_price</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/admin-confirm</stringProp>
+              <stringProp name="HTTPSampler.method">POST</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/admin" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/admin" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="I_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${ITEM_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">I_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/admin</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/order-inquiry" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/order-inquiry" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments"/>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/order-inquiry</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/customer-registration" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/customer-registration?SHOPPING_ID=" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="SHOPPING_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${SHOPPING_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SHOPPING_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/customer-registration</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/shopping-cart?ADD_FLAG=N" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/shopping-cart?ADD_FLAG=N" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="ADD_FLAG" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">N</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">ADD_FLAG</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/shopping-cart</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree>
+              <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor - SHOPPING_ID" enabled="true">
+                <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+                <stringProp name="RegexExtractor.refname">SHOPPING_ID</stringProp>
+                <stringProp name="RegexExtractor.regex">SHOPPING_ID=([0-9]+)</stringProp>
+                <stringProp name="RegexExtractor.template">$1$</stringProp>
+                <stringProp name="RegexExtractor.default">0</stringProp>
+                <stringProp name="RegexExtractor.match_number">0</stringProp>
+                <stringProp name="Sample.scope">all</stringProp>
+                <stringProp name="Scope.variable">${SHOPPING_ID}</stringProp>
+              </RegexExtractor>
+              <hashTree/>
+            </hashTree>
+            <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+              <stringProp name="ConstantTimer.delay">7000</stringProp>
+            </ConstantTimer>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/best-sellers" enabled="true"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/best-sellers" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="SUBJECT" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_SUBJECT}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">SUBJECT</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/best-sellers</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="search( is SHOPPING_ID?)" enabled="true"/>
+          <hashTree>
+            <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="[BeanShell PreProcessor] Random new_price" enabled="true">
+              <boolProp name="resetInterpreter">false</boolProp>
+              <stringProp name="parameters"></stringProp>
+              <stringProp name="filename"></stringProp>
+              <stringProp name="script">import java.util.Random;
+
+Random rand = new Random();
+max = 10;
+min = 3;
+price = rand.nextInt((max - min) + 1) + min;
+
+vars.put(&quot;RAND_SEARCH_STRING_LENGTH&quot;, Integer.toString(price));</stringProp>
+            </BeanShellPreProcessor>
+            <hashTree/>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/search?searchField=&amp;keyword=&amp;C_ID=" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments">
+                  <elementProp name="searchField" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${RAND_SEARCHFIELD}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">searchField</stringProp>
+                  </elementProp>
+                  <elementProp name="keyword" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${__RandomString(${RAND_SEARCH_STRING_LENGTH},abcdefghijklmnopqrstuvwxyz,)}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">keyword</stringProp>
+                  </elementProp>
+                  <elementProp name="C_ID" elementType="HTTPArgument">
+                    <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                    <stringProp name="Argument.value">${CUSTOMER_ID}</stringProp>
+                    <stringProp name="Argument.metadata">=</stringProp>
+                    <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                    <stringProp name="Argument.name">C_ID</stringProp>
+                  </elementProp>
+                </collectionProp>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/search</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+          </hashTree>
+          <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="/search" enabled="false"/>
+          <hashTree>
+            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="/search" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments"/>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain">${HOST}</stringProp>
+              <stringProp name="HTTPSampler.port">${PORT}</stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">${SHOWCASE}/search</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <boolProp name="HTTPSampler.image_parser">true</boolProp>
+              <boolProp name="HTTPSampler.monitor">true</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSamplerProxy>
+            <hashTree/>
+          </hashTree>
+        </hashTree>
+        <kg.apc.jmeter.vizualizers.CorrectedResultCollector guiclass="kg.apc.jmeter.vizualizers.SynthesisReportGui" testclass="kg.apc.jmeter.vizualizers.CorrectedResultCollector" testname="jp@gc - Synthesis Report (filtered)" enabled="true">
+          <boolProp name="ResultCollector.error_logging">false</boolProp>
+          <objProp>
+            <name>saveConfig</name>
+            <value class="SampleSaveConfiguration">
+              <time>false</time>
+              <latency>false</latency>
+              <timestamp>true</timestamp>
+              <success>false</success>
+              <label>false</label>
+              <code>false</code>
+              <message>false</message>
+              <threadName>false</threadName>
+              <dataType>false</dataType>
+              <encoding>false</encoding>
+              <assertions>false</assertions>
+              <subresults>false</subresults>
+              <responseData>false</responseData>
+              <samplerData>false</samplerData>
+              <xml>false</xml>
+              <fieldNames>true</fieldNames>
+              <responseHeaders>false</responseHeaders>
+              <requestHeaders>false</requestHeaders>
+              <responseDataOnError>false</responseDataOnError>
+              <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
+              <assertionsResultsToSave>0</assertionsResultsToSave>
+            </value>
+          </objProp>
+          <stringProp name="filename">/home/jhonnymertz/Desktop/report.csv</stringProp>
+          <longProp name="interval_grouping">500</longProp>
+          <boolProp name="graph_aggregated">false</boolProp>
+          <stringProp name="include_sample_labels"></stringProp>
+          <stringProp name="exclude_sample_labels"></stringProp>
+          <stringProp name="start_offset"></stringProp>
+          <stringProp name="end_offset"></stringProp>
+          <boolProp name="include_checkbox_state">false</boolProp>
+          <boolProp name="exclude_checkbox_state">false</boolProp>
+        </kg.apc.jmeter.vizualizers.CorrectedResultCollector>
+        <hashTree/>
+      </hashTree>
     </hashTree>
   </hashTree>
 </jmeterTestPlan>
diff --git a/evaluation/JMeter/Shopizer.jmx b/evaluation/JMeter/Shopizer.jmx
index 5c6040f..e7e8343 100644
--- a/evaluation/JMeter/Shopizer.jmx
+++ b/evaluation/JMeter/Shopizer.jmx
@@ -6027,9 +6027,9 @@ vars.put(&quot;PRODUCT_ID&quot;,Integer.toString(id));</stringProp>
         <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
         <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Contr�leur Boucle" enabled="true">
           <boolProp name="LoopController.continue_forever">false</boolProp>
-          <stringProp name="LoopController.loops">1000</stringProp>
+          <stringProp name="LoopController.loops">500</stringProp>
         </elementProp>
-        <stringProp name="ThreadGroup.num_threads">50</stringProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
         <stringProp name="ThreadGroup.ramp_time">1</stringProp>
         <longProp name="ThreadGroup.start_time">1361531541000</longProp>
         <longProp name="ThreadGroup.end_time">1361531541000</longProp>
@@ -9510,7 +9510,7 @@ vars.put(&quot;PRODUCT_ID&quot;,Integer.toString(id));</stringProp>
           </GaussianRandomTimer>
           <hashTree/>
         </hashTree>
-        <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
+        <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="false">
           <boolProp name="ResultCollector.error_logging">false</boolProp>
           <objProp>
             <name>saveConfig</name>

experiments.sh 42(+27 -15)

diff --git a/experiments.sh b/experiments.sh
index 6b88bf0..8aa85bc 100755
--- a/experiments.sh
+++ b/experiments.sh
@@ -4,22 +4,22 @@
 #mongod &
 #sudo service mysql start
 
-applicationfolder="/home/jhonnymertz/workspace/adaptive-caching-framework/evaluation/Applications/"
+applicationfolder="~/workspace/adaptive-caching-framework/evaluation/Applications/"
 #configs=("NO" "DEV" "AP")
 configs=("NO")
-workloadfolder="/home/jhonnymertz/workspace/adaptive-caching-framework/evaluation/JMeter/"
-jmeter="/home/jhonnymertz/dev/apache-jmeter-3.0/bin/jmeter.sh"
+workloadfolder="~/workspace/adaptive-caching-framework/evaluation/JMeter/"
+jmeter="~/dev/apache-jmeter-3.0/bin/jmeter"
 
 ## take care of the order
 #applications=("CloudStore" "shopizer/sm-shop" "spring-petclinic")
 #databases=("CloudStore" "shopizer/sm-shop" "spring-petclinic")
 #workloads=("cloudscale-sustain.jmx" "Shopizer.jmx" "petclinic_test_plan.jmx")
-applications=("spring-petclinic")
-databases=("petclinic")
-workloads=("petclinic_test_plan.jmx")
+applications=("CloudStore")
+#databases=("petclinic")
+workloads=("cloudscale-sustain.jmx")
 
 
-numberOfExecutions=10
+numberOfExecutions=1
 for (( i=1; i <= $numberOfExecutions; ++i ))
 do
 	## now loop through the above array
@@ -27,32 +27,44 @@ do
 	do
 		for iapp in "${!applications[@]}"
 		do
-			echo "Processing ${applications[$iapp]}-$config..."
+			echo "Processing execution $i of ${applications[$iapp]}-$config"
+			echo "Killing any process up into port 8080..."
+			fuser -k 8080/tcp1
+			echo "Killing any process up into port 8080... done"
 
 			## setup database (clean, create, populate)
 			##todo run database config as a script
-			echo "drop database ${databases[$iapp]}" | mysql -u "root" "-proot"
-			echo "create database ${databases[$iapp]}" | mysql -u "root" "-proot"
+			#echo "drop database ${databases[$iapp]}" | mysql -u "root" "-proot"
+			#echo "create database ${databases[$iapp]}" | mysql -u "root" "-proot"
 
 			## enter the folder
 			echo "Entering into $applicationfolder$config/${applications[$iapp]}..."
 			cd "$applicationfolder$config/${applications[$iapp]}"
 
 			## compile and run web server
-			mvn clean install tomcat7:run-war -DskipTests & mvnpid=$!
+			echo "Running tomcat..."
+			mvn clean install tomcat7:run-war -DskipTests -q & mvnpid=$!
+			echo "Running tomcat... done"
 
 			## wait for maven to compile and tomcat to run
-			sleep 1m
+			echo "Waiting until tomcat is up..."
+			sleep 10s
+			echo "Waiting until tomcat is up... done"
 
 			## run jmeter
+			echo "Running jmeter..."
 			sh $jmeter -n -t $workloadfolder${workloads[$iapp]}
+			echo "Running jmeter... done"
 
 			## copy jmeter results
-			mv /home/jhonnymertz/Desktop/report.csv /home/jhonnymertz/Desktop/${applications[$iapp]}-$config-$i.csv
+			echo "Copying and renaming results of execution $i of ${applications[$iapp]}-$config..."
+			mv ~/Desktop/report.csv ~/Desktop/${applications[$iapp]}-$config-$i.csv
+			echo "Copying and renaming results of execution $i of ${applications[$iapp]}-$config... done"
 
 			## kill maven after all
 			kill -9 $mvnpid
-
 		done
 	done
-done
\ No newline at end of file
+done
+
+#TRP: (N-samples/(timestamp_fim-timestap_ini))*1000
diff --git a/framework/autonomicmanager/pom.xml b/framework/autonomicmanager/pom.xml
index a9913fa..7f56f08 100644
--- a/framework/autonomicmanager/pom.xml
+++ b/framework/autonomicmanager/pom.xml
@@ -6,7 +6,7 @@
 
     <groupId>br.ufrgs.inf.prosoft.adaptivecaching</groupId>
     <artifactId>autonomicmanager</artifactId>
-    <version>0.4.0-SNAPSHOT</version>
+    <version>0.5.0-SNAPSHOT</version>
 
     <properties>
         <aspectj.version>1.8.10</aspectj.version>
diff --git a/framework/autonomicmanager/README.md b/framework/autonomicmanager/README.md
index 3809956..2f83648 100644
--- a/framework/autonomicmanager/README.md
+++ b/framework/autonomicmanager/README.md
@@ -23,8 +23,8 @@ Required Tools
 - Java 8
 
 ###### Optional
-- To store application traces: MongoDB or Redis
-- To cache data: Redis or Memcached
+- To store application traces: MongoDB or Redis or In-memory
+- To cache data: Redis or Memcached or In-memory
 
 Build and Dependency
 --------------------
@@ -37,7 +37,7 @@ If your project is maven-based, in your `pom.xml`:
     <dependency>
         <groupId>br.ufrgs.inf.prosoft.adaptivecaching</groupId>
         <artifactId>autonomicmanager</artifactId>
-        <version>0.4.0-SNAPSHOT</version>
+        <version>0.5.0-SNAPSHOT</version>
     </dependency>
 </dependencies>
 ```
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/Analyzer.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/Analyzer.java
index bc05fe2..ce1af06 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/Analyzer.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/Analyzer.java
@@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory;
 import java.lang.annotation.Annotation;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 public class Analyzer implements Runnable {
 
@@ -48,6 +49,82 @@ public class Analyzer implements Runnable {
         this.adaptiveConfig = adaptiveConfig;
     }
 
+    @Override
+    public void run() {
+
+        if (!TracerAspect.analyzerEnabled) {
+            logger.info("Analyzer disabled, not running...");
+            return;
+        }
+
+        List all = dataSource.findAll();
+
+//        if(all.size() < 300)
+//            return;
+
+        Set<MethodEntry> process = analyzeAndReturn(all);
+
+        //if there is a repository to save cacheable values
+        if (dataTarget != null) {
+            dataTarget.removeAll();
+            process.forEach(dataTarget::save);
+        }
+
+        //todo maybe clean the cache here?
+        TracerAspect.cacheableMethods = process;
+        TracerAspect.cacheableMethodKeys = process.stream().map(MethodEntry::getMethodInfoKey).collect(Collectors.toSet());
+
+//        TracerAspect.cacheableMethodKeys = new HashSet<>();
+//        for (MethodEntry me : process){
+//            TracerAspect.cacheableMethodKeys.add(me.getMethodInfoKey());
+//        }
+
+        String methods = "";
+        for (MethodEntry me : process) methods = methods.concat(me.getMethodInfo().getSignature() + ",");
+
+        //TODO maybe after the analysis end, new data would be already registered, which should not be deleted
+        if (adaptiveConfig.modelling().equals(Modelling.FULLEXPLORATION)) {
+            dataSource.removeAll();
+            logger.info("Old monitoring data deleted.");
+        }
+
+        if (adaptiveConfig.analyzeOnce())
+            TracerAspect.analyzerEnabled = false;
+    }
+
+
+    public Set<MethodEntry> analyzeAndReturn(List<LogTrace> logList) {
+        logger.info("Starting the analysis of cacheable methods from logs: " + logList.size() + " loaded.");
+        //TODO trigger by number of logs
+//        if(logList.size() < 500000)
+//            return;
+
+        CacheabilityPatternDecider decider = new CacheabilityPatternDecider(logList.size());
+        FlowchartWorkFlow workflow = new FlowchartWorkFlow(decider, cacheInfo, logList);
+        Set<MethodEntry> process = workflow.filterCacheableMethods(adaptiveConfig.expiryInterval());
+        logger.info(process.size() + " cacheable methods identified.");
+
+
+
+//        //TODO find by annotations @Ignore and remove the methods marked
+//
+//        //        for (MethodInfo method : cacheableStats.getMethodsInfoMap().keySet()) {
+////            if(cacheableStats.getMethodsInfoMap().get(method).hitRatio() > 10)
+////                System.out.println(method.getSignature() + ": " + cacheableStats.getMethodsInfoMap().get(method).hitRatio());
+////        }
+
+
+//        //TODO if disable monitoring, should not schedule future analysis
+        if (adaptiveConfig.disableMonitoringAfterAnalysis()) {
+            TracerAspect.tracerEnabled = false;
+            logger.info("Adaptive caching monitoring disabled since the model was built.");
+        }
+        return process;
+    }
+
+
+
+    //used to test
     public static void main(String[] args) {
         //TODO db according to properties file...
         MongoClient mongo = new MongoClient("localhost", 27017);
@@ -173,68 +250,4 @@ public class Analyzer implements Runnable {
         //TODO trigger by time?
         analyzer.run();
     }
-
-    @Override
-    public void run() {
-
-        if (!TracerAspect.analyzerEnabled) {
-            logger.info("Analyzer disabled, not running...");
-            return;
-        }
-
-        List all = dataSource.findAll();
-
-//        if(all.size() < 300)
-//            return;
-
-        Set<MethodEntry> process = analyzeAndReturn(all);
-
-        if (dataTarget != null) {
-            dataTarget.removeAll();
-            process.forEach(dataTarget::save);
-        }
-
-        //todo maybe clean the cache here?
-        TracerAspect.cacheableMethods = process;
-
-        String methods = "";
-        for (MethodEntry me : process) methods = methods.concat(me.getMethodInfo().getSignature() + ",");
-
-        //TODO maybe after the analysis end, new data would be already registered, which should not be deleted
-        if (adaptiveConfig.modelling().equals(Modelling.FULLEXPLORATION)) {
-            dataSource.removeAll();
-            logger.info("Old monitoring data deleted.");
-        }
-
-        if (adaptiveConfig.analyzeOnce())
-            TracerAspect.analyzerEnabled = false;
-    }
-
-
-    public Set<MethodEntry> analyzeAndReturn(List<LogTrace> logList) {
-        logger.info("Starting the analysis of cacheable methods from logs: " + logList.size() + " loaded.");
-        //TODO trigger by number of logs
-//        if(logList.size() < 500000)
-//            return;
-
-        CacheabilityPatternDecider decider = new CacheabilityPatternDecider(logList.size());
-        FlowchartWorkFlow workflow = new FlowchartWorkFlow(decider, cacheInfo, logList);
-        Set<MethodEntry> process = workflow.filterCacheableMethods(adaptiveConfig.expiryInterval());
-        logger.info(process.size() + " cacheable methods identified.");
-
-//        //TODO find by annotations @Ignore and remove the methods marked
-//
-//        //        for (MethodInfo method : cacheableStats.getMethodsInfoMap().keySet()) {
-////            if(cacheableStats.getMethodsInfoMap().get(method).hitRatio() > 10)
-////                System.out.println(method.getSignature() + ": " + cacheableStats.getMethodsInfoMap().get(method).hitRatio());
-////        }
-
-
-//        //TODO if disable monitoring, should not schedule future analysis
-        if (adaptiveConfig.disableMonitoringAfterAnalysis()) {
-            TracerAspect.tracerEnabled = false;
-            logger.info("Adaptive caching monitoring disabled since the model was built.");
-        }
-        return process;
-    }
 }
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/model/MethodEntry.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/model/MethodEntry.java
index 3ce0440..6e42ed9 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/model/MethodEntry.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/model/MethodEntry.java
@@ -22,6 +22,10 @@ public class MethodEntry {
         return methodInfo;
     }
 
+    public Object getMethodInfoKey() {
+        return methodInfo.getKey();
+    }
+
     public MethodStats getMethodStats() {
         return methodStats;
     }
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/cacher/key/generic/SimpleKey.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/cacher/key/generic/SimpleKey.java
index 5f53eba..be0f7e8 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/cacher/key/generic/SimpleKey.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/cacher/key/generic/SimpleKey.java
@@ -23,10 +23,9 @@ import java.io.Serializable;
 import java.util.Arrays;
 
 /**
- * A simple key as returned from the {@link SimpleKeyGenerator}.
+ * A simple key as returned from the {@link ParamsBasedKeyGenerator}.
  *
- * @author Phillip Webb
- * @see SimpleKeyGenerator
+ * @see ParamsBasedKeyGenerator
  * @since 4.0
  */
 @SuppressWarnings("serial")
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 c73bafd..9968d91 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
@@ -91,9 +91,20 @@ public class Key {
         return tgt;
     }
 
+//    @Override
+//    public final String toString() {
+//        return Mnemos.toText(this.method, this.arguments, true, false);
+//    }
+
     @Override
-    public final String toString() {
-        return Mnemos.toText(this.method, this.arguments, true, false);
+    public String toString() {
+        return "Key{" +
+                "start=" + start +
+                ", accessed=" + accessed +
+                ", method=" + method +
+                ", target=" + target +
+                ", arguments=" + Arrays.toString(arguments) +
+                '}';
     }
 
     @Override
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/model/support/SimpleCacheManager.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/model/support/SimpleCacheManager.java
index af4f78d..0780462 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/model/support/SimpleCacheManager.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/model/support/SimpleCacheManager.java
@@ -16,8 +16,8 @@
 
 package br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.model.support;
 
+import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.extensions.AbstractCacheManager;
 import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.model.Cache;
-import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.util.support.AbstractCacheManager;
 
 import java.util.Collection;
 
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/util/CacheManagerFactory.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/util/CacheManagerFactory.java
index 22dea02..a8009cd 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/util/CacheManagerFactory.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/cachemanager/util/CacheManagerFactory.java
@@ -18,7 +18,7 @@ import java.lang.management.ManagementFactory;
 public class CacheManagerFactory {
     static Logger logger = LoggerFactory.getLogger(CacheManagerFactory.class);
 
-    public static CacheManager getCacheManager(CacheProviderType cacheProviderType) {
+    public static CacheManager getCacheManager(CacheProviderType cacheProviderType, long expiryInterval) {
         switch (cacheProviderType) {
             case GUAVA:
                 logger.debug("Cache provider is configured to Guava.");
@@ -51,8 +51,9 @@ public class CacheManagerFactory {
                 net.sf.ehcache.Cache adaptiveCache = new net.sf.ehcache.Cache(
                         new CacheConfiguration("adaptivecaching", 10000)
                                 .memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LRU)
-                                .eternal(true)
+                                //.eternal(true)
                                 .overflowToOffHeap(false)
+                                .timeToLiveSeconds(expiryInterval)
                                 .persistence(new PersistenceConfiguration().strategy(PersistenceConfiguration.Strategy.NONE)));
                 cm.addCache(adaptiveCache);
                 return new EhCacheCacheManager(cm);
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 d76b790..186428d 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
@@ -23,16 +23,16 @@ public @interface AdaptiveCaching {
 
     Modelling modelling() default Modelling.ACCUMULATION;
 
-    long expiryInterval() default 5; //in minutes
-    long firstExpiry() default 6; //in minutes
+    long expiryInterval() default 300000; //5 minutes
+    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 5; //in minutes
-    @Deprecated long firstAnalysis() default 2; //in minutes
+    @Deprecated long analysisInterval() default 300000; //5 minutes
+    @Deprecated long firstAnalysis() default 120000; //2 minutes
 
     TriggerType triggerType() default TriggerType.TIME; //if were not by time, load the class that implements the interface @Trigger
 
-    long triggerTime() default 5; //in minutes
+    long triggerTime() default 300000; //in minutes
 
     //enables the analyzer to be executed just once
     boolean analyzeOnce() default false;
@@ -40,6 +40,9 @@ public @interface AdaptiveCaching {
     //disable the monitoring after the first analyses
     boolean disableMonitoringAfterAnalysis() default false;
 
+    /**
+     * @deprecated async use may consume too much memory and cause stack overflow
+     */
     @Deprecated boolean traceAsync() default true;
     boolean clearMonitoringDataOnStart() default false;
 
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 3023e29..877c53b 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
@@ -2,13 +2,12 @@ package br.ufrgs.inf.prosoft.adaptivecaching.monitoring.application.aspects;
 
 import br.ufrgs.inf.prosoft.adaptivecaching.analysis.Analyzer;
 import br.ufrgs.inf.prosoft.adaptivecaching.analysis.decision.flowchart.model.MethodEntry;
-import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.util.CacheManagerFactory;
 import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.cacher.key.Key;
 import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.model.Cache;
 import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.model.CacheManager;
 import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.model.ValueWrapper;
+import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.util.CacheManagerFactory;
 import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.util.threads.NamedThreads;
-import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.util.threads.VerboseRunnable;
 import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.AdaptiveCaching;
 import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.ComponentScan;
 import br.ufrgs.inf.prosoft.adaptivecaching.exceptions.CacheProviderException;
@@ -56,8 +55,12 @@ import static java.lang.System.currentTimeMillis;
 @Aspect
 public class TracerAspect {
 
-    public static Set<MethodEntry> cacheableMethods;
-    public static List<String> methodBlackList;
+    //used in case the method info is required
+    public static Set<MethodEntry> cacheableMethods = new HashSet<>();
+    //used in case the method info is not required
+    public static Set<Object> cacheableMethodKeys = new HashSet<>();
+
+    public static List<String> methodBlackList = new ArrayList<>();
     /**
      * Enable and disable tracer
      */
@@ -181,7 +184,7 @@ public class TracerAspect {
 
             } else tracerEnabled = false;
 
-            this.cacheManager = CacheManagerFactory.getCacheManager(cachingConfig.cacheProvider());
+            this.cacheManager = CacheManagerFactory.getCacheManager(cachingConfig.cacheProvider(), cachingConfig.expiryInterval());
             this.cache = cacheManager.getCache("adaptivecaching");
             this.cacheMonitor = CacheMonitorFactory.getCacheMonitor(this.cache, cachingConfig.cacheProvider());
 
@@ -194,14 +197,15 @@ public class TracerAspect {
                 //maybe we should kill it or delete the object?
                 analyzerExecutor.scheduleWithFixedDelay(
                         new Analyzer(repository, cacheMonitor.getCacheInfo(), cachingConfig),
-                        cachingConfig.firstAnalysis(), cachingConfig.analysisInterval(), TimeUnit.MINUTES);
+                        cachingConfig.firstAnalysis(), cachingConfig.analysisInterval(), TimeUnit.MILLISECONDS);
             }
 
             //TODO trigger by time
-            this.expirationExecutor.scheduleWithFixedDelay(
-                    new VerboseRunnable(() -> TracerAspect.this.clean()),
-                    cachingConfig.firstExpiry(), cachingConfig.expiryInterval(), TimeUnit.MINUTES
-            );
+            //TODO in some cases (Ehcache) it is better to set a timetolive directcly on cache provider
+//            this.expirationExecutor.scheduleWithFixedDelay(
+//                    new VerboseRunnable(() -> TracerAspect.this.clean()),
+//                    cachingConfig.firstExpiry(), cachingConfig.expiryInterval(), TimeUnit.MILLISECONDS
+//            );
 
 //        if (adaptiveConfig.analyzerEnabled()) {
 //            this.loaderExecutor.scheduleWithFixedDelay(
@@ -231,39 +235,53 @@ public class TracerAspect {
         }
     }
 
-
     @Around("anyCall()")
     public Object aroundMethods(ProceedingJoinPoint joinPoint) throws Throwable {
 
         //see if a method is being caught
         //traceSpecificMethod(joinPoint);
 
-        if (tracerEnabled) {
+        if(!isAllowed(joinPoint))
+            return joinPoint.proceed();
 
+        Key key = null;
+
+        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 cached, no trace will be generated
-            //caching methods
-            //todo optimize this logic to build and compare methods
-            for (MethodEntry methodAnalysis : cacheableMethods) {
-                if (joinPoint.getSignature().toLongString().equals(methodAnalysis.getMethodInfo().getSignature())) {
+            //when method is already cached and obtained from it, no trace will be generated
+            //System.out.println(key + "generated to " + joinPoint.getSignature().toLongString());
 
-                    MethodInfo methodInfo = new MethodInfo(joinPoint.getSignature().toLongString(), joinPoint.getArgs());
+            //System.out.println(key + "is a cacheable method");
+            return cache(key, joinPoint);
 
-                    //TODO hash or not???
-                    //        methodInfo.setArguments(HashCodeBuilder.reflectionHashCode(joinPoint.getArgs()));
-                    //        methodInfo.setReturnedValue(HashCodeBuilder.reflectionHashCode(result));
+            //caching methods
+//            for (MethodEntry methodAnalysis : cacheableMethods) {
+//                if (joinPoint.getSignature().toLongString().equals(methodAnalysis.getMethodInfo().getSignature())) {
+//
+//                    MethodInfo methodInfo = new MethodInfo(joinPoint.getSignature().toLongString(), joinPoint.getArgs());
+//
+//                    //TODO hash or not???
+//                    //        methodInfo.setArguments(HashCodeBuilder.reflectionHashCode(joinPoint.getArgs()));
+//                    //        methodInfo.setReturnedValue(HashCodeBuilder.reflectionHashCode(result));
+//
+//                    if (methodAnalysis.getMethodInfo().equalsWithoutReturnedValue(methodInfo)) {
+//                        //todo we should trace cached methods in order to provide the runtime, otherwise the cached method
+//                        //will not be cacheable on the second time
+//                        return cache(joinPoint);
+//                    }
+//                }
+//            }
+        }
 
-                    if (methodAnalysis.getMethodInfo().equalsWithoutReturnedValue(methodInfo)) {
-                        //todo we should trace cached methods in order to provide the runtime, otherwise the cached method
-                        //will not be cacheable on the second time
-                        return cache(joinPoint);
-                    }
-                }
-            }
+        if (tracerEnabled) {
+            if(key == null)
+                key = new Key(joinPoint);
 
-            if (isAllowed(joinPoint)) trace(joinPoint);
+            trace(key, joinPoint);
         }
+
         return joinPoint.proceed();
     }
 
@@ -285,7 +303,11 @@ public class TracerAspect {
         return false;
     }
 
-    private Object trace(ProceedingJoinPoint joinPoint) throws Throwable {
+    private Object trace(Key key, ProceedingJoinPoint joinPoint) throws Throwable {
+
+        //method calls can change the args, so it is better to get it at the beginning
+        Object[] joinPointArgs = joinPoint.getArgs();
+
         long startTime = currentTimeMillis();
         Object result = joinPoint.proceed();
         long endTime = currentTimeMillis();
@@ -302,7 +324,7 @@ public class TracerAspect {
         //TODO declare on properties the class name which implements UserGetter, parse and initialize
         logTrace.setUserId(userGetter.getCurrentUser());
 
-        MethodInfo methodInfo = new MethodInfo(joinPoint.getSignature().toLongString(), joinPoint.getArgs(), result);
+        MethodInfo methodInfo = new MethodInfo(joinPoint.getSignature().toLongString(), joinPointArgs, result, key);
         logTrace.setMethodInfo(methodInfo);
 
         //in case of batch processing...
@@ -337,8 +359,16 @@ public class TracerAspect {
     }
 
     private Object cache(ProceedingJoinPoint joinPoint) throws Throwable {
-
         final Key key = new Key(joinPoint);
+        return cache(key, joinPoint);
+    }
+
+
+    private Object cache(Object key, ProceedingJoinPoint joinPoint) throws Throwable {
+
+        //already calculated
+        //final Key key = new Key(joinPoint);
+        //final SimpleKey key = (SimpleKey) joinPointKeyGenerator.generate(joinPoint);
         ValueWrapper value = cache.get(key);
 
         if (value != null) {
@@ -347,7 +377,6 @@ public class TracerAspect {
         }
 
         Object result;
-
         try {
             result = joinPoint.proceed();
         } catch (Exception ex) {
@@ -371,7 +400,7 @@ public class TracerAspect {
      */
     private void clean() {
         cache.clear();
-        logger.info("Expired cached values were removed.");
+        logger.info("All cached values were removed.");
     }
 
     private void stats() {
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 874d064..18c3c40 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,6 @@
 package br.ufrgs.inf.prosoft.adaptivecaching.monitoring.application.metadata;
 
-import org.apache.commons.lang3.builder.HashCodeBuilder;
+import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.cacher.key.Key;
 
 import java.util.Objects;
 
@@ -12,6 +12,8 @@ public class MethodInfo {
 
     private Object returnedValue;
 
+    private Key key;
+
 //    private Integer hashedReturnedValue;
 //    private Integer hashedArguments;
 
@@ -41,6 +43,11 @@ public class MethodInfo {
 //        }
     }
 
+    public MethodInfo(String s, Object[] joinPointArgs, Object result, Key key) {
+        this(s, joinPointArgs, result);
+        this.key = key;
+    }
+
     public String getSignature() {
         return this.signature;
     }
@@ -53,6 +60,10 @@ public class MethodInfo {
         return this.returnedValue;
     }
 
+    public Object getKey() {
+        return key;
+    }
+
     public boolean equalsWithoutReturnedValue(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
diff --git a/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/Learner.java b/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/Learner.java
index a5ccf8e..a84bd59 100644
--- a/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/Learner.java
+++ b/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/Learner.java
@@ -157,7 +157,22 @@ public class Learner {
             }
 
             @Override
-            public long expiry() {
+            public long expiryInterval() {
+                return 0;
+            }
+
+            @Override
+            public long firstExpiry() {
+                return 0;
+            }
+
+            @Override
+            public long analysisInterval() {
+                return 0;
+            }
+
+            @Override
+            public long firstAnalysis() {
                 return 0;
             }
 
@@ -192,6 +207,11 @@ public class Learner {
             }
 
             @Override
+            public boolean enableBlacklist() {
+                return false;
+            }
+
+            @Override
             public boolean tracerEnabled() {
                 return true;
             }

README.md 34(+17 -17)

diff --git a/README.md b/README.md
index f383150..fdde6f3 100644
--- a/README.md
+++ b/README.md
@@ -5,20 +5,19 @@ Meeting performance and scalability requirements while delivering services is a 
 
 Application-level caching is mainly characterized by caching techniques employed along with the application code, i.e. business, presentation and data logic. Therefore, it is not tied up to a specific caching location (server-side, proxy or client-side), because it can be conceived at the server-side, to speed up a Java-based application that produces HTML pages sent to users, as well as at the client-side, as a JavaScript-based application that executes part of its logic directly on the client's browser. In both situations, developers can reason about caching and implement a caching logic to satisfy their needs.
 
-Identifying cacheable methods automatically
+Evaluation set up - Identifying cacheable methods automatically
 ---------
 
-###### Evaluation setup
+Simulations were performed using three different caching configurations: (i) no application-level caching (NO), (ii) application-level caching manually designed and implemented by developers (DEV); and (iii) our approach (AP).
 
+######## Set up
 - Three applications
-- Three application setups each: NO, DEV, AP
-- Three randomized simulation of execution for each application
-
-Simulations were performed using three different caching configurations: (i) no application-level caching (NO), (ii) application-level caching manually designed and implemented by developers (DEV); and (iii) our approach (AP).
+- Three set ups for each application: NO, DEV, AP
+- A simulation of a randomized workload for each set up
 
 Required Tools
 ---------
-- [Jmeter] (http://jmeter.apache.org/)
+- [Jmeter 3.3] (http://jmeter.apache.org/)
 - MySQL
 - Java 8
 - Maven 3
@@ -49,12 +48,13 @@ This application requires the installation of Elasticsearch (https://www.elastic
 Installation and configuration:
 - Create schema `SALESMANAGER` on the database
 - Configure the file `database.properties` with your database info
-- Database population: in the file `shopizer-properties.xml` there is the tag `<prop key="POPULATE_TEST_DATA">true</prop>`. Such configuration will provide 7 categories, 6 products, addresses USA, one customer, one admin, shipping info in the database in the first initialization of the system.
-- Compilar e rodar a aplicação: `mvn clean install tomcat7:run-war -DskipTests`
+- Database population: in the file `shopizer-properties.xml` there is the tag `<prop key="POPULATE_TEST_DATA">true</prop>`. For AP and DEV, such configuration will provide 7 categories, 6 products, addresses USA, one customer, one admin, shipping info in the database in the first initialization of the system. For NO, it will be generated a lot of more randomized data. For more information on how the database is populated, please refer to `InitData.class` and its implementations.
+- Compile and run: `mvn clean install tomcat7:run-war -DskipTests`
 
-Use the urls above to access system's features
-- /shop → Páginas da loja
-- /admin → Administração com login: admin:password
+Use the urls below to access system's features
+- http://localhost:8080/sm-shop/<profile>
+- /shop → Store page
+- /admin → Administration page where the login and password are: admin:password
 
 [Petclinic] (https://github.com/spring-projects/spring-petclinic)
 
@@ -62,16 +62,16 @@ Installation and configuration:
 - Create schema `perclinic` on the database
 - Configure database on the file `pom.xml`
 - Populate database: on the first initialization it will be populated automatically
-- Compilar e rodar a aplicação: `mvn clean install tomcat7:run-war -DskipTests`
+- Compile and run: `mvn clean install tomcat7:run-war -DskipTests`
 - Url to access the system: http://localhost:9966/petclinic/
 
-[CloudStore] (https://github.com/CloudScale-Project/CloudStore
+[CloudStore] (https://github.com/CloudScale-Project/CloudStore)
 
 Installation and configuration:
 - Restore the [dump](https://github.com/CloudScale-Project/CloudStore) located in `DEV/database/rds-tpcw-dump-latest.sql`, such dump has 10000 books
 - Configure database on file `src/main/resources/database/database.hibernate.properties`
-- Compilar e rodar a aplicação: `mvn clean install tomcat7:run-war -DskipTests`
-- Url to access the system: http://localhost:9966/cloudstore/
+- Compile and run: `mvn clean install tomcat7:run-war -DskipTests`
+- Url to access the system: http://localhost:8080/showcase/
 
 Simulations
 -----------
@@ -88,4 +88,4 @@ Metrics
 To assess performance, we used two metrics: throughput (number of requests handled per second) and hit ratio, because they are well-known in the context of web applications and cache performance tests.
 
 - Throughput is obtained from Jmeter reports
-- Hit ratio must be acquired from `jconsole` after the end of the simulation. The hit ratio will be showed at EhCache → Estatistics → Hits
\ No newline at end of file
+- Hit absolute and Hit ratio can be acquired from `jconsole` after the end of the simulation. Such metrics will be presented at EhCache → Estatistics → <cache name>
\ No newline at end of file