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.

Ámbitos de memoria caché. Los portlets se definen en el elemento <caching-scope> del descriptor de despliegue portlet.xml, si se debe compartir el contenido del portlet entre todos los usuarios, o si contiene información específica de usuario y debe colocarse en la memoria caché individualmente para cada usuario. Para mantener este valor en la definición de política de memoria caché, incluya el atributo com.ibm.wsspi.portletcontainer.user_cache_scope en la clave de memoria caché con el siguiente componente de clave de memoria:
<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é.

Métodos de ciclo de vida de portlet. La especificación de portlet Java define las cuatro fases del ciclo de vida: acción, suceso, presentación y recurso para la ejecución en un portlet. Sólo las fases de presentación y recurso producen contenido; las fases de acción y suceso invocan actividad de portlet sin generar contenido y no deben colocarse en memoria caché. La fase de ciclo de vida para una llamada de portlet está disponible en el atributo de solicitud javax.portlet.lifecycle_phase. Compruebe si el ciclo de vida es correcto incluyendo el siguiente componente de clave de 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.
Parámetros de solicitud. Los portlets generalmente pueden mostrar diversas vistas. Los parámetros de presentación distinguen qué vista se muestra. Cada combinación de parámetros se centra en una vista diferentes del portlet. Todas las vistas deben colocarse en memoria caché por separado; por tanto, toda la correlación de parámetros de solicitud debe incluirse normalmente en la clave de memoria caché. El atributo com.ibm.wsspi.portletcontainer.all_parameters proporciona un valor exclusivo para el contenido de toda la correlación de parámetros de solicitud que puede utilizarse con el siguiente componente de clave de memoria caché:
<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.

Defina un ID de dependencia común para todas las vistas que una acción debe invalidar. El ID común normalmente sólo incluirá el ID de ventana de portlet y el ámbito de usuario, para que una acción de portlet no afecte a las entradas de memoria caché privadas para otros usuarios:
<dependency-id>action
				<component id="" type="portletWindowId"/>
				<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
</dependency-id>
Defina una regla de invalidación que repita el ID de dependencia y añada el método de ciclo de vida actual como condición. Es esencial tener el atributo ignore-value en la parte de la condición. El atributo de ciclo de vida no debe formar parte del ID de invalidación que se devuelve porque el ID de invalidación debe coincidir exactamente con el ID de dependencia especificado anteriormente.
<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>
Siguiendo el mismo patrón, especifique más reglas de invalidación complejas en políticas de memoria caché para portlets individuales (por ejemplo, sólo puede invalidar un subconjunto de las vistas de portlet para acciones específicas determinadas por parámetros de solicitud). En el siguiente código de ejemplo se describe la configuración de memoria caché que se ajusta al comportamiento definido por la especificación de portlet Java:
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>

Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdyn_portletcachepolicy
File name: rdyn_portletcachepolicy.html