...
La gestion du cache a pour objectif d'améliorer les performances au sein de l'application sans contraintes sur le développement. Cette gestion du cache expliquée ci-dessous est couplée avec les annotations fournis dans esup-commons.
...
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 :
| Bloc de code |
|---|
<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 :
| Bloc de code |
|---|
<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 :
| Bloc de code |
|---|
<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 :
| Bloc de code |
|---|
<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU" />
|
Gestion du cache par annotation Spring
...