Configuration de la stratégie de la gestion de mémoire cache pour les portlets

La mise en cache par fragment des portlets nécessite que vous définissiez une stratégie de la gestion de mémoire cache dans un fichier cachespec.xml, soit dans le fichier d'archive Web de l'application Web du portlet, soit globalement. Si aucune stratégie de mise en cache n'est définie et applicable à un portlet particulier, ce portlet n'est pas placé dans la mémoire cache.

Les stratégies de mise en cache de WebSphere Application Server fournissent une grande flexibilité pour la définition d'ID cache et de règles d'invalidation correspondant aux exigences spécifiques des portlets individuels. Les stratégies de mise en cache que vous pouvez définir ne sont pas nécessairement compatibles avec le comportement de mise en cache défini par la Java Portlet Specification. Les sections suivantes fournissent quelques recommandations sur la manière d'exploiter les fonctions du fichier cachespec.xml file, pour définir une stratégie de mise en cache conforme à la spécification.

Expiration de la mise en cache. Les portlets définissent un délai d'expiration dans l'élément <expiration-cache> du descripteur de déploiement portlet.xml. En l'absence de cet élément, ou si sa valeur est zéro, le portlet n'est pas placé dans la mémoire cache. Le délai d'expiration de la mise en cache des portlets n'est défini que dans le descripteur de déploiement ; les valeurs de délai d'expiration de mise en cache indiquées dans un fichier cachespec.xml sont ignorées.

Portées de la mise en cache. Les portlets sont définis dans l'élément <caching-scope> du descripteur de déploiement portlet.xml, que le contenu du portlet soit partagé entre tous les utilisateurs ou qu'il contienne des informations propres à l'utilisateur et devant être placées individuellement dans la mémoire cache de chaque utilisateur. Pour gérer ce paramètre dans la définition de la stratégie de mise en cache, incluez l'attribut com.ibm.wsspi.portletcontainer.user_cache_scope dans la clé de cache, avec le composant de clé de cache suivant :
<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
Cet attribut a les valeurs suivantes :
  • La valeur public dans un portlet définissant la portée publique du cache.
  • L'ID de connexion de l'utilisateur dans un portlet définissant la portée privée du cache.
  • Null (anonyme) dans un portlet définissant la portée privée du cache si aucun utilisateur n'est connecté.

Si vous souhaitez mettre en cache le contenu du portlet pour un accès anonyme, même dans un portlet définissant la portée privée du cache, ajoutez <required>false</required> au composant de clé du cache. Cela implique que tous les accès anonymes au navigateur récupéreront le même contenu de mémoire cache.

Méthodes de cycle de vie des portlets. La Java Portlet Specification définit les quatre phases du cycle de vie : action, événement, affichage et ressources pour s'exécuter dans un portlet. Seules les phases d'affichage et de ressources produisent du contenu ; les phases d'action et d'événement appellent l'activité du portlet sans générer de contenu et ne doivent pas être placées dans la mémoire cache. La phase de cycle de vie d'un appel d'un portlet est disponible dans l'attribut de demande javax.portlet.lifecycle_phase. Vérifiez que le cycle de vie est correct en incluant le composant de clé de cache suivant :
<component id="javax.portlet.lifecycle_phase" type="attribute">
	<value>RENDER_PHASE</value>
</component>
Ce composant de clé de cache ne place dans la mémoire cache que les demandes render adressées au portlet. Placez dans la mémoire cache les demandes de ressources supplémentaires en ajoutant RESOURCE_PHASE. Dans de nombreux cas, la meilleure approche est de définir un élément <cache-id> séparé pour les demandes de ressources. L'ID ressources est disponible dans l'attribut de demande com.ibm.wsspi.portletcontainer.resource_id pour générer la clé de mise en cache dans les demandes de ressources.
Paramètres de demande. Les portlets peuvent typiquement afficher de nombreuses vues. Les paramètres Render distingue la vue à afficher. Chaque combinaison de paramètres permet une vue différente du portlet. Toutes les vues doivent être placées séparément dans la mémoire cache ; par conséquent, la carte complète des paramètres de demande doit normalement être incluse dans la clé de cache. L'attribut com.ibm.wsspi.portletcontainer.all_parameters fournit une valeur unique au contenu de la carte des paramètres qui peut être utilisée avec le composant de clé de cache suivant :
<component id="com.ibm.wsspi.portletcontainer.all_parameters" type="attribute">
	<required>false</required>
</component>
Si vous écrivez une stratégie de mise en cache pour un portlet spécifique et que vous savez exactement quelles vues du portlet sont liées à quels paramètres de demande, il est généralement plus efficace d'utiliser des éléments <parameter> spécifiques dans la clé de cache pour ne placer dans la mémoire cache que les vues les plus importantes du portlet.

Autres composants de clé de cache. En fonction de l'utilisation prévue, vous devrez inclure d'autres informations dans la clé de cache si le contenu renvoyé dépend de ces informations (par exemple, le mode de portlet et l'état de la fenêtre ou l'environnement local de la demande dans un portail multilingue). Dans un portail multi-dispositif qui prend en charge différents types de marquage, le type de contenu renvoyé doit également faire partie de la clé de cache. Le type de contenu d'un portlet est disponible dans l'attribut de demande com.ibm.wsspi.portletcontainer.response_contenttype.

Invalidation du cache. La Java Portlet Specification stipule que les requêtes d'événements et d'actions adressées à un portlet doivent invalider tout le contenu placé dans la mémoire cache. Les définitions de mise en cache d'un portlet autorisent généralement la mise en cache de plusieurs vues d'un portlet en même temps. Pour les invalider toutes, utilisez le mécanisme d'ID de dépendance de cachespec.xml.

Définissez un ID de dépendance commun à toutes les vues devant être invalidées par une action. L'ID commun n'incluera généralement que l'ID fenêtre du portlet et la portée utilisateur, de manière à ce qu'une action d'un portlet n'affecte pas les entrées de caché privées d'autres utilisateurs :
<dependency-id>action
	<component id="" type="portletWindowId"/>
	<component id="com.ibm.wsspi.portletcontainer.user_cache_scope" type="attribute"/>
</dependency-id>
Définit une règle d'invalidation répétant l'ID de dépendance et ajoutant comme condition la méthode de cycle de vie en cours. Il est essentiel que l'attribut ignore-value se trouve dans la partie de condition. L'attribut du cycle de vie ne doit pas faire partie de l'ID d'invalidation renvoyé car celui-ci doit correspondre exactement à l'ID de dépendance indiqué ci-dessus.
<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>
Suivant le même modèle, indiquez des règles d'invalidation plus complexes dans les stratégies de mise en cache de portlets individuels (par exemple, vous pouvez n'invalider qu'un sous-ensemble des vues du portlet pour des actions spécifiques déterminées par les paramètres de demande). L'exemple de code suivant décrit une configuration de mise en cache générique conforme au comportement défini par la Java Portlet Specification :
Fichier échantillon cachespec.xml

<?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>

Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdyn_portletcachepolicy
Nom du fichier : rdyn_portletcachepolicy.html