viernes, agosto 28, 2009

Replicar la caché de segundo nivel en un cluster JBoss AS

El escenario es el siguiente: tenemos un cluster de servidores JBoss AS (4.2.x) con varios nodos, tenemos una única base de datos (en mi caso MySQL) y para evitar el uso abusivo de esta tenemos una caché de segundo nivel en cada nodo del cluster (que lógicamente sera JBoss Cache ya que nos viene de gratis con el servidor). Por defecto esta caché no se replicará cuando sea modificada en uno de los nodos en los otros nodos así que vamos a ver las modificaciones que tenemos que hacer.

Lo primero será modificar el fichero persistence.xml para definir el uso de la caché:

<!-- Activamos la caché -->
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<!-- Definimos un prefijo para las regiones de la caché -->
<property name="hibernate.cache.region_prefix" value="MiPrefijo"/>
<!-- Definimos el proveedor de la caché -->
<property name="hibernate.cache.provider_class" value="org.jboss.ejb3.entity.TreeCacheProviderHook"/>
<property name="hibernate.treecache.mbean.object_name" value="jboss.cache:service=EJB3EntityTreeCache"/>
Las clases que querarmos persistir en la caché tendrán que tener la siguiente anotación:

@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region="MiRegion")
En el fichero ejb3-entity-cache-service.xml definiermos la nueva región:

<!-- Definición de mi región-->
<region name="/MiPrefijo/MiRegion">
<attribute name="maxNodes">10000</attribute>
<attribute name="timeToLiveSeconds">5000</attribute>
</region>
Y eso es todo, ahora ya podéis divertiros escribiendo en la caché de un nodo y viendo como la otra cambia de valor automáticamente. Por supuesto está cache es mucho más configurable y en la web de JBoss podéis encontrar más información.

No hay comentarios:

Publicar un comentario