URL DynaCacheInvalidation

La commande DynaCacheInvalidation est une commande planifiée qui peut être appelée sur une URL pour invalider les entrées dans le cache dynamique WebSphere Application Server.

La commande DynaCacheInvalidation invalide les entrées dans le cache dynamique en fonction de l'ID de dépendance, de l'ID de cache ou du modèle d'objet mis en cache qui sont enregistrés dans la table CACHEIVL. L'intervalle d'invalidation du cache par défaut est de 4 minutes. Vous pouvez modifier cette valeur par défaut dans la console d'administration de HCL Commerce. En outre, cette commande peut être démarrée en tant qu'URL avec les paramètres startTime et startTimeNanos ensemble ou avec le paramètre clear seul. Pour exécuter cette commande sur l'URL, vous devez vous connecter à votre magasin en tant qu'administrateur de site de HCL Commerce.

Remarque : Veillez à activer la réplication de cache.

Structure de l'adresse URL

http://host_name/path/
Nom entièrement qualifié de votre Transaction server et du chemin de configuration.


Valeurs des paramètres

startTime|startTimeNanos
Les paramètres startTime et startTimeNanos sont utilisés pour interroger les dernières lignes non traitées dans la table CACHEIVL. Ces paramètres sont utilisés pour construire un objet horodatage unique avec une valeur de temps en millisecondes qui peut être utilisée pour la requête. La valeur horodatage est le temps qui s'écoule depuis le 1er janvier 1970, 00:00:00 GMT en millisecondes. Lorsque la commande DynaCacheInvalidation planifiée s'exécute pour la première fois, startTime et startTimeNanos sont définis sur 0 (zéro).
startTime=milliseconds
Ce paramètre est tout entier positif qui représente la partie de l'horodatage en millisecondes.
startTimeNanos=nanoseconds
Ce paramètre est tout entier positif qui représente la partie fractionnée de l'horodatage en nanosecondes.
annuler
La valeur de ce paramètre est définie par défaut sur true. La commande démarre l'API correspondante pour effacer tout le contenu du cache dynamique. Notez que lorsque clear a la valeur true, les mises à jour en temps quasi réel (NRT) ne seront pas déclenchées dans les travaux de chargement de données hors ligne.
L'utilisation de clear=true (ou clearall dans CACHEIVL) vide le cache de base et toutes les cartes du cache de données distribuées par défaut . Pour les cartes ou les cartes de servlet personnalisées distribuées, la méthode StringHolder ou cache: doit être utilisée.
isDistinct
Par défaut, la valeur de ce paramètre est définie sur false. Lorsqu'il est défini sur true, ce paramètre limite les lignes qui renvoient à une seule ligne pour chaque valeur unique trouvée. Chaque ligne de renvoi provoque l'envoi d'une requête d'invalidation du cache.
maxIndividualInvalidationsPerTable
Spécifiez un nombre positif, la valeur par défaut est 100000. Ce paramètre fixe une limite au nombre d'invalidations individuelles à traiter dans une table. Lorsque cette limite est dépassée, une invalidation de toutes les entrées du cache de données commerciales avec des dépendances de cette table particulière se produit. Ce paramètre entraîne la suppression par le travail de plus de données que nécessaire. maxIndividualInvalidationsPerTable aide DynaCacheInvalidation à se terminer rapidement lorsque de nombreuses lignes sont écrites sur la table CACHEIVL.
maxSeconds
Spécifiez un nombre positif, ou zéro pour n'indiquer aucune limite. La valeur par défaut est de 90% de la valeur d'intervalle du travail de planificateur DynaCacheInvalidationCMD. Cette valeur est stockée dans la colonne SCCINTERVAL de la table SCHCONFIG. Ce paramètre spécifie le nombre maximal de secondes pendant lesquelles une instance de travail doit s'exécuter. Cette valeur n'inclut pas le temps passé à attendre un verrou de mise à jour sur la ligne de la table SCHCONFIG. Cette valeur ne tient pas non plus compte du temps passé à attendre une fois les registres actualisés. Pour ajuster le temps d'attente après l'actualisation des registres, modifiez la valeur du paramètre waitSecondsAfterRefreshRegistry. Lorsque la transaction atteint la limite maxSeconds, le travail tente de faire une pause, laissant le travail restant incomplet. Le travail incomplet demeure jusqu'à ce que le même travail s'exécute à nouveau. Si la valeur de cette colonne est nulle, maxSeconds=0 est utilisé. Modifiez la valeur maxSeconds basée sur le délai d'attente de la transaction configurée dans la base de données et la valeur SCCINTERVAL. La durée réelle utilisée par la transaction peut dépasser le nombre spécifié.
maxSecondsPerTransaction
Indiquez un nombre positif. La valeur par défaut est 60. Ce paramètre spécifie le nombre de secondes pendant lesquelles une transaction de base de données s'exécute avant que la transaction de base de données actuelle ne tente de valider et de commencer une nouvelle transaction. La durée réelle d'une transaction peut dépasser ce nombre spécifié. Si isDistinct=true, la durée peut dépasser de loin le nombre spécifié, puisque toutes les lignes distinctes trouvées doivent être traitées dans la même transaction.
enableRefreshRegistry
Par défaut, ce paramètre est défini sur true. Lorsque ce paramètre est défini sur true, le travail de planificateur DynaCacheInvalidation inspecte chaque valeur dans la colonne DATAID de la table de base de données CACHEIVL. Si les valeurs de cette colonne sont dans le formulaire WCR+<registryName>, le travail du planificateur ajoute un travail de planificateur de diffusion. Cet ajout entraîne l'actualisation du registre spécifié sur tous les Transaction servers en cours d'exécution.
Conseil : Si les valeurs de cette colonne sont dans le formulaire WCR+?, le travail du planificateur ajoute un travail de planificateur de diffusion. Cet ajout entraîne l'actualisation de tous les registres sur tous les Transaction servers en cours d'exécution.
waitSecondsAfterRefreshRegistry
Spécifiez un nombre qui laisse suffisamment de temps pour que le travail de diffusion se termine sur tous les serveurs. Ce paramètre est défini par défaut sur la valeur minimale de la propriété cycleTime du composant com.ibm.commerce.scheduler.SchedulerCommdans le fichier de configuration d'instance wc-server.xml de HCL Commerce et sur la valeur de la colonne SCCINTERVAL dans la table de base de données SCHCONFIG pour le travail de planificateur DynaCacheInvalidation. Si cette valeur minimale est nulle ou inférieure ou égale à zéro, la valeur est par défaut 600. Lorsque ce paramètre waitSecondsAfterRefreshRegistry spécifie une valeur supérieure ou égale à zéro, le travail de planificateur DynaCacheInvalidation s'arrête. Il s'arrête pendant le nombre de secondes spécifié précédant l'émission d'invalidations DynaCache par le travail.
disableBaseCache
Par défaut, ce paramètre est défini sur false. Lorsque ce paramètre est défini sur true, aucun ID d'invalidation n'est envoyé à l'instance de cache de servlet baseCache.
maxInvalidationDataIds
Par défaut, ce paramètre est défini sur Long.MAX_VALUE. Lorsque le nombre spécifié de lignes CACHEIVL contenant des ID d'invalidation sont traitées, les autres ID d'invalidation de ce type ne sont pas traités. A la place, l'instance de cache à laquelle il serait normalement envoyé est effacée. Utilisez ce paramètre pour limiter le nombre d'ID d'invalidation qui peuvent être émis. L'effacement d'instances de cache peut avoir un impact significatif sur les performances.

