Fichier cachespec.xml
Le cache analyse le fichier cachespec.xml au démarrage du serveur, puis extrait de chaque élément cache-entry un ensemble de paramètres de configuration. Chaque fois qu'un nouveau servlet ou un autre objet mémorisable est initialisé, le cache tente de faire correspondre chacun des éléments cache-entry pour rechercher les informations de configuration associées à cet objet.
Les éléments cache-entry peuvent se trouver dans l'élément cache racine ou dans un élément cache-instance. Les entrées de cache qui se trouvent dans l'élément root sont mises en cache avec l'instance de cache par défaut. Les entrées de cache qui se trouvent dans l'élément <cache-instance> sont mises en cache dans cette instance de cache spécifique. Des objets mémorisables différents possèdent des éléments class différents. Pour définir l'objet particulier auquel une règle de cache fait référence, utilisez l'élément name.
Emplacement
Placez le fichier cachespec.xml dans le module de déploiement. Utilisez l'outil d'assemblage pour définir les objets mémorisables. Voir les rubriques relatives à l'assemblage d'applications. Vous pouvez également placer un fichier cachespec.xml global dans le répertoire des propriétés du serveur d'applications. Lorsque le répertoire de propriétés du serveur d'applications contient un fichier cachespec.xml global et qu'une application contient un fichier cachespec.xml, les entrées des deux fichiers cachespec.xml sont fusionnées. Si des entrées des deux fichiers sont conflictuelles, les entrées du fichier cachespec.xml se trouvant dans l'application remplacent celles du fichier cachespec.xml global de cette application.
Le fichier cachespec.dtd est disponible dans le répertoire des propriétés du serveur d'applications. Le fichier cachespec.dtd définit la structure légale et les éléments que votre fichier cachespec.xml peut contenir.
Remarques d'utilisation
- Eléments Cachespec.xml
- L'élément racine du fichier cachespec.xml est cache, lequel contient des éléments cache-instance et cache-entry. Les éléments cache-entry peuvent également être placés à l'intérieur d'éléments cache-instance de façon à ce que l'entrée de cache fasse partie d'une instance de cache autre que l'instance par défaut.
- cache-instance
- <cache-instance
name="cache_instance_name"></cache-instance>
L'attribut de nom correspond au nom JNDI (Java™ Naming and Directory Interface) de l'instance de cache qui est défini dans la console d'administration.
Chaque élément cache-instance doit contenir au moins un élément cache-entry. Une entrée de cache qui est mise en correspondance dans un élément cache-instance est mise en cache dans l'instance de cache du servlet qui est spécifiée par l'attribut de nom. Si des éléments cache-entry identiques existent dans les éléments cache-instance, alors le premier élément cache-entry concordant est utilisé.
- cache-entry
- Chaque entrée de cache doit indiquer des informations de base nécessaires à son traitement par le cache dynamique. La présente section explique la fonction de chaque élément du fichier cachespec.xml, notamment :
- class
- name
- sharing-policy
- skip-cache
- propriété
- cache-id
La dernière version de WebSphere Application Server permet de définir plusieurs règles de cache pour un servlet unique. Par exemple, si vous définissez plusieurs mappages pour un servlet dans le fichier web.xml, vous pouvez créer une entrée de cache pour chaque mappage.
- class
<class>command | servlet | webservice | JAXRPCClient | static | portlet </class>
Cet élément obligatoire détermine la façon dont le serveur d'applications interprète la définition de règle cache restante. La valeur servlet désigne les servlets et les fichiers JSP (JavaServer Pages) déployés dans le moteur de servlet de WebSphere Application Server. La classe webservice permet l'extension du servlet avec des types de composant particuliers pour les requêtes de services Web. JAXRPCClient permet de définir une entrée de cache pour le cache du client des services Web. La valeur command fait référence à des classes utilisant le modèle de programmation de commande WebSphere Application Server. La valeur static fait référence aux fichiers qui stockent le contenu statique. Les exemples suivants illustrent l'utilisation de l'élément class : :
<class>command</class> <class>servlet</class> <class>webservice</class> <class>JAXRPCClient</class> <class>static</class> <class>portlet</class>
- name
<name>name</name>
Suivez les instructions relatives à l'élément name ci-après pour spécifier un objet pouvant être mis en cache.- Pour les commandes, cet élément obligatoire doit inclure le nom de package, s'il existe,
et le nom de classe, y compris la mention .\class à la fin de l'objet configuré.Important : Si vous demandez la mise en antémémoire des commandes dans le fichier cachespec.xml et que la mise en antémémoire des servlets n'est pas activée dans le serveur d'applications sur lequel s'exécute l'application, une erreur se produit. Le serveur d'applications va tenter d'obtenir une instance du cache. Pour éliminer l'erreur, activez la mise en antémémoire des servlets.
- Pour les servlets et les fichiers JSP, si le fichier cachespec.xml se trouve dans le répertoire des propriétés WebSphere Application Server, cet élément obligatoire doit inclure l'URI complet du fichier JSP ou du servlet à mettre en cache. Pour les servlets et les fichiers JSP, si le fichier cachespec.xml se trouve dans l'application Web, cet élément obligatoire peut occuper un emplacement relatif à la racine du contexte de cette application Web.
- Pour les services Web, il faut inclure l'URI du routeur SOAP (Simple Object Access Protocol) associé au service Web à placer en cache.
- Pour le cache du client de services Web, le nom correspond au point de contact cible du service Web pouvant être mis en cache ou à l'URI du routeur SOAP associé au service Web pouvant être mis en cache. Pour définir le nom du cache du client des services Web, vous pouvez utiliser l'emplacement de l'adresse SOAP spécifié dans le fichier WSDL (Web Services Description Language).
- Pour les fichiers statiques, si le fichier cachespec.xml se trouve dans le répertoire des propriétés WebSphere Application Server, cet élément obligatoire doit inclure l'URI complet du fichier à mettre en cache. Si le fichier cachespecm.xml se trouve dans l'application Web, cet élément obligatoire peut occuper un emplacement relatif à la racine du contexte de cette application. Pour une application Web ayant une racine de contexte, la règle de cache s'appliquant aux fichiers utilisant la classe statique doit être spécifiée dans l'application Web, et pas dans le répertoire de propriétés.
- Pour les portlets, si le fichier cachespec.xml se trouve dans le répertoire des propriétés WebSphere Application Server, cet élément obligatoire doit inclure le chemin de contexte complet et le nom du portlet à mettre en cache. Si le fichier cachespec.xml se trouve dans l'application Web, cet élément obligatoire est le nom de portlet relatif à la racine du contexte de cette application Web.
Conseil : L'application Web est l'emplacement préféré du fichier cachespec.xml.Vous pouvez indiquer plusieurs éléments name dans un cache-entry si plusieurs mappages font référence au même servlet.
Les exemples suivants illustrent l'utilisation de l'élément name :<name>com.mycompany.MyCommand.class</name> <name>default_host:/servlet/snoop</name> <name>com.mycompany.beans.MyJavaBean</name> <name>mywebapp/myjsp.jsp</name> <name>/soap/servlet/soaprouter</name> <name>http://remotecompany.com:9080/service/getquote</name> <name>mywebapp/myLogo.gif</name>
- Pour les commandes, cet élément obligatoire doit inclure le nom de package, s'il existe,
et le nom de classe, y compris la mention .\class à la fin de l'objet configuré.
- sharing-policy
<sharing-policy> not-shared | shared-push | shared-pull | shared-push-pull</sharing-policy>
Dans un cluster doté d'un cache réparti, ces valeurs déterminent les caractéristiques de partage des entrées créées à partir de cet objet. En l'absence de cet élément, une valeur not-shared est utilisée.
Dans les environnement à serveur unique, not-shared est la seule valeur valide.
Sur la plateforme z/OS, vous pouvez activer la réplication entre les processus servant dans un serveur d'applications de base à l'aide des propriétés personnalisées JVM (Java Virtual Machine) DynacacheEnableUnmanagedServerReplication et DynacacheUnmanagedServerReplicationType. Lorsque vous activez une réplication, la valeur par défaut est not-shared. Cette propriété n'a pas d'incidence sur la distribution vers les processeurs Edge Side Include via la propriété de mise en cache de fragments Edge.
Pour plus d'informations, voir l'article relatif à la configuration de la réplication du cache.
Tableau 1. Valeurs des règles de partage. Valeurs et description des règles de partage. valeur Description not-shared Les entrées de cache de cet objet ne sont pas partagées entre des serveurs d'applications différents. Ces entrées peuvent contenir des données non sérialisables. Par exemple, un servlet mis en cache peut placer des objets non sérialisables dans les attributs de requête, si le type <class> le permet. Eviter les incidents: Le serveur d'applications réplique toujours les entrées d'invalidation. Celles-ci ne sont pas concernées par la règle de partage.gotcha
shared-push Les entrées de cache de cet objet sont automatiquement distribuées aux mémoires cache dynamiques des autres serveurs d'applications ou des machines JVM (Java virtual machine) associées. Chaque cache possède une copie de l'entrée au moment de sa création. Ces entrées ne peuvent pas stocker de données non sérialisables. shared-pull Les entrées de cache de cet objet sont partagées entre des serveurs d'applications, à la demande. Si un serveur d'applications reçoit un échec de cache pour cet objet, il interroge les serveurs d'applications associés pour vérifier s'ils possèdent l'objet. Si aucun serveur d'applications ne possède une copie mise en cache de l'objet, le serveur d'applications d'origine exécute la requête et génère l'objet. Ces entrées ne peuvent pas stocker de données non sérialisables. Ce mode de partage est déconseillé. shared-push-pull Les entrées de cache de cet objet sont partagées entre des serveurs d'applications, à la demande. Lorsqu'un serveur d'applications génère une entrée de cache, il diffuse l'ID cache de l'entrée créée à tous les serveurs d'applications associés. Chaque serveur détermine ensuite si une entrée existe pour un ID cache donné. Au niveau d'une requête donnée de cette entrée, le serveur d'applications sait si l'entrée doit être générée ou si elle doit être extraite d'un autre emplacement. Ces entrées ne peuvent pas stocker de données non sérialisables. L'exemple suivant présente une règle de partage :<sharing-policy>not-shared</sharing-policy>
- skip-cache
- Prend le nom d'un attribut de requête qui, s'il est présent dans le contexte de requête, dicte que la réponse ne peut pas être extraite de l'instance de cache spécifiée. Cette propriété permet de prévisualiser le contenu dans les systèmes de production et de vérifier que l'application fonctionne correctement.
<cache> <skip-cache-attribute>att1</skip-cache-attribute> <!–Applies only to the base cache- -> ... <cache-instance name="instance1"> <skip-cache-attribute>att2</skip-cache-attribute> <!-Applies only to this instance- -> ... </cache-instance> </cache>
- propriété
<property name="key">value</property>
clé est le nom de la propriété de cet élément d'entrée de cache, et valeur est la valeur correspondante.
Vous pouvez définir des propriétés facultatives au niveau d'un objet pouvant être mis en cache, par exemple, une description du servlet configuré. La classe détermine les propriétés valides de l'entrée de cache. A ce stade, les propriétés suivantes sont définies :
Tableau 2. Valeurs de propriété. Valeurs de propriété et classes valides. Propriété Classes valides valeur ApplicationName Toutes Remplace l'ID de l'application JavaEEName, de sorte que plusieurs applications puissent partager un espace nom d'ID cache commun. EdgeCacheable Servlet True ou false. La valeur par défaut est false. Si la propriété a pour valeur true, le servlet ou le fichier JSP est demandé en externe à un processeur Edge Side Include. Le fait que le servlet ou le fichier JSP puisse être stocké ou non en cache est fonction du reste de la spécification de cache. Les éléments autorisés pour les entrées générales du cache edgecacheable sont PARAMETER, HEADER, COOKIE et PATH_INFOSERVLET_PATH.
ExternalCache Servlet et portlet Indique le nom de cache externe. Ce nom doit correspondre au nom du groupe de caches externes. consume-subfragments Servlet, service Web ou portlet True ou false. La valeur par défaut est false. Lorsqu'un servlet est mis en cache, seul son contenu est stocké et celui-ci inclut des signets pour d'autres fragments vers lesquels il effectue des inclusions ou des acheminements. Consume-subfragments (CSF) indique au cache de ne pas arrêter de sauvegarder le contenu lors de l'inclusion d'un servlet enfant. L'entrée parent, celle marquée CSF, contient tout le contenu de tous les fragments compris dans son entrée de cache, formant ainsi une seule grosse entrée de cache ne comprenant ni inclusions, ni acheminements mais le contenu de l'arborescence complète des entrées. CSF (Consume-subfragments) peut limiter sensiblement les traitements à effectuer par le serveur d'applications mais sert habituellement uniquement lorsque la demande HTTP externe contient toutes les données nécessaires pour déterminer l'arborescence complète des fragments inclus. Utilisez l'élément <exclude> pour indiquer au cache d'arrêter la consommation pour le fragment exclu, et de créer à la place une marque de réservation pour l'inclusion ou le défilement vers l'avant. Par exemple, excluez A.jsp de consume-subfragment comme suit :<property name="consume-sbufragments">true <exclude>/A.jsp<exclude> </property>
do-not-consume Servlet, service Web ou portlet True ou false. La valeur par défaut est false. Lorsque la propriété consume-subfragment est définie sur true pour un fragment parent, le contenu du fragment enfant est enregistré dans l'entrée de cache du parent. La propriété Do-not-consume (DNC) indique au cache d'arrêter d'enregistrer le contenu de ce fragment dans l'entrée de cache du parent et de créer à la place une marque de réservation pour l'inclusion ou le défilement vers l'avant. alternate_url Servlet Indique l'URL utilisée pour invoquer le servlet ou le fichier JSP. La propriété n'est correcte que si la propriété EdgeCacheable est également définie pour l'entrée de cache. persist-to-disk Toutes True ou false. La valeur par défaut est true. Quand cette propriété est définie sur false, l'entrée de cache n'est pas écrite sur le disque en cas de dépassement ou d'arrêt du serveur. save-attributes Servlet et portlet True ou false. La valeur par défaut est true. Quand cette propriété est définie sur false, les attributs de la requête ne sont pas enregistrés dans l'entrée de cache. Utilisez l'élément <exclude> pour spécifier les attributs de requête qui ne s'appliquent pas à la propriété save-attributes. Par exemple, vous enregistrez uniquement l'attribut attr1 avec l'entrée de cache :<property name= "save-attributes">false <exclude>attr1</exclude> </property>
Pour enregistrer tous les attributs à l'exception de l'attribut attr1 dans l'entrée de cache, définissez la propriété sur true dans l'exemple précédent. Si vous n'utilisez pas l'élément <exclude>, soit l'ensemble des attributs de requête sont enregistrés avec l'entrée de cache, soit aucun d'eux ne l'est.
delay-invalidations Commande True ou false. Lorsque cette propriété a pour valeur true, les commandes qui invalident les objets mis en cache en fonction des règles d'invalidation de cette entrée de cache invalident les entrées de cache après l'exécution. Par défaut, l'invalidation se produit avant que la commande ne s'exécute. store-cookies Servlet et portlet On ou off. La valeur par défaut est On. Cette propriété utilise un ou plusieurs noms de cookies pour son argument qui est enregistré avec l'objet de cache et restauré par le cache de servlet dans la réponse avec un en-tête set-cookie. Enregistrez tous les cookies excepté cookie1, comme élément de cache-entry comme suit :<property name="store-cookies">true <exclude>cookie</exclude> </property>
Enregistrez seulement cookie1, comme élément de cache-entry comme suit :<property name="store-cookies">false <exclude><cookie1</exclude> </property>
ignore-get-post Servlet et portlet True ou false. La valeur par défaut est false. Lorsque la propriété est définie sur true, le type de requête n'est pas ajouté à cache-id pour les requêtes GET et POST, sauf si le sous-élément du composant requestType est défini. Par défaut, le type de requête est automatiquement ajouté à cache-id pour les requêtes GET et POST. ignore-char-encoding Servlet et portlet True ou false. La valeur par défaut est false. Si la propriété a la valeur true, le codage de caractères UTF-8 n'est pas ajouté à l'ID de cache. Si le codage de caractères UTF-8 est ajouté à l'ID de cache, vous risquez d'obtenir plusieurs copies des fragments, ce qui augmentera inutilement la taille de la mémoire cache. do-not-cache Servlet et portlet Définit un fragment qui est ni mis en cache, ni consommé par son parent.
or<cache-entry> ... <property name="do-not-cache">true</property>
<cache-id> <property name="do-not-cache">true</property> </cache-id> </cache-entry>
- cache-id
- Pour mettre un objet en cache, le serveur d'applications doit savoir comment générer un ID unique pour les différents appels de cet objet. Ces ID sont créés à partir de code Java personnalisé ou de règles définies dans la règle de cache de chaque entrée de cache.
Chaque entrée de cache peut comporter plusieurs règles d'ID de cache qui sont exécutées séquentiellement jusqu'à ce que :
- une règle renvoie un ID de cache non vide, ou que
- Il ne reste plus aucune règle à exécuter.
Chaque élément cache-id définit une règle pour la mise en cache de cet objet et est constitué des sous-éléments component, timeout, inactivity, priority, property, idgenerator et metadatagenerator. L'exemple suivant illustre l'utilisation d'un élément cache-id :<cache-id> component*| timeout? | inactivity? | priority? | property* | idgenerator? | metadatagenerator? </cache-id>
- sous-élément component
Le sous-élément component permet de générer une partie de l'ID cache. Le sous-élément component comporte les attributs id, type et ignore-value, ainsi que les éléments index, method, field, required, value et not-value.
- Utilisez l'attribut id pour identifier le composant.
- Utilisez l'attribut type pour identifier le type du composant. Le tableau suivant répertorie les valeurs autorisées pour le type :
Eviter les incidents: Lorsque le sous-élément du composant de paramètre est défini dans le fichier cachespec.xml, le conteneur Web définit le codage des caractères en fonction du paramètre de codage obtenu de l'objet de demande. Si un servlet appelle ensuite la méthode setCharacterEncoding, cette dernière n'a aucun effet, car le codage des caractères ne peut pas être changé une fois qu'il a été défini.gotcha
Tableau 3. Valeurs de type. Classes valides de type et signification. Type Classes valides Signification méthode Commande Appelle la méthode indiquée au niveau de la commande ou de l'objet field Commande Extrait la zone nommée de la commande ou de l'objet parameter Servlet et portlet Extrait la valeur du paramètre nommé à partir de l'objet requête parameter-list Servlet et portlet Extrait une liste de valeurs pour le paramètre nommé Eviter les incidents: La mémoire cache obtient les valeurs de tous les paramètres portant ce nom et utilise toutes ces valeurs, dans l'ordre de leur obtention, pour créer l'ID de cache gotcha
session Servlet et portlet Extrait la valeur nommée à partir de la session HTTP cookie Servlet Extrait la valeur de cookie nommée attribute Servlet et portlet Extrait l'attribut de requête nommé header Servlet, service Web et portlet Extrait l'en-tête de requête nommé pathInfo Servlet Extrait l'élément pathInfo de la requête servletpath Servlet Extrait le chemin du servlet locale Servlet et portlet Extrait les paramètres régionaux de la requête Avertissement : L'élément "locale" est autorisé uniquement pour les entrées du cache edgecacheable avec RRD. L'élément "locale" n'est pas admis pour les autres versions d'ESI.requestType Servlet et portlet Extrait la méthode de demande HTTP à partir de la requête. Avertissement : L'élément "requestType" est autorisé uniquement pour les entrées du cache edgecacheable avec RRD. L'élément "requestType" n'est pas admis pour les autres versions d'ESI.tiles_attribute Servlet et portlet Extrait la valeur d'un attribut à partir d'une mosaïque. SOAPEnvelope Service Web et cache du client des services Web Extrait l'élément SOAPEnvelope d'une requête de services Web. Un attribut id de hachage utilise un hachage du SOAPEnvelope, alors qu'un ID littéral utilise le SOAPEnvelope tel qu'il est reçu. SOAPAction Service Web Extrait l'en-tête SOAPAction (si celui-ci est disponible) pour une requête de services Web serviceOperation Service Web Extrait l'opération de maintenance d'une requête de service Web serviceOperationParameter Service Web Extrait le paramètre spécifié d'une demande de services Web operation Cache du client de services Web Indique un type d'opération du fichier WSDL (Web Services Description Language). L'attribut id n'est pas pris en compte et la valeur correspond au nom de l'opération ou de la méthode. Si l'espace de nom de l'opération est indiqué, la valeur doit être formatée de la façon suivante : EspaceNomOperation:NomOpération. part Cache du client de services Web Indique une partie du message d'entrée dans le fichier WSDL ou un paramètre de requête. Son attribut id est le nom de la partie ou du paramètre et la valeur est celle de la partie ou du paramètre. SOAPHeaderEntry Cache du client de services Web Récupère des informations spéciales dans l'en-tête SOAP (Simple Object Access Protocol) de la demande de services Web. L'attribut id indique le nom de l'entrée. En outre, l'entrée de l'en-tête SOAP de la requête de même nom doit posséder un attribut actor contenant com.ibm.websphere.cache. Par exemple : <soapenv:Header> <getQuote soapenv:actor="com.ibm.websphere.cache">IBM</getQuote> </soapenv:Header>
portletSession Portlet Extrait la valeur nommée à partir de la session de portlet portletWindowId Portlet Extrait l'ID fenêtre du portlet à partir de l'objet requête du portlet portletMode Portlet Extrait le mode du portlet à partir de l'objet requête du portlet portletWindowsState Portlet Extrait l'état de la fenêtre du portlet à partir de l'objet requête du portlet sessionID Servlet et portlet Extrait l'ID de la session HTTP - L'attribut ignore-value permet d'indiquer si vous devez utiliser ou non la valeur renvoyée par ce composant dans la formation d'ID cache. Cet attribut est facultatif avec false comme valeur par défaut. Si la valeur est true, seul l'ID du composant est utilisé lors de la création d'un ID cache ou aucune sortie n'est utilisée lors de la création d'un ID de dépendance ou d'invalidation.
- L'élément method sert à appeler une méthode vide au niveau d'un objet renvoyé.
Vous pouvez imbriquer des objets method et des objets field indéfiniment dans n'importe quelle combinaison.
La méthode doit être publique et n'est pas applicable aux composants edge-cacheable.
Exemple :
<component id="getUser" type="method"><method>getUserInfo <method>getName</method></method></component>
Equivalent à getUser().getUserInfo().getName()
Pour les types de composant attribute, method ou field pouvant renvoyer un objet, lorsque l'objet renvoyé est une collection ou un tableau, l'ID est créé avec une liste des éléments de la collection ou du tableau séparés par des virgules. Par exemple, si l'attribut de requête users renvoie un tableau [a, b] et que l'entrée de cache est définie comme suit :
L'ID de cache contient la chaîne users: a,b. L'ID de dépendance est dep: a,b.<cache-entry> <class>servlet</class> <name>xxx.jsp</name> <cache-id> . . <component id="users" type="attribute"> <required>true</required> </component> . . </cache-id> <dependency-id>dep <component id="users" type="attribute"> <required>true</required> </component> </dependency-id> </cache-entry>
Utilisez l'attribut multipleIDs avec les types de composant pour spécifier et générer plusieurs ID de dépendance (ou ID d'invalidation) en fonction des éléments de la collection ou du tableau. Par exemple :
La règle de cache génère les ID de dépendance suivants :<cache-entry> <class>servlet</class> <name>xxx.jsp</name> <cache-id> . . <component id="users" type="attribute"> <required>true</required> </component> . . </cache-id> <dependency-id>dep <component id="users" type="attribute" multipleIDs="true"> <required>true</required> </component> </dependency-id> </cache-entry>
- dep:a,b
- dep:a
- dep:b
Utilisez l'élément index avec le type de composant ci-dessus pour ajouter uniquement la valeur de l'élément situé à la position d'index spécifiée dans la collection ou le tableau à l'ID qui est en cours de création.
La règle de cache ci-dessus génère le composant suivant à utiliser dans l'ID de cache : users: b. L'élément <method> sert à appeler une méthode vide au niveau d'un objet renvoyé.<cache-entry> <class>servlet</class> <name>xxx.jsp</name> <cache-id> . . <component id="users" type="attribute"> <required>true</required> <index>1</index> </component> . . </cache-id> <dependency-id>dep <component id="users" type="attribute" multipleIDs="true"> <required>true</required> </component> </dependency-id> </cache-entry>
- L'élément field permet d'accéder à une zone dans un objet renvoyé.
Vous pouvez imbriquer des objets method et des objets field indéfiniment dans n'importe quelle combinaison.
La zone doit être publique. Cette zone n'est pas valide pour les composants edge-cacheable. Exemple :
<component id="getUser" type="method"><method>getUserInfo <field>name</field></method></component>
Cette méthode est équivalente à la méthode getUser().getUserInfo().name.
- L'élément required permet d'indiquer si ce composant doit renvoyer une valeur non nulle pour cet ID cache correspondant à un cache valide. Si ce composant a pour valeur true, il doit renvoyer une valeur non nulle pour que cet ID cache représente un ID cache valide.
S'il a pour valeur false (valeur par défaut), une valeur non nulle est utilisée dans la formation de l'ID cache et une valeur nulle signifie que ce composant n'est pas du tout utilisé dans la formation de l'ID. Par
exemple :
<required>true</required>
- Utilisez l'élément value pour indiquer des valeurs qui doivent correspondre pour l'utilisation de ce composant dans la formation d'ID cache. Par
exemple :
<component id="getUser" type="method"><value>blue</value> <value>red</value> </component>
- Utilisez l'élément not-value pour indiquer des valeurs qui ne doivent pas correspondre pour l'utilisation de ce composant dans la formation d'ID cache. Cette méthode est similaire à l'élément value mais empêche les valeurs définies d'effectuer une mise en cache.
Vous pouvez utiliser plusieurs éléments not-value lorsque plusieurs valeurs non valides sont présentes. Par
exemple :
<component id="getUser" type="method"> <required>true</required> <not-value>blue</not-value> <not-value>red</not-value></component>
Le sous-élément component doit comporter soit un élément method et un élément field, soit un élément value ou un élément not-value. Les éléments method et field ne s'appliquent qu'aux commandes. L'exemple suivant illustre les attributs d'un sous-élément component :<component id="isValid" type="method" ignore-value="true"><component>
- Sous-élément timeout
- Le sous-élément timeout sert à indiquer une valeur absolue pour le délai TTL (Time-To-Live) de l'entrée de cache. Par exemple,
<timeout>value</timeout>
valeur représente la durée de vie de l'entrée en cache ; elle est exprimée en secondes. Les entrées de cache qui sont en mémoire sont conservées indéfiniment (tant qu'elles restent en mémoire). Les entrées de cache qui sont stockées sur le disque sont supprimées si elles ne sont pas utilisées sous 24 heures.
- Sous-élément inactivity
- Le sous-élément inactivity sert à indiquer un délai TTL (Time-To-Live) de l'entrée de cache basé sur l'heure à laquelle l'entrée de cache a fait l'objet d'un accès pour la dernière fois. Il s'agit d'un sous-élément de cache-id.
valeur représente la durée de vie, en secondes, de l'entrée en cache après la dernière réussite du cache.<inactivity>value</inactivity>
- Sous-élément priority
- Le sous-élément priority permet d'indiquer la priorité d'une entrée de cache dans un cache. La pondération des priorités est utilisée par l'algorithme LRU pour déterminer quelles entrées doivent être supprimées du cache si ce dernier est saturé. Par exemple,
<priority>value</priority>
où valeur est un entier positif compris entre 1 et 16 inclus.
- Exemples
- L'exemple suivant conserve l'entrée de cache en cache pendant un minimum de 35 secondes et un maximum de 180 secondes. Si l'entrée de cache fait l'objet d'un accès avant la fin de chaque période d'inactivité de 35 secondes, cette période est prolongée de 35 secondes. Toutefois, du fait que l'élément timeout est également configuré, l'entrée de cache est toujours invalidée après 180 secondes. Si l'entrée de cache ne fait pas l'objet d'un accès avant la fin de la période de 35 secondes, cette entrée est supprimée du cache.
<cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <inactivity>35</inactivity> <priority>1</priority> </cache-id>
- L'exemple suivant conserve l'entrée de cache en cache pendant un minimum de 600 secondes. Si l'entrée de cache fait l'objet d'un accès avant la fin de chaque période d'inactivité de 600 secondes, cette période est prolongée de 600 secondes. Si l'entrée de cache ne fait pas l'objet d'un accès avant la fin de la période de 600 secondes, cette entrée est supprimée du cache.
<cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <inactivity>600</inactivity> <priority>1</priority> </cache-id>
- Dans l'exemple suivant, la valeur de l'élément inactivity n'est pas significative parce que le délai d'expiration (timeout) est inférieur à la période d'inactivité. L'entrée de cache est toujours invalidée après 180 secondes, quel que soit le nombre d'accès dont elle fait l'objet.
<cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <inactivity>600</inactivity> <priority>1</priority> </cache-id>
- Sous-élément property
- Le sous-élément property permet d'indiquer des propriétés génériques pour l'entrée du cache. Par exemple,
<property name="key">value</property>
où prop est le nom de la propriété à définir, et valeur est la valeur correspondante.
Par exemple :<property name="description">The Snoop Servlet</property>
Tableau 4. Valeurs des sous-éléments des propriétés. Classes valides des propriétés et signification Propriété Classes valides Signification sharing-policy/timeout/priority Toutes Remplace les paramètres de l'entrée de cache d'inclusion lorsque la requête correspond à cet ID de cache. EdgeCacheable Servlet Remplace les paramètres de l'entrée de cache d'inclusion lorsque la requête correspond à cet ID de cache.
Sous-éléments idgenerator et metadatagenerator
<idgenerator> class name </idgenerator>
Où class name correspond au nom complet de la classe à utiliser. Définissez cette classe de générateur dans une bibliothèque partagée.<metadatagenerator> classname </metadatagenerator>
Dans cet exemple, class name est le nom complet de la classe à utiliser. Définissez cette classe de générateur dans une bibliothèque partagée.Elément dependency-id
Utilisez l'élément dependency-id pour spécifier d'autres identificateurs de cache qui associent plusieurs entrées de cache au même identificateur de groupe.
La valeur de l'élément dependency-id est générée au moyen de la concaténation de la chaîne de base d'ID de dépendance avec les valeurs renvoyées par ses éléments component. Si un composant requis renvoie une valeur NULL, la totalité de la dépendance n'est pas générée et n'est pas utilisée. Validez les ID de dépendance de façon explicite via l'API de cache dynamique ou utilisez l'élément invalidation. Plusieurs règles d'ID de dépendance peuvent exister dans un élément cache-entry. Toutes les règles de dépendance sont exécutées séparément.
Elément invalidation
<invalidation>component* | invalidationgenerator? </invalidation>
Sous-élément invalidationgenerator
<invalidationgenerator>class name</invalidationgenerator>
Dans cet exemple, class name est le nom complet de la classe qui implémente l'interface com.ibm.websphere.cache.webservices.InvalidationGenerator. Définissez cette classe de générateur dans une bibliothèque partagée.Exemple de fichier cachespec.xml
<?xml version="1.0"?> <!DOCTYPE cache SYSTEM "cachespec.dtd"> <cache> <cache-entry> <class>servlet </class> <name>/MyDefinedServlet</name> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/MyAnnotatedServlet</name> <cache-id> <timeout>3600</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/MyProgrammaticServlet</name> <cache-id> <timeout>3600</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/MyProgrammaticServlet2</name> <cache-id> <timeout>3600</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/MyProgrammaticServlet3</name> <cache-id> <timeout>3600</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/StartAsyncDispatchCompleteAltPath</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testDoNotConsume</value> </component> <property name="do-not-consume">true</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testCacheChildONLY</value> </component> <property name="do-not-consume">true</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/StartAsyncDispatchComplete</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testDoNotConsume</value> </component> <property name="consume-subfragments">false</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testConsumeSubFragments</value> </component> <property name="consume-subfragments">true</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testTimeout</value> </component> <property name="do-not-consume">true</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testError</value> </component> <property name="do-not-consume">true</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/DiscardParent.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/AttrA1.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/AttrA2.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/AttrA3.jsp</name> <property name="consume-subfragments">true</property> <property name="save-attributes"> false <exclude>saveThisAttr</exclude> </property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/AttrC3.jsp</name> <property name="do-not-cache">true</property> <property name="save-attributes">false</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/CacheTest.jsp</name> <cache-id> <component id="output" type="attribute"> <required>true</required> </component> <timeout>180</timeout> </cache-id> <dependency-id> response <component id="output" type="attribute"> <required>true</required> </component> </dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>Include1.jsp</name> <cache-id> <component id="outputForInclude1" type="attribute"> <required>true</required> </component> <timeout>120</timeout> <priority>2</priority> </cache-id> <dependency-id> response <component id="output" type="attribute"> <required>true</required> </component> </dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>ESIParent.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="parm1" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id> dep1 <component id="parm1" type="parameter" /> </dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>ESIChild.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="parm2" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id> dep4 <component id="parm2" type="parameter" /> </dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>ESI1Cached.jsp</name> <cache-id> <component id="param2" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI1</dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>ESI1Edgeable.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="param2" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <priority>2</priority> </cache-id> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI1</dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>ESI2Cached.jsp</name> <cache-id> <timeout>240</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI2</dependency-id> </cache-entry> <cache-entry> <property name="EdgeCacheable">true</property> <name>ESI2Edgeable.jsp</name> <class>servlet </class> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <priority>2</priority> </cache-id> <cache-id> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI2</dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>ESI3Cached.jsp</name> <cache-id> <timeout>60</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI3</dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>ESI3Edgeable.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>60</timeout> <priority>2</priority> </cache-id> <cache-id> <timeout>60</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI3</dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>ESI4Edgeable.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>60</timeout> <priority>2</priority> </cache-id> <cache-id> <timeout>60</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI4</dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>ESI5Edgeable.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>60</timeout> <priority>2</priority> </cache-id> <cache-id> <timeout>60</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI5</dependency-id> </cache-entry> <!--Test ESI w/ wildcard character--> <cache-entry> <class>servlet </class> <name>ESI6Edgeable.jsp</name> <cache-id> <component id="*" type="parameter"> <required>false</required> </component> <timeout>180</timeout> <property name="EdgeCacheable">true</property> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>ESI7Edgeable.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>60</timeout> <priority>2</priority> </cache-id> <cache-id> <timeout>60</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI7</dependency-id> </cache-entry> <cache-entry> <class>webservice</class> <name>/services/CounterService1</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="Request-Hash" type="header"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> <property name="description"> This is SOAP Servlet. </property> </cache-id> <cache-id> <component id="" type="SOAPAction"> <value>urn:lookup</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="serviceOperation"> <value>urn:counterservice1:counter1</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="serviceOperation"> <value>urn:counterservice1:counter1</value> </component> <component id="in" type="serviceOperationParameter"> <value>xxx</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="serviceOperation"> <not-value>urn:counterservice1:counter1</not-value> </component> <component id="in" type="serviceOperationParameter"> <not-value>xxx</not-value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="SOAPAction"> <value>urn:lookup</value> </component> <component id="Literal" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="SOAPAction"> <value>urn:lookup</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="serviceOperation"> <value>urn:counterservice1:counter1</value> <value>urn:counterservice2:counter2</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="serviceOperation"> <value>urn:counterservice1:counter1</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <dependency-id>depId</dependency-id> <invalidation> depId <component id="" type="serviceOperation" ignore-value="true"> <value>urn:counterservice1:reset1</value> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>TimeoutPos.jsp</name> <cache-id> <timeout>10</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>com.ibm.ws.cache.servlet.pathinfo1.class</name> <cache-id> <component id="" type="pathinfo"> <required>true</required> </component> <component id="genPathInfo" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>com.ibm.ws.cache.servlet.pathinfo2.class</name> <cache-id> <component id="" type="pathinfo"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/pathinfo1/xxxx</name> <cache-id> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/pathinfo1/yyyy</name> <cache-id> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <sharing-policy>shared-pull</sharing-policy> <name>com.ibm.ws.cache.servlet.reqparmtest.class</name> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>15</timeout> <priority>1</priority> </cache-id> <dependency-id> reqparm <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> reqparm <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <sharing-policy>shared-push</sharing-policy> <name> com.ibm.ws.cache.servlet.reqparmtest_sharePush.class </name> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>15</timeout> <priority>1</priority> </cache-id> <dependency-id> reqparm <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> reqparm <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>com.ibm.ws.cache.servlet.reqattrtest.class</name> <cache-id> <component id="arg" type="attribute"> <required>false</required> </component> <component id="IAmRequired" type="attribute" ignore-value="true"> <required>true</required> </component> <component id="int" type="attribute"> <method>intValue</method> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/STMTestServlet</name> <sharing-policy>shared-push</sharing-policy> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-instance name="services/cache/servletInstance_1"> <cache-entry> <class>servlet </class> <name>/STMTestServlet_shareNone</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/STMTestServlet_shareDefault</name> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/STMTestServlet_sharePush</name> <sharing-policy>shared-push</sharing-policy> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/STMTestServlet_sharePull</name> <sharing-policy>shared-pull</sharing-policy> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/STMTestServlet_sharePushPull</name> <sharing-policy>shared-push-pull</sharing-policy> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>SITimeStamp</name> <cache-id> <component id="parm" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> </cache-entry> </cache-instance> <cache-entry> <class>servlet </class> <name>/CloseAndFlush</name> <cache-id> <component id="action" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-instance name="services/cache/servletInstance_1"> <cache-entry> <class>servlet </class> <name>/TimeStamp</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="inactivity0" type="parameter"> <required>true</required> </component> <timeout>30</timeout> <inactivity>0</inactivity> <priority>1</priority> </cache-id> <cache-id> <component id="inactivity1" type="parameter"> <required>true</required> </component> <timeout>60</timeout> <inactivity>30</inactivity> <priority>1</priority> </cache-id> <cache-id> <component id="inactivity2" type="parameter"> <required>true</required> </component> <inactivity>30</inactivity> <priority>1</priority> </cache-id> <cache-id> <component id="inactivity3" type="parameter"> <required>true</required> </component> <timeout>30</timeout> <inactivity>60</inactivity> <priority>1</priority> </cache-id> <cache-id> <property name="ignore-get-post">false</property> <component id="ignore" type="parameter"> <value>false</value> </component> </cache-id> <cache-id> <property name="ignore-get-post">true</property> <component id="ignore" type="parameter"> <value>true</value> </component> </cache-id> <dependency-id> timestamp <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> timestamp <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> </cache-instance> <cache-entry> <class>servlet </class> <name>/TimeStamp1</name> <property name="persist-to-disk">false</property> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <dependency-id> timestamp <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> timestamp <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/TimeStamp2</name> <property name="persist-to-disk">false</property> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <dependency-id> timestamp2 <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> timestamp2 <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-instance name="services/cache/servletInstance_1"> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.MyQuoteCommand.class</name> <cache-id> <timeout>0</timeout> <priority>3</priority> <component id="getTicker" type="method" /> </cache-id> <dependency-id>MyQuoteTicker</dependency-id> </cache-entry> </cache-instance> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.QuoteCommand.class</name> <cache-id> <timeout>180</timeout> <priority>3</priority> <component id="getTicker" type="method" /> </cache-id> <dependency-id> ticker <component id="getTicker" type="method" /> </dependency-id> </cache-entry> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.QuoteCommandComplex.class</name> <cache-id> <timeout>240</timeout> <priority>3</priority> <component id="getComplex" type="method"> <method>getTicker</method> </component> </cache-id> <dependency-id> ticker <component id="getComplex" type="method"> <field>ticker</field> </component> </dependency-id> </cache-entry> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.QuoteCommandIdGen</name> <cache-id> <timeout>120</timeout> <priority>3</priority> <idgenerator> com.ibm.ws.cache.command.QuoteIdGenerator </idgenerator> </cache-id> </cache-entry> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.NoOutputPropCommand</name> <cache-id> <timeout>180</timeout> <priority>3</priority> <component id="getTicker" type="method" /> </cache-id> <dependency-id> ticker <component id="getTicker" type="method" /> </dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/bufferwritercached</name> <cache-id> <timeout>0</timeout> <priority>3</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/bufferstreamcached</name> <cache-id> <timeout>0</timeout> <priority>3</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/BasicServlet</name> <cache-id> <component id="testCookie" type="cookie"> <required>true</required> </component> <timeout>30</timeout> </cache-id> <cache-id> <component id="action" type="parameter" /> <component id="" type="locale" /> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.WatchListCommand</name> <cache-id> <timeout>360</timeout> <priority>4</priority> <component id="userGroup" type="field" /> <component id="userNumber" type="field" /> </cache-id> <dependency-id> USER <component id="userGroup" type="field" /> <component id="userNumber" type="field" /> </dependency-id> </cache-entry> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.WatchListCommandMixed</name> <cache-id> <timeout>360</timeout> <priority>4</priority> <component id="userGroup" type="field" /> <component id="getUserNumber" type="method" /> </cache-id> <dependency-id> USER <component id="userGroup" type="field" /> <component id="getUserNumber" type="method" /> </dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>com.ibm.ws.cache.command.CommandTestServlet.class</name> <invalidation> USER <component id="action" type="parameter" ignore-value="true"> <value>invalidate</value> </component> <component id="group" type="parameter" /> <component id="user" type="parameter" /> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>consumeParent.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> <priority>4</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>consumeParent2.jsp</name> <cache-id> <timeout>0</timeout> <priority>4</priority> <property name="consume-subfragments">true</property> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>consumeParentForward.jsp</name> <cache-id> <timeout>0</timeout> <priority>4</priority> <property name="consume-subfragments">true</property> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/esiForwardInclude.jsp</name> <cache-id> <property name="EdgeCacheable">true</property> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/esiParentConsume.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <property name="EdgeCacheable">true</property> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/alturlcontroller1</name> <property name="EdgeCacheable">true</property> <cache-id> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/AltUrlTest2.jsp</name> <property name="EdgeCacheable">true</property> <property name="alternate_url">/alturlcontroller2</property> <cache-id> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/AltUrlTest3.jsp</name> <property name="EdgeCacheable">true</property> <property name="alternate_url">/alturlcontroller3</property> <cache-id> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/AltUrlTest4.jsp</name> <property name="EdgeCacheable">true</property> <property name="alternate_url">/alturlcontroller4</property> <cache-id> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/AltUrlTest5.jsp</name> <cache-id> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>com.ibm.ws.cache.servlet.reqparmlisttest.class</name> <cache-id> <component id="parm" type="parameter-list"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/SaveAttributesParent.jsp</name> <sharing-policy>not-shared</sharing-policy> <property name="consume-subfragments">false</property> <property name="save-attributes">false</property> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <dependency-id> timestamp <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> timestamp <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/ReqAttA.jsp</name> <cache-id> <component id="ReqAttr" type="attribute"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/ServletPathTest</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="" type="servletpath"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/ESICookie.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/ESIQueryStringParent.jsp</name> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/ESIQueryStringChild.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="scenario" type="parameter"> <required>true</required> </component> <component id="parm1" type="parameter"> <required>true</required> </component> <component id="testCookie" type="cookie"> <required>true</required> </component> <timeout>180</timeout> <priority>1</priority> </cache-id> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>com.ibm.ws.cache.servlet.IncludeTimeStamp.class</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="type" type="attribute"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>JAXRPCClient</class> <name> http://localhost:9080/dynacachetests/services/Counter </name> <cache-id> <component id="http://schemas.xmlsoap.org/soap/envelope/:Counter" type="SOAPHeaderEntry" /> <timeout>0</timeout> </cache-id> <cache-id> <component id="http://schemas.xmlsoap.org/soap/envelope/:urn:headerNS:Counter" type="SOAPHeaderEntry" /> <timeout>0</timeout> </cache-id> <cache-id> <component id="" type="operation"> <value> http://counter.webservices.cache.ws.ibm.com:counter1 </value> </component> <component id="in" type="part"></component> <timeout>0</timeout> </cache-id> <cache-id> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> </cache-id> <dependency-id> Counter_in <component id="http://schemas.xmlsoap.org/soap/envelope/:urn:headerNS:Counter" type="SOAPHeaderEntry"> <required>true</required> </component> </dependency-id> <invalidation> Counter_in <component id="http://schemas.xmlsoap.org/soap/envelope/:urn:headerNS:Reset" type="SOAPHeaderEntry"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>JAXRPCClient</class> <name> http://localhost:9080/dynacachetests/services/AddressBookBean </name> <cache-id> <component id="" type="operation"> <value> http://addr.webservices.cache.ws.ibm.com:getAddressFromName </value> </component> <component id="name" type="part"></component> <component id="country" type="part"></component> <timeout>0</timeout> </cache-id> <dependency-id> AddressBook <component id="" type="operation" ignore-value="true"> <value> http://addr.webservices.cache.ws.ibm.com:getAddressFromName </value> <required>true</required> </component> <component id="name" type="part"> <required>true</required> </component> </dependency-id> <invalidation> AddressBook <component id="" type="operation" ignore-value="true"> <value> http://addr.webservices.cache.ws.ibm.com:invalidate </value> <required>true</required> </component> <component id="name" type="part"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>JAXRPCClient</class> <name> http://localhost:9080/dynacachetests/services/StockQuote </name> <sharing-policy>shared-push</sharing-policy> <cache-id> <idgenerator> com.ibm.ws.cache.webservices.stock.QuoteIdGenerator </idgenerator> <metadatagenerator> com.ibm.ws.cache.webservices.stock.QuoteMetaDataGenerator </metadatagenerator> <priority>5</priority> </cache-id> <invalidation> http://localhost:9080/dynacachetests/services/StockQuote <invalidationgenerator> com.ibm.ws.cache.webservices.stock.QuoteInvalidationGenerator </invalidationgenerator> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/basic.do</name> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <dependency-id> struts <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> struts <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/forward.do</name> <cache-id> <property name="EdgeCacheable">true</property> <component id="type" type="parameter"> <required>true</required> <value>esiParentConsume</value> </component> <component id="JSESSIONID" type="cookie" /> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/strutsTimeStamp.jsp</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/STTimeStamp</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/child1.do</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/stConsumeFragment.do</name> <cache-id> <component id="whoami" type="parameter"> <required>true</required> <value>grandparent</value> </component> <property name="consume-subfragments">true</property> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/stConsumeParent.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/stDNCFragment.do</name> <property name="consume-subfragments">true</property> <cache-id> <component id="whoami" type="parameter"> <required>true</required> <value>grandparent</value> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <dependency-id> DNC <component id="whoami" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> DNC <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/stDNCGrandChild.jsp</name> <property name="do-not-consume">true</property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/stSaveAttrParent.do</name> <property name="save-attributes">false</property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/stDisplayInfo.jsp</name> <cache-id> <component id="lbean" type="session"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/tileParent.jsp</name> <cache-id> <component id="type" type="parameter"> <required>true</required> <value>strut</value> </component> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/tileChild.jsp</name> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/tileChildServlet</name> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/tileEsiParent.jsp</name> <cache-id> <component id="type" type="parameter"> <value>edgeable</value> </component> <property name="EdgeCacheable">true</property> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/tileEsiChild.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="arg1" type="parameter"> <required>true></required> </component> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/tileGrandParent.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/tileDNCGrandParent.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/tileCSFChild1.jsp</name> <property name="do-not-consume">true</property> <cache-id> <component id="arg1" type="parameter"> <value>DNC</value> </component> <timeout>180</timeout> <priority>1</priority> </cache-id> <dependency-id> DNC <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> DNC <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/tileSaveAttrParent.jsp</name> <property name="save-attributes">false</property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/header.jsp</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/body.jsp</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/footer.jsp</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/testSTDefinition.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/SavAttrParent/TrueExclude</name> <property name="save-attributes"> true <exclude>att1</exclude> </property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/SavAttrParent/FalseExclude</name> <property name="save-attributes"> false <exclude>att1</exclude> </property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/DCP</name> <cache-id> <timeout>180</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/DCPParent</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>180</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/DCPGrandParent</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>180</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-instance name="services/cache/servletInstance_2"> <cache-entry> <class>servlet </class> <name>/TimeStampCM2</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> </cache-id> </cache-entry> </cache-instance> <cache-instance name="services/cache/servletInstance_3"> <cache-entry> <class>servlet </class> <name>/TimeStampCM3</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> </cache-id> </cache-entry> </cache-instance> <cache-instance name="services/cache/servletInstance_4"> <cache-entry> <class>servlet </class> <name>ServletInstance_Esi1_ESIParent.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="parm1" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id> ci_dep1 <component id="parm1" type="parameter" /> </dependency-id> </cache-entry> </cache-instance> <cache-instance name="services/cache/servletInstance_5"> <cache-entry> <class>servlet </class> <name>ServletInstance_Esi2_ESIChild.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="parm2" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id> ci_dep4 <component id="parm2" type="parameter" /> </dependency-id> </cache-entry> </cache-instance> <cache-entry> <class>servlet </class> <name>JspRecompileTest.jsp</name> <cache-id> <component id="parm1" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/DNCForwardServlet</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> <value>test2</value> <value>test3</value> <value>test4</value> <value>test6</value> <value>test8</value> <value>test10</value> </component> <property name="consume-subfragments">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test5</value> </component> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test7</value> <value>test9</value> </component> <property name="EdgeCacheable">true</property> <property name="consume-subfragments">true</property> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/DNCGrandParent.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test2</value> </component> <property name="consume-subfragments">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test3</value> </component> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test5</value> </component> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> </cache-id> <dependency-id> DNC3 <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> DNC3 <component id="inv3" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/DNCParent1.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> <value>test3</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test2</value> </component> <property name="consume-subfragments">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test5</value> </component> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> </cache-id> <dependency-id> DNC2 <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> DNC2 <component id="inv2" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/DNCChild1.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test3</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> <value>test2</value> <value>test4</value> <value>test7</value> </component> <property name="do-not-consume">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test5</value> </component> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test6</value> </component> <property name="EdgeCacheable">true</property> <property name="do-not-consume">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test10</value> </component> <property name="EdgeCacheable">true</property> <property name="do-not-consume">false</property> </cache-id> <dependency-id> DNC1 <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> DNC1 <component id="inv1" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/JSTLForwardServlet</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> </component> <property name="consume-subfragments">true</property> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/JSTLChild1.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> </component> <property name="do-not-consume">true</property> </cache-id> <dependency-id> JSTL1 <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> JSTL1 <component id="inv1" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/PreviewServlet</name> <property name="EdgeCacheable">true</property> <property name="consume-subfragments">true</property> <cache-id> <priority>3</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/PreviewChildServlet</name> <property name="EdgeCacheable">true</property> <cache-id> <priority>3</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/IsUncacheable.jsp</name> <cache-id> <component id="cacheable" type="parameter"> <required>true</required> <value>true</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/Afpa.jsp</name> <property name="ExternalCache">afpa</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <!-- CacheMonitor CachePolicies Test entries --> <cache-entry> <class>servlet </class> <name>/CacheMonitorTestServletPolicy</name> <sharing-policy>shared-push</sharing-policy> <property name="EdgeCacheable">true</property> <property name="ExternalCache">CMTextCache</property> <cache-id> <component id="CMTparameter" type="parameter" /> <component id="CMTsession" type="session" /> </cache-id> <cache-id> <component id="CMTcookie" type="cookie" /> <component id="CMTattribute" type="attribute" /> </cache-id> <dependency-id> <component id="CMTparameterList" type="parameter-list" /> </dependency-id> <invalidation> <component id="CMTservletPath" type="servletpath" /> </invalidation> </cache-entry> <cache-entry> <class>command</class> <name>/CacheMonitorTestCommandPolicy</name> <sharing-policy>not-shared</sharing-policy> <property name="ApplicationName">CMTAppName</property> <property name="persist-to-disk">false</property> <property name="delay-invalidations">true</property> <cache-id> <component id="CMTmethod" type="method" /> </cache-id> <cache-id> <component id="CMTfield" type="field" /> </cache-id> <dependency-id> <component id="CMTmethod" type="method" /> </dependency-id> <invalidation> <component id="CMTmethod" type="method" /> </invalidation> </cache-entry> <cache-entry> <class>webservice</class> <name>/CacheMonitorTestWebservicePolicy</name> <sharing-policy>shared-push-pull</sharing-policy> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> <cache-id> <component id="CMTSOAPEnvelope" type="SOAPEnvelope" /> <component id="CMTSOAPAction" type="SOAPAction" /> </cache-id> <cache-id> <component id="CMTserviceOperation" type="serviceOperation" /> <component id="CMTserviceOperationParameter" type="serviceOperationParameter" /> </cache-id> <dependency-id> <component id="CMTserviceOperation" type="serviceOperation" /> </dependency-id> <invalidation> <component id="CMTSOAPEnvelope" type="SOAPEnvelope" /> </invalidation> </cache-entry> <cache-entry> <class>portlet</class> <name>/CacheMonitorTestPortletPolicy</name> <sharing-policy>shared-pull</sharing-policy> <property name="save-attributes">false</property> <cache-id> <component id="CMTheader" type="header" /> </cache-id> <cache-id> <component id="CMTlocale" type="locale" /> <component id="CMTrequestType" type="requestType" /> </cache-id> <dependency-id> <component id="CMTrequestType" type="requestType" /> </dependency-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/RangeTimeStamp.jsp</name> <!-- valid specs, will be cached if they match --> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest10</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value>9</value> <value> <range low="-20" high="-10" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest11</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value>0</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest20</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <not-value> <range low="-20" high="-10" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest21</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="-50" high="200" /> </value> <not-value> <range low="-20" high="-10" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest22</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="20" high="30" /> </value> <not-value> <range low="0" high="50" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest23</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="0" high="30" /> </value> <not-value> <range low="20" high="50" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest24</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="0" high="10" /> </value> <value> <range low="20" high="30" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest30</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="12" high="50" /> <range low="25" high="100" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest31</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest32</value> </component> <component id="NoSuchParameterIsPresent" type="parameter"> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> <required>false</required> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest33</value> </component> <component id="NoSuchParameterIsPresent" type="parameter"> <required>true</required> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest34</value> </component> <component id="NoSuchParameterIsPresent" type="parameter"> <required>true</required> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest35</value> </component> <component id="inputvalue" type="parameter"> <required>false</required> <value>requiredValue</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <not-value>RangeTest36</not-value> </component> <component id="inputvalue" type="parameter"> <required>false</required> <value>notThis</value> </component> </cache-id> <!-- <dependency-id> test <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> test <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> --> </cache-entry> <!-- ############################################################ --> <cache-entry> <class>servlet </class> <name>/RangeAttrChild.jsp</name> <!-- valid specs, will be cached if they match --> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest10</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value>9</value> <value> <range low="-20" high="-10" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest11</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value>0</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest20</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <not-value> <range low="-20" high="-10" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest21</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="-50" high="200" /> </value> <not-value> <range low="-20" high="-10" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest22</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="20" high="30" /> </value> <not-value> <range low="0" high="50" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest23</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="0" high="30" /> </value> <not-value> <range low="20" high="50" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest24</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="0" high="10" /> </value> <value> <range low="20" high="30" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest30</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="12" high="50" /> <range low="25" high="100" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest31</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest32</value> </component> <component id="NO_SUCH_ATTRIBUTE" type="attribute"> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> <required>false</required> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest33</value> </component> <component id="NO_SUCH_ATTRIBUTE" type="attribute"> <required>true</required> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> </component> </cache-id> <dependency-id> test <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> test <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <!-- ############################################################ --> <skip-cache-attribute>prettypleaseskipcaching</skip-cache-attribute> <cache-entry> <class>servlet </class> <name>/SkipCache1.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test01</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/SkipCache2.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test02</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/SkipCacheChild1.jsp</name> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/SkipCacheChild2.jsp</name> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <!-- ############################################################ --> <cache-entry> <class>servlet </class> <name>/CacheCookie1.jsp</name> <cache-id> <component id="test" type="parameter"> <value>test01</value> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <dependency-id> test <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> test <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/CacheCookie2.jsp</name> <property name="store-cookies"> true <exclude>cookie1</exclude> </property> <cache-id> <component id="test" type="parameter"> <value>test02</value> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <dependency-id> test <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> test <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/CacheCookie3.jsp</name> <property name="store-cookies"> false <exclude>cookie1</exclude> </property> <cache-id> <component id="test" type="parameter"> <value>test03</value> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <dependency-id> test <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> test <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet </class> <name>/DoNotCacheParent.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test01</value> <value>test02</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/DoNotCacheChild.jsp</name> <cache-id> <component id="test" type="parameter"> <value>test01</value> <required>true</required> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <value>test02</value> <required>true</required> </component> <property name="do-not-cache">true</property> </cache-id> </cache-entry> <!-- ############################################################ --> <cache-entry> <class>servlet </class> <name>/ConsumeSubfragmentsExcludeParent.jsp</name> <!-- Note: since the child jsps don't have their own cache-entry's, they should never be cached themselves, only as part of the parent result depending on this config --> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test01</value> </component> <property name="consume-subfragments"> true <exclude>/ConsumeSubfragmentsExcludeChild1.jsp</exclude> </property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test02</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test03</value> </component> <property name="consume-subfragments">true</property> </cache-id> </cache-entry> <!-- ############################################################ --> <cache-entry> <class>servlet </class> <name>/static.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>static</class> <name>/static.html</name> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>static</class> <name> com.ibm.ws.webcontainer.servlet.SimpleFileServlet.class </name> <cache-id> <component id="" type="pathinfo"> <required>true</required> </component> <component id="useSFServlet" type="parameter"> <required>true</required> <value>true</value> </component> <timeout>300</timeout> </cache-id> </cache-entry> <cache-entry> <class>static</class> <name>/static2.html</name> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/MultiIncludeParamRemoteServlet</name> <property name="consume-subfragments">false</property> <cache-id> <timeout>0</timeout> <component id="test" type="parameter"> <required>true</required> <value>MultiIncludeParamRemoteServlet</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/MultiIncludeParamRemoteServlet</name> <property name="consume-subfragments">false</property> <cache-id> <timeout>0</timeout> <component id="test" type="parameter"> <required>true</required> <value>MultiIncludeParamServlet</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/RemoteServlet</name> <property name="consume-subfragments">false</property> <property name="do-not-consume">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/RemoteServlet2</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/NonBlockingFragmentResponseServlet</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> <component id="test" type="parameter"> <required>true</required> <value>NonBlockingFragmentResponseServlet</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/BlockingFragmentResponseServlet</name> <property name="consume-subfragments">false</property> <cache-id> <timeout>0</timeout> <component id="test" type="parameter"> <required>true</required> <value>BlockingFragmentResponseServlet</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet </class> <name>/JSTLIKEA.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> </component> </cache-id> </cache-entry> </cache>