La cache en Liferay 6.1, Introducción

Introducción

La cache es un aspecto muy importante para cualquier sistema que quiere alcanzar prestaciones adecuadas. Liferay Portal ofrece una integración con diferentes frameworks de cache. Por defecto, se cachean registros, contenido, etc.

Ehcache es un framework de cache distribuido muy potente, es un proyecto OpenSource desarrollada en Java. Liferay Portal, por defecto, ofrece integración con este framework. La configuración usa una cache en instancias locales. Esto significa que si se está usando un entorno clusterizado, cada nodo tendrá su propia caché. La cache en Liferay Portal trabaja sobre los objetos de negocio mediante tres niveles diferentes, todos ellos, por defecto, implementados mediante esta solución:

  1. El primer nivel es el de entidad, entity level.
  2. El segundo es el de finder.
  3. El tercero es el de Hibernate.

Estos niveles de cache pueden estar activos o no. La configuración de este elemento, como cualquier otro en Liferay Portal, se define gracias a su fichero de propiedades:

...
value.object.entity.cache.enabled=true
value.object.finder.cache.enabled=true
...

Cache del sistema

El framework EHCache utiliza un componente llamado Cache Manager, encargado de controlar el ciclo de vida de los objetos cacheados. Un mismo sistema puede trabajar con varios gestores de caché diferentes y, éstos, pueden configurarse mediante ficheros xml. Liferay Portal trabaja con varios Cache Managers diferentes.

  • Single-VM CacheManager: usado para cachear contenidos que no requiren replicación en entornos clusterizados. Son contenidos estáticos. Un ejemplo de este tipo de contenido pueden ser las plantillas de Velocity asociadas a los contenidos web. El fichero de configuración que parametriza el comportamiento de este manager se define mediante la propiedad ehcache.single.vm.config.location. Si queremos modificar el comportamiento de este gestor de cache, debemos redefinir en el fichero portal-ext.properties la propiedad apuntado a otro fichero.

ehcache.single.vm.config.location=/ehcache/liferay-single-vm.xml

  • Multi-VM CacheManager: usado para cachear recursos que sí requieren ser replicados en entornos clusterizados. Estos recursos incluyen respuestas a consultas de tipo finder, entidades, etc. El fichero de configuración que parametriza el comportamiento de este manager se define mediante la propiedad ehcache.multi.vm.config.location. Si queremos modificar el comportamiento de este gestor de cache, debemos redefinir en el fichero portal-ext.properties la propiedad apuntando a otra ruta.

ehcache.multi.vm.config.location=/ehcache/liferay-multi-vm-clustered.xml

Por otro lado , la propiedad ehcache.cache.event.listener.factory determina la estrategia de replicación utilizada:

ehcache.cache.event.listener.factory=net.sf.ehcache.distribution.RMICacheReplicatorFactory  

#ehcache.cache.event.listener.factory=net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory

Cache en Hibernate

Como ya sabemos, Liferay Portal utiliza Hibernate framework en la capa de persistencia. Hibernate soporta dos niveles de caché:
El primer nivel de caché es implementado por el propio framework, en cambio, el segundo se ofrece a través de frameworks de caché externos.

Por defecto, Liferay Portal configura Hibernate para que trabaje con EHCache como caché de segundo nivel. La propiedad hibernate.cache.provider_class detemina dicho proveedor. Como podemos ver, también nos ofrece otro tipo de alternativas:

    hibernate.cache.provider_class=com.liferay.portal.dao.orm.hibernate.EhCacheProvider

    #hibernate.cache.provider_class=net.sf.hibernate.cache.HashtableCacheProvider
    #hibernate.cache.provider_class=com.liferay.portal.dao.orm.hibernate.OSCacheProvider
    #hibernate.cache.provider_class=com.liferay.portal.dao.orm.hibernate.TerracottaCacheProvider

Se recomienda trabajar con EHCache en entornos clusterizados. La propiedad hibernate.cache.region.factory_class nos permite definir Factorías de regiones de cache para Hibernate mediante la siguiente configuración:

hibernate.cache.region.factory_class=com.liferay.portal.dao.orm.hibernate.region.SingletonLiferayEhcacheRegionFactory

Si Hibernate utiliza EHCache y su factoría de regiones, la propiedad net.sf.ehcache.configurationResourceName nos ayuda a configurar su comportamiento:

net.sf.ehcache.configurationResourceName=/ehcache/hibernate-clustered.xml

Otras propiedades interesantes relacionadas con la configuración de Hibernate son:

    hibernate.cache.use_query_cache=true
    hibernate.cache.use_second_level_cache=true
    hibernate.cache.use_minimal_puts=true
    hibernate.cache.use_structured_entries=false

Comentarios
comments powered by Disqus