URL DynaCacheInvalidation

El mandato DynaCacheInvalidation es un mandato planificado que se puede invocar en un URL para invalidar entradas en la memoria caché dinámica de WebSphere Application Server.

El mandato DynaCacheInvalidation invalida entradas de la memoria caché dinámica basándose en el ID de dependencia, el ID de memoria caché o la plantilla para una página en caché que están registradas en la tabla CACHEIVL. El intervalo de invalidación de memoria caché predeterminado es de 4 minutos. Puede cambiar este valor predeterminado en la Consola de administración de HCL Commerce. Además, este mandato se puede iniciar como un URL si se proporcionan los parámetros startTime y startTimeNanos juntos o se proporciona el parámetro clear solo. Para ejecutar este mandato en el URL, debe iniciar la sesión en la tienda como administrador de sitio de HCL Commerce.

Nota: Asegúrese de permitir la réplica de memoria caché.

Estructura de URL

http://host_name/path/
El nombre completo de Transaction server y la vía de acceso de configuración.


Valores de parámetros

startTime|startTimeNanos
Los parámetros startTime y startTimeNanos se utilizan para consultar las últimas filas no procesadas en la tabla CACHEIVL. Estos parámetros se utilizan para construir un objeto de indicación de fecha y hora exclusivo con un valor de tiempo de milisegundos que se puede utilizar para la consulta. El valor de indicación de fecha y hora es el tiempo que ha transcurrido desde el 1 de Enero de 1970, 00:00:00 GMT, en milisegundos. Cuando se ejecuta por primera vez el mandato planificado DynaCacheInvalidation, startTime y startTimeNanos se establecen en 0 (cero).
startTime=milliseconds
Este parámetro es un cualquier entero positivo que representa la parte de la indicación de fecha y hora en milisegundos.
startTimeNanos=nanoseconds
Este parámetro es un cualquier entero positivo que representa la parte fraccional de la indicación de fecha y hora en nanosegundos.
borrar
El valor de este parámetro está establecido en true de forma predeterminada. El mandato inicia la API correspondiente para borrar todo el contenido en la memoria caché dinámica. Tenga en cuenta que cuando clear es true, las actualizaciones en tiempo casi real (NRT) no se ejecutarán en los trabajos de carga de datos fuera de línea.
Al utilizar clear=true (o clearall en CACHEIVL) se vacía la memoria caché de base y todas las correlaciones distribuidas de memoria caché de datos predeterminadas. Para correlaciones de servlet o correlaciones distribuidas personalizadas, se debe utilizar el método StringHolder o cache:.
isDistinct
De forma predeterminada, este parámetro se establece en false. Cuando se establece en true, este parámetro limita las filas que se devuelven a una sola fila para cada valor exclusivo encontrado. Cada fila que se devuelve hace que se envíe una solicitud de invalidación de memoria caché.
maxIndividualInvalidationsPerTable
Especifique un número positivo, el valor predeterminado es 100000. Este parámetro establece un límite en el número de invalidaciones individuales que se procesarán en una tabla. Cuando se excede este límite, se produce una invalidación de todas las entradas de memoria caché de datos de Commerce con dependencias de esa tabla en particular. Aunque la definición de mandato hace que el trabajo elimine más datos de los estrictamente necesarios, maxIndividualInvalidationsPerTable permite que DynaCacheInvalidation se complete con mayor rapidez cuando se graban muchas filas en la tabla CACHEIVL.
maxSeconds
Especifique un número positivo o cero para indicar que no existe ningún límite. El valor predeterminado es 90 % del valor de intervalo de trabajo de planificador de DynaCacheInvalidationCMD. Este valor se almacena en la columna SCCINTERVAL de la tabla SCHCONFIG. Este parámetro especifica el número máximo de segundos durante el que debe ejecutarse una instancia de trabajo. Este valor no incluye el tiempo que se tarda esperando un bloqueo Update en la fila de la tabla SCHCONFIG. Este valor no cuenta el tiempo que se tarda esperando después de que se renueven los registros. Para ajustar el tiempo de espera después de que se renueven los registros, cambie el valor del parámetro waitSecondsAfterRefreshRegistry. Cuando la transacción alcanza el límite maxSeconds, el trabajo intenta hacer una pausa, dejando el resto del trabajo incompleto. El trabajo incompleto permanece hasta que el mismo trabajo se ejecuta de nuevo. Si el valor de esta columna es cero, se utiliza maxSeconds=0. Cambie el valor maxSeconds que está basado en el tiempo de espera excedido de la transacción de base de datos que se ha configurado y el valor SCCINTERVAL. El tiempo real que la transacción utiliza puede superar el número especificado.
maxSecondsPerTransaction
Especifique un número positivo. El valor predeterminado es 60. Este parámetro especifica el número de segundos que se ejecuta una transacción de base de datos antes de los intentos para poner en pausa y empezar una nueva transacción. El tiempo real que se ejecuta una transacción puede superar este número especificado. Si isDistinct=true, el tiempo puede superar ampliamente el número especificado, ya que todas las filas diferenciadas encontradas deben procesarse en la misa transacción.
enableRefreshRegistry
El valor predeterminado de este parámetro es true. Cuando este parámetro es true, el trabajo planificado DynaCacheInvalidation inspecciona cada valor en la columna DATAID de la tabla de base de datos CACHEIVL. Si los valores de esta columna tienen el formato WCR+<registryName>, el trabajo de planificador añade un trabajo de planificador de difusión. Esta adición hace que el registro especificado se renueve en todos los Transaction server.
Consejo: Si los valores de esta columna tienen el formato WCR+?, el trabajo de planificador añade un trabajo de planificador de difusión. Esta adición hace que el registro especificado se renueve en todos los Transaction server.
waitSecondsAfterRefreshRegistry
Especifique un número que permita tiempo suficiente para que el trabajo de difusión se complete en todos los servidores. Este parámetro toma de forma predeterminada el valor mínimo de la propiedad cycleTime del componente com.ibm.commerce.scheduler.SchedulerComm en el archivo de configuración wc-server.xml de la instancia HCL Commerce y el valor de la columna SCCINTERVAL en la tabla de base de datos SCHCONFIG para el trabajo de planificador DynaCacheInvalidation. Si el valor mínimo es nulo o menor o igual a cero, el valor adopta el valor predeterminado de 600. Cuando este parámetro waitSecondsAfterRefreshRegistry especifica un valor mayor o igual a cero, el trabajo de planificador DynaCacheInvalidation se detiene. Se detiene durante el número de segundos especificado antes de que el trabajo emita invalidaciones DynaCache.
disableBaseCache
El valor predeterminado de este parámetro es false. Cuando este parámetro se establece en true, no se envía ningún ID de invalidación a la instancia de memoria caché de servlet baseCache.
maxInvalidationDataIds
El valor predeterminado de este parámetro es Long.MAX_VALUE. Cuando se procesa el número especificado de filas CACHEIVL que contienen identificadores (ID) de invalidación, no se procesa ningún otro identificador de invalidación de este tipo. En su lugar, se borra la instancia de memoria caché a la que normalmente se enviaría. Utilice este parámetro para limitar el número de identificadores de invalidación que se pueden emitir. Borrar instancias de memoria caché puede tener un impacto significativo en el rendimiento.

