Colocación en memoria caché de un servicio de temporizador
Si desea optimizar el acceso de la base de datos y las llamadas SQL a un servicio de temporizador EJB, puede habilitar el servidor de aplicaciones para que coloque en la memoria caché los datos de dicho temporizador. La colocación en memoria caché permite al servidor de aplicaciones volver a utilizar los datos de temporizador sin tener que consultar la base de datos cada vez que se necesiten dichos datos.
Acerca de esta tarea
La especificación para los enterprise beans requiere que se efectúe una llamada SQL a la base de datos para cada llamada a la interfaz javax.ejb.Timer, de modo que la aplicación pueda asegurarse de que el temporizador EJB utilice los datos más actuales que haya disponibles. Si se llama a estos métodos a menudo, o se tienen muchos temporizadores EJB que llamen a cualquiera de estos métodos, el servidor de aplicaciones generará muchas sentencias SQL en un período de tiempo muy corto. En algunos casos, es posible que encuentre que una adhesión estricta a este requisito es perjudicial para el rendimiento, y que cause más sobrecarga de la garantizada.
Por ejemplo, considere un caso en el que un temporizador caduca sólo a las 12:00 del mediodía cada lunes. Durante el transcurso de la semana, las aplicaciones que llaman a los métodos de la interfaz de temporizador crearán una llamada SQL, pero ésta no siempre devolverá los mismos datos. Además, cuando una aplicación llama al método ejbTimeout para un temporizador, no se pueden cambiar los datos asociados a dicho temporizador; los datos del temporizador que estén almacenados en la base de datos no se podrán actualizar mientras se esté ejecutando un método ejbTimeout para dicho temporizador. Por tanto, cualquier llamada de método posterior que las aplicaciones efectúen durante el periodo de espera generarán una llamada SQL innecesaria, y un acceso desperdiciado a la base de datos.
No obstante, si habilita la colocación en memoria caché para los datos de temporizador, el servidor de aplicaciones sólo consulta la base de datos la primera vez que se llama a un método configurado. Para las llamadas subsiguientes a uno de los métodos configurados, el servidor de aplicaciones utilizará los datos de la memoria caché durante la vida del objeto de temporizador y no será necesario genera ninguna llamada SQL nueva.

- Cuando esta característica esté habilitada, la configuración no será compatible con la especificación EJB.
- Esta característica puede generar la posibilidad de que un temporizador utilice datos obsoletos. Los datos colocados en la memoria caché de un servicio de temporizador quedarán obsoletos una vez que haya transcurrido el siguiente periodo de caducidad del temporizador.
Por ejemplo, suponga que tiene un temporizador que está configurado para caducar cada hora. Si crea y guarda el objeto de temporizador, los datos que el servidor de aplicaciones coloca en la memoria caché para dicho objeto sólo serán actuales durante una hora. Los datos de la memoria caché serán los mismos que los datos que estén almacenados en la base de datos.
Si llama a cualquiera de los métodos de temporizador durante la primera hora, los datos de temporizador se podrán considerar actuales. No obstante, una vez transcurrido dicho período de caducidad, los datos de la memoria caché del temporizador quedarán obsoletos, y es posible que no reflejen los datos que realmente haya en la base de datos. En este ejemplo, si ha consultado el contenedor de EJBpara todos los temporizadores después de una hora y media, la aplicación obtendrá un objeto de temporizador nuevo que contendrá los datos de la memoria caché que serán los actuales durante treinta minutos; esto se debe a el temporizador volverá a caducar en la hora dos, y todos los datos obsoletos que se hayan colocado en la memoria caché quedarán obsoletos.
Procedimiento
Ejemplo
- App1#EJBJar1.jar#EJBTimer1
- App2#EJBJar2.jar#EJBTimer2
- Ejemplo 1
- En este ejemplo se aplica la colocación en memoria caché a todos los métodos, para todos los temporizadores y todas las aplicaciones.Utilice uno de los siguientes valores:
- Utilizando los valores predeterminados:
*
- Especificando un entero:
*=127
- Utilizando los valores predeterminados:
- Ejemplo 2
- En este ejemplo se aplica la colocación en memoria caché al método getInfo en todos los temporizadores y todas las aplicaciones.Utilice el valor siguiente:
*=2
- Ejemplo 3
- En este ejemplo se aplica la colocación en memoria caché a los métodos getHandle y getNextTimeout en EJBTimer2.Utilice el valor siguiente:
App2#EJBJar2.jar#EJBTimer2=5
- Ejemplo 4
- En este ejemplo se aplica la colocación en memoria caché a:
- el método getInfo en EJBTimer1
- los métodos getNextTimeout y getTimeRemaining en EJBTimer2
App1#EJBJar1.jar#EJBTimer1=2:App2#EJBJar2.jar#EJBTimer2=12