Configuración de políticas de memoria caché para portlets
El almacenamiento en memoria caché de fragmentos para portlets requiere que defina una política de memoria caché en un archivo cachespec.xml, dentro del archivo WAR (archivadores web de aplicaciones) del portlet o globalmente. Si no se define una política de memoria caché que sea aplicable a un portlet determinado, dicho portlet no se almacena en memoria caché.
Las políticas de memoria caché de WebSphere Application Server proporcionan mucha flexibilidad para definir los ID de memoria caché y las reglas de invalidación que cumplen con los requisitos específicos de portlets individuales. Las políticas de memoria caché que puede definir no son necesariamente compatibles con el comportamiento en memoria caché definido por la especificación de portlet Java. Las secciones siguientes proporcionan algunas recomendaciones sobre cómo puede explotar las características del archivo cachespec.xml para definir una política de memoria caché que cumpla con la especificación.
Caducidad de memoria caché. Los portlets definen un tiempo de caducidad de memoria caché en el elemento <expiration-cache> del descriptor de despliegue portlet.xml. Si este elemento no está presente o tiene un valor de cero, el portlet no se coloca en memoria caché. El tiempo de caducidad de memoria caché para portlets sólo se define en el descriptor de despliegue; los valores de tiempo de espera de memoria caché especificados en un archivo cachespec.xml no tienen ningún efecto.
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
Este atributo tiene los valores siguientes:- El valor, public, en un portlet que define el ámbito de memoria caché público.
- El ID de usuario de inicio de sesión actual en un portlet que define el ámbito de memoria caché privado.
- Nulo (anónimo) en un portlet que define el ámbito de memoria caché privado si ningún usuario ha iniciado la sesión.
Si desea colocar en memoria caché el contenido del portlet para un acceso anónimo, incluso en un portlet que defina el ámbito de memoria caché privado, añada <required>false</required> al componente de clave de memoria caché. Esto implica que todos los accesos anónimos del navegador recuperarán el mismo contenido en memoria caché.
<component id="javax.portlet.lifecycle_phase" type="attribute">
<value>RENDER_PHASE</value>
</component>
Este componente de clave de memoria caché sólo almacena en memoria caché solicitudes de presentación en el portlet. Añada RESOURCE_PHASE para almacenar en memoria caché más solicitudes.
En muchos casos, el mejor enfoque es definir un elemento <cache-id> aparte para las solicitudes de recurso. El ID de recurso está disponible en el atributo de solicitud com.ibm.wsspi.portletcontainer.resource_id para colocar en memoria caché la generación de claves en solicitudes de recursos. <component id="com.ibm.wsspi.portletcontainer.all_parameters" type="attribute">
<required>false</required>
</component>
Si escribe una política de memoria caché para un portlet determinado, y sabe exactamente en qué vistas del portlet se centran los parámetros de solicitud, suele ser más eficiente utilizar elementos <parameter> determinados en la clave de memoria caché para almacenar en memoria caché únicamente las vistas más importantes del portlet.Otros componentes de clave de memoria caché. Según el caso de utilización, tendrá que incluir otra información en la clave de memoria caché, si el contenido que se devuelve depende de ello (por ejemplo, la modalidad de portlet y el estado de ventana, o bien el entorno local de la solicitud en un portal multilingüe). En un portal multidispositivo que dé soporte a diferentes tipos de marcas, el tipo de contenido que se devuelve también debe formar parte de la clave de memoria caché. El tipo de contenido para un portlet está disponible en el atributo de solicitud com.ibm.wsspi.portletcontainer.response_contenttype.
Invalidación de memoria caché. La especificación de portlet Java indica que las solicitudes de acción y de suceso en un portlet deben invalidar todo el contenido almacenado en memoria caché actualmente. Las definiciones de memoria caché de portlet suelen permitir el almacenamiento en memoria caché de diversas vistas de un portlet simultáneamente. Para invalidarlas todas, utilice el mecanismo de ID de dependencia de cachespec.xml.
<dependency-id>action
<component id="" type="portletWindowId"/>
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
</dependency-id>
<invalidation>action
<component id="" type="portletWindowId"/>
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
<component id="javax.portlet.lifecycle_phase" type="attribute" ignore-value="true">
<value>ACTION_PHASE</value>
<value>EVENT_PHASE</value>
</component>
</invalidation>
Archivo cachespec.xml de ejemplo
<?xml version="1.0"?>
<!DOCTYPE cache SYSTEM "cachespec.dtd">
<cache>
<cache-entry>
<class>portlet</class>
<name>MyPortlet</name>
<property name="consume-subfragments">true</property>
<cache-id>
<component id="" type="portletWindowId"/>
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
<component id="" type="portletWindowState">
<!-- minimized portlets are not cached -->
<not-value>minimized</not-value>
</component>
<component id="" type="portletMode"/>
<component id="" type="locale"/>
<component id="com.ibm.wsspi.portletcontainer.response_contenttype" type="attribute"/>
<component id="com.ibm.wsspi.portletcontainer.all_parameters" type="attribute">
<required>false</required>
</component>
<component id="javax.portlet.lifecycle_phase" type="attribute">
<value>RENDER_PHASE</value>
</component>
</cache-id>
<dependency-id>action
<component id="" type="portletWindowId"/>
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
</dependency-id>
<invalidation>action
<component id="" type="portletWindowId"/>
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
<component id="javax.portlet.lifecycle_phase" type="attribute" ignore-value="true">
<value>ACTION_PHASE</value>
<value>EVENT_PHASE </value>
</component>
</invalidation>
</cache-entry>
</cache>