Toutefois, des invalidations se produisent toujours pour les ID associés au cache de données (TEMPLATE est NULL et DATAID commence par le préfixe WCT+, WCN+, WCD+ ou WCR+). Voir le paramètre maxIndividualInvalidationsPerTable pour limiter l'émission d'ID d'invalidation liés au cache de données.

cmdClearId
Par défaut, ce paramètre est défini sur zéro. Lorsque le paramètre n'est pas défini sur zéro, ce paramètre spécifie un ID d'invalidation. Cet ID doit être utilisé à la place de la valeur spécifiée dans la colonne DATAID de la table CACHEIVL pour les lignes où la valeur de la colonne TEMPLATE commence par le préfixe cmd: lorsque la limite spécifiée par le paramètre maxInvalidationDataIds est dépassée.
localJVMOnly
Par défaut, ce paramètre est défini sur false. Spécifiez true pour indiquer que le travail de DynaCacheInvalidation est de supposer que les ID d'invalidation qu'il émet sont efficaces uniquement pour le JVM dans lequel il s'exécute. Lorsque localJVMOnly est défini sur true, les modifications comportementales suivantes s'appliquent. Les paramètres startTime et startTimeNanos sont ignorés et ne sont pas mis à jour dans la table SCHCONFIG. L'heure de la dernière mise à jour est conservée en mémoire uniquement. La première fois que le travail s'exécute, le travail n'utilise pas les paramètres startTime et startTimeNanos. A la place, il utilise l'heure actuelle moins la valeur définie pour le paramètre cycleTime du planificateur dans le fichier wc-server.xml. Les valeurs de la colonne DATAID qui entraînent l'actualisation des registres n'entraînent pas l'ajout d'un travail de planificateur de diffusion. A la place, les registres du JVM actuel uniquement sont actualisés, et la commande DynaCacheInvalidation ne s'arrête pas après l'actualisation des registres.
disableDMap

