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