Sin embargo, las invalidaciones seguirán produciéndose para los identificadores relacionados con la caché de datos (TEMPLATE es NULL y DATAID comienza con el prefijo WCT+, WCN+, WCD+ o WCR+). Consulte el parámetro maxIndividualInvalidationsPerTable para limitar la emisión de identificadores de invalidación relacionados con la caché de datos.

cmdClearId
Este parámetro adopta el valor predeterminado de nulo. Cuando el parámetro no está establecido en nulo, este parámetro especifica un ID de invalidación. Este ID se debe utilizar en lugar del valor que se especifica en la columna DATAID de la tabla CACHEIVL para las filas donde el valor de columna TEMPLATE empieza con el prefijo cmd: cuando se supera el límite especificado por el parámetro maxinvalidationDatalds.
localJVMOnly
El valor predeterminado de este parámetro es false. Especifique true para indicar que el trabajo DynaCacheInvalidation debe suponer que los id de invalidación que emite son efectivos solo para la JVM en la que se está ejecutando. Cuando localJVMOnly es true, se aplican los cambios de comportamiento siguientes. Los parámetros startTime y startTimeNanos se ignoran y no se actualizan en la tabla SCHCONFIG. La hora de la última actualización se conserva solo en la memoria. La primera vez que se ejecuta el trabajo, el trabajo no utiliza los parámetros startTime y startTimeNanos. En su lugar, usa la hora actual menos el valor definido para la configuración cycleTime del programador en el archivowc-server.xml. Los valores de columna de DATAID que hacen que los registros se actualicen no hacen que se agregue un trabajo del planificador de difusión. En su lugar, solo se renuevan los registros para la JVM actual, y el mandato DynaCacheInvalidation no se detiene después de renovar los registros.
disableDMap