Par défaut, ce paramètre est défini sur false. Lorsque ce paramètre est défini sur true, aucun ID d'invalidation n'est envoyé pour les lignes où la colonne TEMPLATE de la table CACHEIVL contient une valeur qui commence par le préfixe dmap: ou cache:. Lorsqu'une valeur autre que true ou false est spécifiée, la valeur spécifiée est choisie comme nom JNDI d'un cache d'objet DistributedMap. Aucun ID d'invalidation n'est envoyé à ce cache d'objet pour les lignes où la colonne TEMPLATE de la table CACHEIVL contient une valeur qui commence par le préfixe dmap: ou cache: et indique le nom JNDI spécifié. Pour spécifier plusieurs noms JNDI, spécifiez le nom du paramètre et sa valeur plusieurs fois, séparés par une esperluette.

disableCmd
Par défaut, ce paramètre est défini sur false. Lorsque ce paramètre est défini sur true, aucun ID d'invalidation n'est envoyé pour les lignes où la colonne TEMPLATE de la table CACHEIVL contient une valeur qui commence par le préfixe cmd:. Lorsqu'une valeur autre que true ou false est spécifiée, la valeur spécifiée est choisie comme nom de classe entièrement qualifié d'une commande qui ne doit pas être exécutée pour les lignes où la colonne TEMPLATE de la table CACHEIVL contient une valeur qui commence par le préfixe cmd: et se termine par le nom de classe spécifié. Pour spécifier plusieurs noms de classe, spécifiez le nom du paramètre et sa valeur plusieurs fois, séparés par une esperluette.
disableCache
Par défaut, ce paramètre est défini sur false. Lorsque ce paramètre est défini sur true, aucun ID d'invalidation n'est envoyé pour les lignes où la colonne TEMPLATE de la table CACHEIVL contient une valeur qui commence par le préfixe cache:. Lorsqu'une valeur autre que true ou false est spécifiée, la valeur spécifiée est choisie comme nom JNDI d'un cache de servlet ou d'un cache d'objet DistributedMap. Aucun ID d'invalidation n'est envoyé à ce cache pour les lignes où la colonne TEMPLATE de la table CACHEIVL contient une valeur qui commence par le préfixe cache: et comprend le nom JNDI spécifié. Pour spécifier plusieurs noms JNDI, spécifiez le nom du paramètre et sa valeur plusieurs fois, séparés par une esperluette.
maxInvalidationDataIdsPerSecond
Par défaut, ce paramètre est défini sur Integer.MAX_VALUE (aucune limite). Il spécifie le nombre maximal d'opérations d'invalidation qui sont lancées par seconde. Lorsque le nombre d'opérations par seconde dépasse cette limite, le planificateur DynaCacheInvalidation ralentit le traitement jusqu'à ce que le taux soit inférieur au taux maximal spécifié.
maxInvalidationDataIdsPerCachePerSecond
Par défaut, ce paramètre est défini sur Integer.MAX_VALUE (aucune limite). Spécifie le nombre maximal d'opérations d'invalidation initiées par seconde pour un cache particulier. Lorsque le nombre d'opérations par seconde dépasse cette limite, le planificateurDynaCacheInvalidation ralentit le traitement. Le planificateur ralentit jusqu'à ce que le taux de ce cache soit inférieur au taux maximal spécifié.
maxInvalidationDataIdsPerCache
Par défaut, ce paramètre est défini sur Long.MAX_VALUE (aucune limite). Lorsque le nombre spécifié de lignes CACHEIVL contenant des ID d'invalidation sont traitées pour une instance de cache particulière, les ID d'invalidation supplémentaires pour cette instance de cache ne sont pas traités. A la place, l'instance de cache est désactivée. Utilisez ce paramètre pour limiter le nombre d'ID d'invalidation qui peuvent être émis. L'effacement d'instances de cache peut avoir un impact significatif sur les performances.
maxPercentInvalidationDataIdsPerCache
Par défaut, ce paramètre est défini sur Integer.MAX_VALUE (aucune limite). Lorsque le nombre de lignes CACHEIVL traitées pour une instance de cache particulière est divisé par le nombre d'entrées de cache de cette instance de cache et dépasse le seuil en pourcentage spécifié, les ID d'invalidation supplémentaires ne sont pas traités. A la place, l'instance de cache est désactivée. Utilisez ce paramètre pour limiter le nombre d'ID d'invalidation qui peuvent être émis. L'effacement d'instances de cache peut avoir un impact significatif sur les performances. Ce paramètre n'a aucun effet pour les lignes CACHEIVL où la valeur de la colonne TEMPLATE commence par cmd:.
delayBaseCacheInvalidationMilliseconds

