BAEL-3459 updated cache2k example and test cases (#8732)
This commit is contained in:
		
							parent
							
								
									409ebc1a90
								
							
						
					
					
						commit
						a73581fbaf
					
				| @ -4,38 +4,33 @@ import java.util.Objects; | ||||
| 
 | ||||
| import org.cache2k.Cache; | ||||
| import org.cache2k.Cache2kBuilder; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| 
 | ||||
| public class ProductHelper { | ||||
| 
 | ||||
|     final Logger LOGGER = LoggerFactory.getLogger(ProductHelper.class); | ||||
| 
 | ||||
|     private Cache<String, Integer> cachedDiscounts; | ||||
| 
 | ||||
|     private int cacheMissCount = 0; | ||||
| 
 | ||||
|     public ProductHelper() { | ||||
|         cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) | ||||
|             .name("discount") | ||||
|             .eternal(true) | ||||
|             .entryCapacity(100) | ||||
|             .build(); | ||||
| 
 | ||||
|         initDiscountCache("Sports", 20); | ||||
|     } | ||||
| 
 | ||||
|     public void initDiscountCache(String productType, Integer value) { | ||||
|         cachedDiscounts.put(productType, value); | ||||
|     } | ||||
| 
 | ||||
|     public Integer getDiscount(String productType) { | ||||
|         Integer discount = cachedDiscounts.get(productType); | ||||
|         if (Objects.isNull(discount)) { | ||||
|             LOGGER.info("Discount for {} not found.", productType); | ||||
|             discount = 0; | ||||
|         } else { | ||||
|             LOGGER.info("Discount for {} found.", productType); | ||||
|             cacheMissCount++; | ||||
|             discount = "Sports".equalsIgnoreCase(productType) ? 20 : 10; | ||||
|             cachedDiscounts.put(productType, discount); | ||||
|         } | ||||
|         return discount; | ||||
|     } | ||||
| 
 | ||||
|     public int getCacheMissCount() { | ||||
|         return cacheMissCount; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -1,6 +1,5 @@ | ||||
| package com.baeldung.cache2k; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| 
 | ||||
| import org.cache2k.Cache; | ||||
| @ -14,28 +13,26 @@ public class ProductHelperUsingLoader { | ||||
| 
 | ||||
|     private Cache<String, Integer> cachedDiscounts; | ||||
| 
 | ||||
|     private int cacheMissCount = 0; | ||||
| 
 | ||||
|     public ProductHelperUsingLoader() { | ||||
|         cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) | ||||
|             .name("discount-loader") | ||||
|             .eternal(false) | ||||
|             .expireAfterWrite(10, TimeUnit.MILLISECONDS) | ||||
|             .entryCapacity(100) | ||||
|             .loader((key) -> { | ||||
|                 LOGGER.info("Calculating discount for {}.", key); | ||||
|                 cacheMissCount++; | ||||
|                 return "Sports".equalsIgnoreCase(key) ? 20 : 10; | ||||
|             }) | ||||
|             .build(); | ||||
|     } | ||||
| 
 | ||||
|     public Integer getDiscount(String productType) { | ||||
|         Integer discount = cachedDiscounts.get(productType); | ||||
|         if (Objects.isNull(discount)) { | ||||
|             LOGGER.info("Discount for {} not found.", productType); | ||||
|             discount = 0; | ||||
|         } else { | ||||
|             LOGGER.info("Discount for {} found.", productType); | ||||
|         } | ||||
|         return discount; | ||||
|         return cachedDiscounts.get(productType); | ||||
|     } | ||||
| 
 | ||||
|     public int getCacheMissCount() { | ||||
|         return cacheMissCount; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -1,6 +1,5 @@ | ||||
| package com.baeldung.cache2k; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| 
 | ||||
| import org.cache2k.Cache; | ||||
| @ -16,14 +15,15 @@ public class ProductHelperWithEventListener { | ||||
| 
 | ||||
|     private Cache<String, Integer> cachedDiscounts; | ||||
| 
 | ||||
|     private int cacheMissCount = 0; | ||||
| 
 | ||||
|     public ProductHelperWithEventListener() { | ||||
|         cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) | ||||
|             .name("discount-listener") | ||||
|             .eternal(false) | ||||
|             .expireAfterWrite(10, TimeUnit.MILLISECONDS) | ||||
|             .entryCapacity(100) | ||||
|             .loader((key) -> { | ||||
|                 LOGGER.info("Calculating discount for {}.", key); | ||||
|                 cacheMissCount++; | ||||
|                 return "Sports".equalsIgnoreCase(key) ? 20 : 10; | ||||
|             }) | ||||
|             .addListener(new CacheEntryCreatedListener<String, Integer>() { | ||||
| @ -36,14 +36,11 @@ public class ProductHelperWithEventListener { | ||||
|     } | ||||
| 
 | ||||
|     public Integer getDiscount(String productType) { | ||||
|         Integer discount = cachedDiscounts.get(productType); | ||||
|         if (Objects.isNull(discount)) { | ||||
|             LOGGER.info("Discount for {} not found.", productType); | ||||
|             discount = 0; | ||||
|         } else { | ||||
|             LOGGER.info("Discount for {} found.", productType); | ||||
|         } | ||||
|         return discount; | ||||
|         return cachedDiscounts.get(productType); | ||||
|     } | ||||
| 
 | ||||
|     public int getCacheMissCount() { | ||||
|         return cacheMissCount; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -5,39 +5,34 @@ import java.util.concurrent.TimeUnit; | ||||
| 
 | ||||
| import org.cache2k.Cache; | ||||
| import org.cache2k.Cache2kBuilder; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| 
 | ||||
| public class ProductHelperWithExpiry { | ||||
| 
 | ||||
|     final Logger LOGGER = LoggerFactory.getLogger(ProductHelperWithExpiry.class); | ||||
| 
 | ||||
|     private Cache<String, Integer> cachedDiscounts; | ||||
| 
 | ||||
|     private int cacheMissCount = 0; | ||||
| 
 | ||||
|     public ProductHelperWithExpiry() { | ||||
|         cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) | ||||
|             .name("discount-expiry") | ||||
|             .eternal(false) | ||||
|             .expireAfterWrite(5, TimeUnit.MILLISECONDS) | ||||
|             .entryCapacity(100) | ||||
|             .build(); | ||||
| 
 | ||||
|         initDiscountCache("Sports", 20); | ||||
|     } | ||||
| 
 | ||||
|     public void initDiscountCache(String productType, Integer value) { | ||||
|         cachedDiscounts.put(productType, value); | ||||
|     } | ||||
| 
 | ||||
|     public Integer getDiscount(String productType) { | ||||
|         Integer discount = cachedDiscounts.get(productType); | ||||
|         if (Objects.isNull(discount)) { | ||||
|             LOGGER.info("Discount for {} not found.", productType); | ||||
|             discount = 0; | ||||
|         } else { | ||||
|             LOGGER.info("Discount for {} found.", productType); | ||||
|             cacheMissCount++; | ||||
|             discount = "Sports".equalsIgnoreCase(productType) ? 20 : 10; | ||||
|             cachedDiscounts.put(productType, discount); | ||||
|         } | ||||
|         return discount; | ||||
|     } | ||||
| 
 | ||||
|     public int getCacheMissCount() { | ||||
|         return cacheMissCount; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -6,12 +6,13 @@ import org.junit.Test; | ||||
| 
 | ||||
| public class ProductHelperUnitTest { | ||||
| 
 | ||||
|     ProductHelper productHelper = new ProductHelper(); | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenInvokedGetDiscount_thenGetItFromCache() { | ||||
|     public void whenInvokedGetDiscountTwice_thenGetItFromCache() { | ||||
|         ProductHelper productHelper = new ProductHelper(); | ||||
|         assertTrue(productHelper.getCacheMissCount() == 0); | ||||
|         assertTrue(productHelper.getDiscount("Sports") == 20); | ||||
|         assertTrue(productHelper.getDiscount("Electronics") == 0); | ||||
|         assertTrue(productHelper.getDiscount("Sports") == 20); | ||||
|         assertTrue(productHelper.getCacheMissCount() == 1); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -6,12 +6,16 @@ import org.junit.Test; | ||||
| 
 | ||||
| public class ProductHelperUsingLoaderUnitTest { | ||||
| 
 | ||||
|     ProductHelperUsingLoader productHelper = new ProductHelperUsingLoader(); | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenInvokedGetDiscount_thenPopulateCache() { | ||||
|     public void whenInvokedGetDiscount_thenPopulateCacheUsingLoader() { | ||||
|         ProductHelperUsingLoader productHelper = new ProductHelperUsingLoader(); | ||||
|         assertTrue(productHelper.getCacheMissCount() == 0); | ||||
| 
 | ||||
|         assertTrue(productHelper.getDiscount("Sports") == 20); | ||||
|         assertTrue(productHelper.getCacheMissCount() == 1); | ||||
| 
 | ||||
|         assertTrue(productHelper.getDiscount("Electronics") == 10); | ||||
|         assertTrue(productHelper.getCacheMissCount() == 2); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -6,10 +6,9 @@ import org.junit.Test; | ||||
| 
 | ||||
| public class ProductHelperWithEventListenerUnitTest { | ||||
| 
 | ||||
|     ProductHelperWithEventListener productHelper = new ProductHelperWithEventListener(); | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenEntryAddedInCache_thenEventListenerCalled() { | ||||
|         ProductHelperWithEventListener productHelper = new ProductHelperWithEventListener(); | ||||
|         assertTrue(productHelper.getDiscount("Sports") == 20); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -6,13 +6,17 @@ import org.junit.Test; | ||||
| 
 | ||||
| public class ProductHelperWithExpiryUnitTest { | ||||
| 
 | ||||
|     ProductHelperWithExpiry productHelper = new ProductHelperWithExpiry(); | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenInvokedGetDiscountForExpiredProduct_thenNoDiscount() throws InterruptedException { | ||||
|     public void whenInvokedGetDiscountAfterExpiration_thenDiscountCalculatedAgain() throws InterruptedException { | ||||
|         ProductHelperWithExpiry productHelper = new ProductHelperWithExpiry(); | ||||
|         assertTrue(productHelper.getCacheMissCount() == 0); | ||||
|         assertTrue(productHelper.getDiscount("Sports") == 20); | ||||
|         assertTrue(productHelper.getCacheMissCount() == 1); | ||||
| 
 | ||||
|         Thread.sleep(20); | ||||
|         assertTrue(productHelper.getDiscount("Sports") == 0); | ||||
| 
 | ||||
|         assertTrue(productHelper.getDiscount("Sports") == 20); | ||||
|         assertTrue(productHelper.getCacheMissCount() == 2); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user