eCandidat (esup-opi)

Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

Objectif

La gestion du cache a pour objectif d'améliorer les performances au sein de l'application sans contraintes sur le développement.

...

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 :

...

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.

...

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

Fonctionnement

Le cache est géré par annotation. Il suffit donc d'annoter une méthode pour quelle soit gérée par le cache.

...

Bloc de code
public void addTraitement(final Traitement traitement) {
	if (log.isDebugEnabled()) {
		log.debug("entering addTraitement( " + traitement + " )");
	}
	daoService.addTraitement(traitement);
	//flush the other instance
	executeFlushCache(CacheModelConst.ACCESS_RIGHT_DEFAULT, "addTraitement");
}

Déclaration Spring

Fichier properties/cache/cache.xml

Le bean cacheManager déclare le fichier ehcache.xml qui décrit chaque cache.

...

Bloc de code
<bean id="autoproxy"
	class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
	<property name="beanNames">
		<list>
			<idref bean="domainService" />
			<idref bean="parameterService" />
			<idref bean="domainApoService" />
			<idref bean="businessCacheService" />
		</list>
	</property>
	<property name="interceptorNames">
		<list>
			<value>cachingInterceptor</value>
			<value>flushingInterceptor</value>
		</list>
	</property>
</bean>

Fichier properties/cache.properties

Ce fichier contient la description des models pour le flush (pour vider les caches). Un model peut regrouper plusieurs cacheName ce qui permet de vider plusieurs cache lors du passage dans une méthode.

...

Bloc de code
Le model user vide le cache des utilisateurs et celui des pièces manquantes.
user=cacheNames=fr.univ.rennes1.cri.opiR1.domain.beans.user.User,fr.univ.rennes1.cri.opiR1.domain.beans.user.candidature.MissingPiece

Utilisation

Définition des models

Les models utilisés pour le cache et pour le flush sont identiques et sont déclarés dans une classe static : fr.univ.rennes1.cri.opiR1.web.utils.CacheModelConst

  • Exemple dans la classe CacheModelConst 
     
    /**
  • The name of model for the domain access right cache.
  • (Profile, Treatment,...)
    */
    public static final String ACCESS_RIGHT_DEFAULT = "accessRight.default";* Exemple d'utilisation dans une annotation : cf ci-dessus dans la partie Fonctionnement

Gestion du cache avec ehcache

L'utilisation ad hoc du cache revient à initialiser, charger et lire "manuellement" les éléments via le cacheManager.

Initialisation du cache

Voici un exemple de code permettant l'instanciation du cache :

...

La classe Cache fait partie de la librairie net.sf.ehcache.

Chargement du cache

Une fois le cache instanciation faite, on initialise le cache avec les données qu'on souhaite stocker :

...

La classe Element fait partie de la librairie net.sf.ehcache.

Lecture du cache

Lorsqu'on veut récupérer un des éléments stocké dans le cache, on procède comme suit :

...