Ce paramètre spécifie le nombre de millisecondes pour retarder l'envoi d'un ID d'invalidation à l'instance de cache de servlet baseCache. Spécifiez un nombre supérieur à zéro pour laisser aux ID d'invalidation de l'instance de cache d'objet le temps d'être traités avant que les ID d'invalidation du cache de servlet baseCache ne soient traités.

Remarque : Normalement, vous spécifiez les paramètres startTime et startTimeNanos ensemble, ou le paramètre clear seul. Si vous spécifiez les trois paramètres, la commande prend le paramètre clear.

Exemple

L'exemple suivant invalide les objets mis en cache dans la table CACHEIVL pour toutes les lignes, à partir de la première ligne :


   http://
host_name/path/DynaCacheInvalidation?startTime=0&startTimeNanos=0

L'exemple suivant permet d'effacer tous les objets mis en cache dans le cache dynamique :


   http://
host_name/path/DynaCacheInvalidation?clear=true

L'exemple suivant invalide toutes les entrées de cache qui ont une dépendance aux données d'une table particulière :


   http://
host_name/path/DynaCacheInvalidation?maxIndividualInvalidationsPerTable=100000

Comportement

  • La commande lit des lignes à partir de la table CACHEIVL dans la base de données HCL Commerce. Seules les lignes qui ne sont pas traitées par l'invalidation sont récupérées. Seules les lignes dont la valeur INSERTTIME est supérieure à celle de la dernière ligne traitée dans le dernier travail DynaCacheInvalidation et dont l'horodatage dans CACHEIVL est inférieur à l'horodatage actuel seront invalidées. Le travail DynaCacheInvalidation ignorera tous les autres enregistrements.
  • Si le cache dynamique WebSphere Application Server est désactivé, la commande n'effectue aucune action.
  • Si votre environnement HCL Commerce est regroupé, le comportement de travail planifié DynaCacheInvalidation ne change pas.
  • Si la commande s'exécute sur l'URL avec le paramètre et la valeur clear=true, ou si la valeur des colonnes TEMPLATE ou DATAID pour une ligne traitée est "clearall" , la commande efface tout le contenu en cache du cache de servlet baseCache et des caches d'objets de cache de données. Si la valeur de la colonne TEMPLATE pour une ligne traitée est NULL, la valeur de la colonne DATAID est utilisée pour invalider les entrées de cache. Si la valeur de la colonne DATAID ne commence pas par l'un des préfixes de valeur spéciale WCT+, WCN+, WCD+, et WCR+, la valeur est envoyée en tant qu'ID d'invalidation au cache de servlet baseCache à l'aide de la méthode com.ibm.websphere.cache.DistributedMap.invalidate. Dans le cas contraire, la valeur est analysée pour déterminer un nom de table et des valeurs de colonne (ou un nom de registre lorsque le préfixe est WCR+) et utilisée pour invalider les entrées de cache de données appropriées (ou le registre nommé).
  • Si la valeur de colonne TEMPLATE pour une ligne traitée n'est pas NULL et ne commence pas par l'un des préfixes de valeur spéciale dmap:, cmd:, et cache:, la valeur de la colonne TEMPLATE est utilisée pour invalider les entrées de cache baseCache créées par la valeur de modèle spécifiée, à l'aide de la méthode com.ibm.websphere.cache.Cache.invalidateByTemplate.
Informations comportementales supplémentaires
  • La paire nom-valeur startTime|startTimeNanos est convertie en temps réel et toute ligne de la table CACHEIVL qui a un INSERTTIME après la conversion de startTime/startTimeNanos est exécutée.
  • Pour exécuter immédiatement le travail DynaCacheInvalidation, effectuez l'une des tâches suivantes :
    • Dans la console d'administration, définissez l'heure du travail DynaCacheInvalidation sur une heure antérieure à l'heure actuelle.
    • Mettez à jour la table SCHACTIVE.

