| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| EhCacheHelper | 
 | 
 | 1.5833333333333333;1.583 | 
| 1 |  /** | |
| 2 |   * Copyright 2010 The Kuali Foundation Licensed under the | |
| 3 |   * Educational Community License, Version 2.0 (the "License"); you may | |
| 4 |   * not use this file except in compliance with the License. You may | |
| 5 |   * obtain a copy of the License at | |
| 6 |   * | |
| 7 |   * http://www.osedu.org/licenses/ECL-2.0 | |
| 8 |   * | |
| 9 |   * Unless required by applicable law or agreed to in writing, | |
| 10 |   * software distributed under the License is distributed on an "AS IS" | |
| 11 |   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express | |
| 12 |   * or implied. See the License for the specific language governing | |
| 13 |   * permissions and limitations under the License. | |
| 14 |   */ | |
| 15 | ||
| 16 |  package org.kuali.student.common.util; | |
| 17 | ||
| 18 |  import java.io.Serializable; | |
| 19 | ||
| 20 |  import net.sf.ehcache.Cache; | |
| 21 |  import net.sf.ehcache.CacheManager; | |
| 22 |  import net.sf.ehcache.Element; | |
| 23 | ||
| 24 |  /** | |
| 25 |   * Simplified api for enabling Service and DAO classes with EhCache.   | |
| 26 |   * @author garystruthers | |
| 27 |   * | |
| 28 |   */ | |
| 29 | public class EhCacheHelper { | |
| 30 | ||
| 31 | private CacheManager cacheManager; // singleton uses default ehcache.xml configuration in ehcache.jar | |
| 32 |          /** | |
| 33 |           *  | |
| 34 |           */ | |
| 35 | 0 |          public EhCacheHelper() { | 
| 36 | 0 |                  initCacheManager(); | 
| 37 | 0 |          } | 
| 38 | ||
| 39 | 0 |          public EhCacheHelper(String configurationFileName) { | 
| 40 | 0 |                  initCacheManager(configurationFileName); | 
| 41 | 0 |          } | 
| 42 | ||
| 43 | private void initCacheManager(String configurationFileName) { | |
| 44 | 0 |                  if(cacheManager == null) { | 
| 45 | 0 |                          cacheManager = CacheManager.create(configurationFileName);                          | 
| 46 | } | |
| 47 | 0 |          } | 
| 48 | ||
| 49 |          /** | |
| 50 |           * EhCache has a default configuration file within ehcache.jar which is used if there is no ehcache.xml in the classpath. | |
| 51 |           * It is a singleton, so it's only created once. | |
| 52 |           * @see http://ehcache.sourceforge.net/EhcacheUserGuide.html#id.s6.2   for default configuration  | |
| 53 |           * @see http://ehcache.sourceforge.net/EhcacheUserGuide.html#usingthecachemanager | |
| 54 |           * To customize configuration, add an ehcache.xml file to the classpath. | |
| 55 |           *  | |
| 56 |           */ | |
| 57 | private void initCacheManager() { | |
| 58 | ||
| 59 | 0 |                  if(cacheManager == null) { | 
| 60 | 0 |                          cacheManager = CacheManager.create();                          | 
| 61 | } | |
| 62 | 0 |          } | 
| 63 | ||
| 64 |          /** | |
| 65 |           * Creates a cache and adds it to the cache manager | |
| 66 |           * @param cacheName you could name the cache with the classname that uses it. | |
| 67 |           *  | |
| 68 |           */ | |
| 69 | public void createCache(String cacheName) { | |
| 70 | 0 |                  if(!cacheManager.cacheExists(cacheName)) { | 
| 71 | 0 |                          cacheManager.addCache(cacheName); | 
| 72 | } | |
| 73 | 0 |          } | 
| 74 | ||
| 75 |          /** | |
| 76 |           * Like Hibernate's saveOrUpdate, this is used to create a new cache element and update existing element | |
| 77 |           * The cache knows if cache.put if creating or updating an element. | |
| 78 |           * @param cacheName | |
| 79 |           * @param key        must be unique, should be descriptive | |
| 80 |           * @param value the thing cached | |
| 81 |           */ | |
| 82 | public void saveOrUpdateCacheElement(String cacheName, String key, Object value) { | |
| 83 | 0 |                  Cache cache = cacheManager.getCache(cacheName); | 
| 84 | 0 |                  Element element = new Element(key, value); | 
| 85 | 0 |                  cache.put(element); | 
| 86 | 0 |          } | 
| 87 | ||
| 88 |          /** | |
| 89 |           * Get the thing cached | |
| 90 |           * @param cacheName | |
| 91 |           * @param key | |
| 92 |           * @return a Serializable object Note, EhCache can support non-serializable object in memory only cache | |
| 93 |           */ | |
| 94 |          public Serializable getCacheElementValue(String cacheName, String key) { | |
| 95 | 0 |                  Element element = getCacheElement(cacheName, key); | 
| 96 | 0 |                  if(element == null) { | 
| 97 | 0 |                          return null; | 
| 98 | } | |
| 99 | 0 |                  return element.getValue(); | 
| 100 | } | |
| 101 | ||
| 102 | ||
| 103 |          /** | |
| 104 |           * Gets Element, useful for calling Element methods like getHitCount() | |
| 105 |           * @param cacheName | |
| 106 |           * @param key | |
| 107 |           * @return | |
| 108 |           */ | |
| 109 |          public Element getCacheElement(String cacheName, String key) { | |
| 110 | 0 |                  Cache cache = cacheManager.getCache(cacheName); | 
| 111 | 0 |                  return cache.get(key);                 | 
| 112 | } | |
| 113 | ||
| 114 |          /** | |
| 115 |           * Removes 1 element from cache | |
| 116 |           * @param cacheName | |
| 117 |           * @param key | |
| 118 |           */ | |
| 119 | public void evictCacheElement(String cacheName, String key) { | |
| 120 | 0 |                  Cache cache = cacheManager.getCache(cacheName); | 
| 121 | 0 |                  cache.remove(key); | 
| 122 | 0 |          } | 
| 123 | ||
| 124 |          /** | |
| 125 |           * Remove all elements from cache | |
| 126 |           * @param cacheName | |
| 127 |           */ | |
| 128 | public void evictAllCacheElements(String cacheName) { | |
| 129 | 0 |                  Cache cache = cacheManager.getCache(cacheName); | 
| 130 | 0 |                  cache.removeAll(); | 
| 131 | 0 |          } | 
| 132 | ||
| 133 |          /** | |
| 134 |           * Gets how many times element has been accessed. Useful for testing and optimization | |
| 135 |           * @param element | |
| 136 |           * @return | |
| 137 |           */ | |
| 138 | public long getCacheElementHitCount(Element element) { | |
| 139 | 0 |                  if(element == null) { | 
| 140 | 0 |                          return 0; | 
| 141 | } | |
| 142 | 0 |                  return element.getHitCount(); | 
| 143 | } | |
| 144 | ||
| 145 |          /** | |
| 146 |           * @return | |
| 147 |           */ | |
| 148 |          public String[] getCacheNames() { | |
| 149 | 0 |                  return cacheManager.getCacheNames(); | 
| 150 | } | |
| 151 | } |