...
| 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="cacheProvider"
scope="singleton"
class="org.springmodules.cache.provider.ehcache.EhCacheFacade">
<property name="cacheManager">
<ref local="cacheManager" />
</property>
</bean>
|
Ces beans ci-dessous permettent d'utiliser les annotations pour la gestion du cache. L'attribut cachingModels définit un libellé pour le modelId (utilisé dans l'annotation) et le nom du cache dans ehcache.xml
| Bloc de code |
|---|
<bean id="cachingAttributeSource"
class="org.springmodules.cache.annotations.AnnotationCachingAttributeSource">
</bean>
<bean id="cachingInterceptor"
class="org.springmodules.cache.interceptor.caching.MetadataCachingInterceptor">
<property name="cacheProviderFacade" ref="cacheProvider" />
<property name="cachingAttributeSource" ref="cachingAttributeSource" />
<property name="cachingModels" >
<props>
<prop key="accessRight.default">
cacheName=fr.univ.rennes1.cri.opiR1.domain.beans.parameters.accessRight.default
</prop>
<prop key="nomenclature">
cacheName=fr.univ.rennes1.cri.opiR1.domain.beans.parameters.nomenclature
</prop>
<prop key="references">
cacheName=fr.univ.rennes1.cri.opiR1.domain.beans.parameters.references
</prop>
<prop key="geographieApogee">
cacheName=gouv.education.apogee.commun.transverse.dto.geographie
</prop>
...
</props>
</property>
</bean>
<bean id="cachingAttributeSourceAdvisor"
class="org.springmodules.cache.interceptor.caching.CachingAttributeSourceAdvisor">
<constructor-arg ref="cachingInterceptor" />
</bean>
|
Ces beans, ci-dessous, permettent d'utiliser les annotations pour vider les caches. Les "models" sont définis dans un fichier de properties. Un model peut représenter plusieurs cache. (fonctionnement spécifique à ehcache) Ceci permet de vider plusieurs caches en même temps.
| Bloc de code |
|---|
<bean id="flushingAttributeSource"
>
</bean>
<bean id="flushingInterceptor"
class="org.springmodules.cache.interceptor.flush.MetadataFlushingInterceptor">
<property name="cacheProviderFacade" ref="cacheProvider" />
<property name="flushingAttributeSource" ref="flushingAttributeSource" />
<property name="flushingModels" ref="cachePropertyConfigurer"/>
</bean>
<bean id="flushingAttributeSourceAdvisor"
class="org.springmodules.cache.interceptor.flush.FlushingAttributeSourceAdvisor">
<constructor-arg ref="flushingInterceptor" />
</bean>
<bean id="cachePropertyConfigurer"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:/properties/cache.properties" />
</bean>
|
Ce bean permet de définir les beans dans lesquelles nous pourrons utiliser les annotations. Dans OPI ces beans correspondent à la couche métier de l'application.
| 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.
- Exemple :
| 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