Seules les lignes dont la valeur INSERTTIME est supérieure à celle de la dernière ligne traitée dans le dernier travail DynaCacheInvalidation et dont l'horodatage dans CACHEIVL est inférieur à l'horodatage actuel seront invalidées. Le travail du planificateur DynaCacheInvalidation ignorera tous les autres enregistrements. Lorsque le travail trouve une valeur dans la colonne TEMPLATE qui commence par le préfixe dmap: d'une nouvelle ligne, le travail utilise le reste de la valeur qui suit le préfixe en tant que nom JNDI. Ce nom spécifie une instance de cache d'objet DistributedMap. Si le cache d'objet spécifié n'existe pas, aucune action n'est effectuée. Si le cache d'objet spécifié existe, la valeur de la colonne DATAID est envoyée au cache d'objet spécifié en tant que chaîne d'ID d'invalidation. Si vous définissez la DistributedMap dans un fichier cacheinstances.properties, la première barre oblique du nom JDNI doit être omise.

Par exemple, si la carte distribuée est définie dans le fichier cacheinstances.properties comme cache.instance.0=/services/cache/MyCustomMapCache, la chaîne de la colonne TEMPLATE de la table CACHEIVL doit être dmap:services/cache/MyCustomMapCache.

Si le travail du planificateur localise une valeur dans la colonne TEMPLATE qui commence par le préfixe cmd: d'une nouvelle ligne, le travail utilise le reste de la valeur qui suit le préfixe en tant que nom de classe Java. Si la classe Java spécifiée n'est pas une instance de com.ibm.commerce.dynacache.commands.StringHolderCmdImpl, aucune action n'est effectuée. Si la classe Java spécifiée est une instance d'une sous-classe de com.ibm.commerce.dynacache.commands.StringHolderCmdImpl, une instance de cette classe est créée et sa méthode setString est appelée, elle transmet la valeur de la colonne DATAID et l'instance de commande est exécutée.

Un cache de servlet personnalisé peut entraîner l'envoi de la valeur DATAID spécifiée en tant qu'invalidation à une instance de cache de servlet. Cette invalidation peut être envoyée en spécifiant cette commande dans le fichier cachespec.xml pour l'instance de cache de servlet personnalisée. Par exemple :
<cache-instance name="instance2"> 
<cache-entry>
  <class>command</class> 
  <name>com.ibm.commerce.dynacache.commands.StringHolderCmdImpl</name>
  <invalidation> 
    <component type="method" id="getString> 
    </component> 
  </invalidation> 
</cache-entry> 
<!-- *************************************************************************** --> 
<!-- * Place the cache-entry tags for the servlet cache instance here. * -->
<!-- *************************************************************************** --> 
</cache-instance>
Etant donné qu'une commande ne peut pas être définie pour plus d'une instance de cache de servlet, HCL Commerce inclut trois sous-classes de com.ibm.commerce.dynacache.commands.StringHolderCmdImpl. Ces sous-classes peuvent être utilisées pour provoquer des invalidations dans jusqu'à trois autres instances de cache de servlet personnalisées :
  • com.ibm.commerce.dynacache.commands.StringHolder1
  • com.ibm.commerce.dynacache.commands.StringHolder2
  • com.ibm.commerce.dynacache.commands.StringHolder3
Le travail du planificateur DynaCacheInvalidation consulte la table CACHEIVL pour les lignes récemment ajoutées. Lorsque le travail trouve dans la colonne TEMPLATE une valeur qui commence par le préfixe cache: d'une nouvelle ligne, le travail utilise la valeur restante qui suit le préfixe comme liste de noms JNDI délimitée par deux points. Chaque nom JNDI spécifie une instance de cache de servlet ou une instance de cache d'objet DistributedMap. En l'absence de cache spécifié, aucune action n'est effectuée pour ce cache. Pour chaque cache spécifié existant, la valeur de la colonne DATAID est envoyée au cache d'objet spécifié en tant que chaîne d'ID d'invalidation, à moins qu'il ne s'agisse de la chaîne spéciale clearall, auquel cas le cache est effacé.
Remarque : Les noms JNDI que vous spécifiez ne doivent pas être préfixés avec une barre oblique. Par exemple, si une carte distribuée est définie dans le fichier cacheinstances.properties comme cache.instance.0=/services/cache/MyCustomMapCache, la chaîne de la colonne TEMPLATE de la table CACHEIVL doit être cache:services/cache/MyCustomMapCache.

Conditions d'exception

DynaCacheInvalidation lance une ECException en cas de problèmes lorsque l'invalidation exécute le SQL, ou en cas d'erreur système.