Le service de cache simplifie l'intégration de cache de données issues de web-service.
En particulier, il permet de :
Le service de cache est essentiellement utilisé pour les appels Nuxeo
Le service de cache est injecté dans les portlets. Pour récupérer le service, procéder comme suit
private ICacheService serviceCache;
@Override
public void init(PortletConfig config) throws PortletException
{
super.init(config);
serviceCache = (ICacheService) getPortletContext().getAttribute("CacheService");
if (serviceCache == null) {
throw new PortletException("Cannot start portlet due to service unavailability");
}
}
La mise à jour cache repose sur un pattern commande. La commande de mise à jour du cache est définie dans un invoker. Cet invoker sera appelé uniquement lors de la mise à jour du cache, si celle si est nécessaire :
public class DynamicCacheInvoker implements IServiceInvoker {
public Object invoke() throws Exception {
return cacheDatas;
}
Cet invoker est référencé dans un objet cacheInfo. Cet objet définit les paramètres d'appel du cache, à savoir :
CacheInfo cacheInfos = new CacheInfo( cacheKey, CacheInfo.CACHE_SCOPE_PORTLET_CONTEXT,
dynamicInvoker, null, getPortletContext(), false);
content = (PortletContent) serviceCache.getCache(cacheInfos);
Actuellement, la gestion est transparente : si l'invoker échoue, l'erreur est remontée à l'appelant, et c'est le rôle de l'appelant d'aller chercher l'information dans le cache (mode ForceNOTReload).
cacheInfos.setForceNOTReload(true);
content = (PortletContent) serviceCache.getCache(cacheInfos);
if (content != null) {
....
}
Si le service est indisponible temporairement, il est possible de rafraichir explicitement la validité du cache, afin d'éviter des appels en erreur. Pour cela, il faut mettre à jour le cache via un Invoker spécifique (qui contient la donnée du cache) et préciser le paramètre ForceReload
staticCacheInfos.setInvoker( StaticInvoker);
cacheInfos.setForceReload(true);
(PortletContent) serviceCache.getCache(staticCacheInfos);