EhCache
EhCache es uno de los frameworks más utilizados para el Cache De Objetos Java.
En general, EhCache consta de "regiones de cache" en donde se ubican objetos. Estas regiones se configuran en un archivo XML para determinar el tiempo de expiración, cantidad máxima de elementos, etc.
Ejemplo
Crearemos una región de cache llamada "dosIdeas". Luego, veremos cómo subir un objeto a dicha región, y cómo recuperarlo.
Archivo de configuración ehcache.xml
El archivo ehcache.xml tiene que residir en la raiz del classpath. En la raiz del jar de ehcache hay un archivo de configuración de ejemplo (ehcache-failsafe.xml), que tiene configurada una región predeterminada. Podemos copiar este archivo a nuestro proyecto y renombrarlo como ehcache.xml. A dicho archivo el agregaremos un región llamada "dosIdeas". Esta región mantendrá los elementos durante 1 segundo, y luego serán borrados de la región (atributo timeToLiveSeconds).
<cache name="dosIdeas" maxElementsInMemory="10000" maxElementsOnDisk="1000" eternal="false" overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="1" memoryStoreEvictionPolicy="LFU" />
Accediendo al caché
Subiremos un elemento al cache, y luego lo recuperaremos. Por último, esperaremos unos segundos y veremos cómo al volver a recuperar el objeto, el mismo no está más. Este método se ejecuta dentro de un test de JUnit
@Test public void testCache() throws InterruptedException { Persona persona = new Persona(); persona.setId("1"); persona.setNombre("Zim");
CacheManager manager = new CacheManager(); Cache cache = manager.getCache("dosIdeas");
//al cache se suben objetos Element. Un element consta de una clave y un valor. //La clave sera el medio para recuperar el objeto mas tarde. En el ejemplo, el "id" de la Persona. Element element = new Element(persona.getId(), persona); cache.put(element);
Persona personaCache = (Persona) cache.get(persona.getId()).getObjectValue();
assertEquals(persona, personaCache);
//esperamos unos instantes para que expire el cache... Thread.sleep(1500);
assertNull(cache.get(persona.getId())); }