El valor predeterminado de este parámetro es false. Cuando este parámetro se establece en true, no se envían identificadores de invalidación para las filas donde la columna TEMPLATE de la tabla CACHEIVL contiene un valor que comienza con el prefijo dmap: o cache:. Cuando se especifica un valor distinto de true o false, se considera que el valor especificado es el nombre JNDI para una memoria caché de objetos DistributedMap. No se envía ningún identificador de invalidación a esta memoria caché de objetos para las filas donde la columna TEMPLATE de la tabla CACHEIVL contiene un valor que comienza con el prefijo dmap: o cache: e indica el nombre JNDI especificado. Para especificar varios nombres JNDI, especifique el nombre de parámetro y su valor varias veces, separados por un símbolo de ampersand.

disableCmd
El valor predeterminado de este parámetro es false. Cuando este parámetro se establece en true, no se envían identificadores de invalidación para las filas en las que la columna TEMPLATE de la tabla CACHEIVL contiene un valor que comienza con el prefijo cmd:. Cuando se especifica un valor distinto de true o false, se considera que el valor especificado es el nombre de clase totalmente calificado de un mandato que no se debe ejecutar para las filas donde la columna TEMPLATE de la tabla CACHEIVL contiene un valor que comienza con el prefijo cmd: y termina con el nombre de clase especificado. Para especificar varios nombres de clase, especifique el nombre de parámetro y su valor varias veces, separados por un símbolo de ampersand.
disableCache
El valor predeterminado de este parámetro es false. Cuando este parámetro se establece en true, no se envían identificadores de invalidación para las filas en las que la columna TEMPLATE de la tabla CACHEIVL contiene un valor que comienza con el prefijo cache:. Cuando se especifica un valor distinto de true o false, se considera que el valor especificado es el nombre JNDI para una memoria caché de servlet o una memoria caché de objetos DistributedMap. No se envía ningún identificador de invalidación a esta memoria caché para las filas donde la columna TEMPLATE de la tabla CACHEIVL contiene un valor que comienza con el prefijo cache: e incluye el nombre JNDI especificado. Para especificar varios nombres JNDI, especifique el nombre de parámetro y su valor varias veces, separados por un símbolo de ampersand.
maxInvalidationDataIdsPerSecond
El valor predeterminado de este parámetro es Integer.MAX_VALUE (sin límite). Especifica el número máximo de operaciones de invalidación que se inician por segundo. Cuando el número de operaciones por segundo sobrepasa este límite, el trabajo de planificador DynaCacheInvalidation ralentiza el proceso hasta que la tasa es inferior a la tasa máxima especificada.
maxInvalidationDataIdsPerCachePerSecond
El valor predeterminado de este parámetro es Integer.MAX_VALUE (sin límite). Especifica el número máximo de operaciones de invalidación que se inician por segundo, para una memoria caché determinada. Cuando el número de operaciones por segundo sobrepasa este límite, el trabajo de planificador DynaCacheInvalidation ralentiza el proceso. El planificador se ralentiza hasta que la tasa para esa memoria caché es inferior a la tasa máxima especificada.
maxInvalidationDataIdsPerCache
El valor predeterminado de este parámetro es Long.MAX_VALUE (sin límite). Cuando el número especificado de filas de CACHEIVL que contienen identificadores de invalidación se procesan para una determinada instancia de memoria caché, no se procesa ningún otro identificador de invalidación para esa instancia de memoria caché. En su lugar, se borra la instancia de memoria caché. Utilice este parámetro para limitar el número de identificadores de invalidación que se pueden emitir. Borrar instancias de memoria caché puede tener un impacto significativo en el rendimiento.
maxPercentInvalidationDataIdsPerCache
El valor predeterminado de este parámetro es Integer.MAX_VALUE (sin límite). Cuando el número de filas de CACHEIVL que se procesan para una determinada instancia de memoria caché se divide por el número de entradas de memoria caché en esa instancia de memoria caché, y supera el umbral de porcentaje especificado, no se procesa ningún otro identificador de invalidación para esa instancia de memoria caché. En su lugar, se borra la instancia de memoria caché. Utilice este parámetro para limitar el número de identificadores de invalidación que se pueden emitir. Borrar instancias de memoria caché puede tener un impacto significativo en el rendimiento. Este parámetro no tiene ningún efecto para las filas de CACHEIVL donde el valor de la columna TEMPLATE comienza con cmd:.
delayBaseCacheInvalidationMilliseconds

