Objectif
La gestion du cache a pour objectif d'améliorer les performances au sein de l'application sans contraintes sur le développement.
Ainsi, on peut stocker en mémoire certains appels méthodes dans une map de données.
Dans l'application, on utilise 2 façons d'utiliser le cache :
- les annotations Spring
- l'utilisation ad hoc du cache via ehcache
Ces 2 méthodes se basent sur un stockage en mémoire défini par un bean cacheManager.
Déclaration Spring du cacheManager
Définition du bean cacheManager
Voici la définition du bean cacheManager :
<bean id="cacheManager" scope="singleton" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <description> This bean is used to configure EhCache. </description> <property name="configLocation" value="classpath:/properties/cache/ehcache.xml" /> </bean>
La seule chose à lui définir est l'emplacement de la configuration définissant l'ensemble des caches.
Définition du ehcache
Le fichier ehcache.xml définit l'ensemble des caches utilisé dans l'application.
On définit le cache de la manière suivante :
<cache name="org.esupportail.commons.services.ldap.CachingLdapServiceImpl" maxElementsInMemory="100" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true" />
On déclare alors :
- name : le nom du cache (qui peut être le nom de la classe ciblée)
- maxElementsInMemory : le nombre maximum d'éléments cachable en mémoire
- eternal : définit si le cache se purge ou non
- timeToIdleSecond : le nombre maximum de secondes d'un élément durant lequel il peut exister dans la mémoire cache sans être consulté.
- timeToLiveSeconds : le nombre maximum de secondes d'un élément durant lequel il peut exister dans le cache indépendamment de leur utilisation.
- overflowToDisk : définit si lorsqu'on atteint le maxElementsInMemory, on écrit les données sur le disque
De plus, on définit l'espace de stockage disque dans le cas de gestion de cache avec overflowToDisk à true :
<diskStore path="/tmp/opiR1/cache" />
Enfin, on va définir un cache par défaut dans lequel on stocke les données non définis par les précédents cache :
<defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" />