Este parámetro especifica el número de milisegundos a retrasar el envío de un ID de invalidación a la instancia de memoria caché de servlet baseCache. Especifique un número mayor que cero para dejar tiempo para que los ID de invalidación de instancia de memoria caché de objeto se procesen antes de que se procesen los ID de invalidación de memoria caché de servlet baseCache.

Nota: Normalmente, se especifican los parámetros startTime y startTimeNanos juntos, o el parámetro clear solo. Si especifica los tres parámetros, el mandato toma el parámetro clear.

Ejemplo

El ejemplo siguiente invalida los objetos almacenados en memoria caché en la tabla CACHEIVL para todas las filas, empezando por la primera fila:


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

El ejemplo siguiente borra todas los objetos almacenados en la memoria caché dinámica:


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

El ejemplo siguiente invalida todas las entradas de memoria caché que tienen alguna dependencia con los datos de una determinada tabla:


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

Comportamiento

  • El mandato lee filas de la tabla CACHEIVL de la base de datos de HCL Commerce. Solo se captan las filas que no son procesadas por la invalidación. Solo se invalidarán aquellas filas con un INSERTTIME mayor que la última fila procesada en el último trabajo DynaCacheInvalidation y una indicación de fecha y hora en CACHEIVL que sea inferior a la indicación de fecha y hora actual. El trabajo DynaCacheInvalidation pasará por alto todos los demás registros.
  • Si la memoria caché dinámica de WebSphere Application Server está inhabilitada, el mandato no realiza ninguna acción.
  • Si el entorno de HCL Commerce está en clúster, el comportamiento del trabajo planificado DynaCacheInvalidation no cambia.
  • Si el mandato se ejecuta en el URL con el parámetro y valor clear=true o si el valor de las columnas TEMPLATE o DATAID para una fila procesada es "clearall", el mandato borra todo el contenido de memoria caché de la memoria caché de servlet baseCache y las memorias caché de objeto de memoria caché de datos. Si el valor de columna TEMPLATE para una fila procesada es NULL, se utiliza el valor de columna DATAID para invalidar entradas de memoria caché. Si la columna DATAID no empieza por uno de los prefijos de valor especiales WCT+, WCN+, WCD+ y WCR+, el valor se envía como un ID de invalidación a la memoria caché de servlet baseCache utilizando el método com.ibm.websphere.cache.DistributedMap.invalidate. De lo contrario, el valor se analiza para determinar un nombre de tabla y los valores de columna (o un nombre de registro cuando el prefijo es WCR+) y se utiliza para invalidar las entradas de memoria caché de datos adecuadas (o registro con nombre).
  • Si el valor de columna de TEMPLATE para una fila procesada no es NULL y no empieza por uno de los prefijos de valor especiales dmap:, cmd: y cache:, se utiliza el valor de columna TEMPLATE para invalidar las entradas de memoria caché baseCache creadas por el valor de plantilla especificado, utilizando el método com.ibm.websphere.cache.Cache.invalidateByTemplate.
Información adicional sobre el comportamiento
  • El par nombre-valor startTime|startTimeNanos se convierte a un tiempo real y se ejecuta cualquier fila de la tabla que tenga un INSERTTIME después del startTime/startNanos convertido.
  • Para ejecutar inmediatamente el trabajo DynaCacheInvalidation, complete una de las tareas siguientes:
    • En la consola de administración, establezca la hora para el trabajo DynaCacheInvalidation en una hora más temprana que la hora actual.
    • Actualice la tabla SCHACTIVE.

Solo se invalidarán aquellas filas con un INSERTTIME mayor que la última fila procesada en el último trabajo DynaCacheInvalidation y una indicación de fecha y hora en CACHEIVL que sea inferior a la indicación de fecha y hora actual. El trabajo del planificador DynaCacheInvalidation pasará por alto todos los demás registros. Cuando el trabajo encuentra un valor en la columna TEMPLATE que comienza con el prefijo dmap: para una fila nueva, el trabajo utiliza el resto del valor que va a continuación del prefijo como nombre JNDI. Este nombre especifica una instancia de memoria caché de objetos DistributedMap. Si la memoria caché de objetos especificada no existe, no se realiza ninguna acción. Si la memoria caché de objetos especificada existe, el valor de la columna DATAID se envía a la memoria caché de objetos especificada como un serie de id de invalidación. Si define DistributedMap en un archivo cacheinstances.properties, debe omitir la primera barra inclinada del nombre JNDI.

Por ejemplo, si la correlación distribuida se define en el archivo cacheinstances.properties como cache.instance.0=/services/cache/MyCustomMapCache, la serie en la columna TEMPLATE de la tabla CACHEIVL debería ser dmap:services/cache/MyCustomMapCache.

Si el trabajo de planificador localiza un valor en la columna TEMPLATE que comienza con el prefijo cmd: para una nueva fila, el trabajo utiliza el resto del valor que va a continuación del prefijo como nombre de clase Java. Si la clase Java especificada no es una instancia de com.ibm.commerce.dynacache.commands.StringHolderCmdImpl, no se lleva a cabo ninguna acción. Si la clase Java especificada es una instancia de una subclase de com.ibm.commerce.dynacache.commands.StringHolderCmdImpl, se crea una instancia de esa clase y se llama al método setString que transfiere el valor de la columna DATAID y se ejecuta la instancia del mandato.

Una memoria caché de servlet personalizada puede hacer que el valor DATAID especificado se envíe como una invalidación a una instancia de memoria caché de servlet. Esta invalidación se puede enviar especificando ese mandato en el archivo cachespec.xml para la instancia de memoria caché de servlet personalizada. Por ejemplo:
<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>
Puesto que no se puede definir un mandato para más de una instancia de memoria caché de servlet, HCL Commerce incluye tres subclases de com.ibm.commerce.dynacache.commands.StringHolderCmdImpl. Estas subclases se pueden utilizar para ocasionar invalidaciones en hasta tres instancias de memoria caché de servlet personalizadas:
  • com.ibm.commerce.dynacache.commands.StringHolder1
  • com.ibm.commerce.dynacache.commands.StringHolder2
  • com.ibm.commerce.dynacache.commands.StringHolder3
El trabajo de planificador DynaCacheInvalidation busca en la tabla CACHEIVL las filas que se han añadido recientemente. Cuando el trabajo encuentra un valor en la columna TEMPLATE que comienza con el prefijo cache: para una nueva fila, el trabajo utiliza el resto del valor que va a continuación del prefijo como una lista delimitada por signos de dos puntos de nombres JNDI. Cada nombre JNDI especifica una instancia de memoria caché de servlet o una instancia de memoria caché de objetos DistributedMap. Si una memoria caché especificada no existe, no se realiza ninguna acción para dicha memoria caché. Para cada memoria caché especificada que exista, el valor de la columna DATAID se envía a la memoria caché de objetos especificada como una serie de ID de invalidación, a menos que sea la serie clearall especial, en cuyo caso se borra la memoria caché.
Nota: Los nombres JNDI que especifique no deben tener como prefijo una barra inclinada. Por ejemplo, si una correlación distribuida se define en el archivo cacheinstances.properties como cache.instance.0=/services/cache/MyCustomMapCache, la serie en la columna TEMPLATE de la tabla CACHEIVL debe ser cache:services/cache/MyCustomMapCache.

Condiciones de excepción

DynaCacheInvalidation genera una excepción ECException si surgen problemas cuando la invalidación ejecuta el SQL o si hay un error del sistema.