Configuración del servicio temporizador de JavaBeans de empresa para temporizadores persistentes

Para temporizadores EJB persistentes, puede configurar el servicio de temporizador EJB para controlar el origen de datos donde se almacenan los temporizadores, el intervalo entre que el temporizador efectúa el reintento y el número de reintentos para las llamadas que han fallado en el método de devolución de llamada en espera.

Acerca de esta tarea

Cuando se ha habilitado la característica ejbPersistentTimer, se debe haber configurado un origen de datos para persistir los temporizadores o cualquier fallará todo intento de utilizar temporizadores persistentes. El servicio de temporizador EJB utiliza DefaultDataSource si se ha configurado y no se configura ningún otro origen de datos específico para que lo utilice el servicio de temporizador EJB.

Además, el servicio de temporizador EJB reintenta las llamadas que han fallado en el método de devolución de llamada de tiempo de espera para los temporizadores persistentes cada 5 minutos hasta que el método de devolución de llamada de tiempo de espera finalice correctamente.

Utilice las opciones siguientes para configurar temporizadores persistentes.

Ejecutor planificado de temporizadores persistentes EJB

Especifica una referencia a un ejecutor persistente que controla el comportamiento de temporizadores persistentes. Se proporciona una instancia predeterminada, defaultEJBPersistentTimerExecutor, que utiliza DefaultDataSource como almacén persistente. Es posible cambiar la referencia del ejecutor planificado de los temporizadores persistentes EJB por una configuración personalizada, o se puede alterar temporalmente la instancia predeterminada para cambiar los valores específicos. Están disponibles las opciones siguientes para el ejecutor persistente:

Límite de reintentos

Especifica el número máximo de veces que se puede reintentar el método de devolución de llamada de tiempo de espera que falla. Si tras el reintento el método de devolución de llamada de tiempo espera resulta satisfactorio, el servidor dejará de ejecutarlo. Si falla un reintento, el servidor seguirá reintentándolo hasta que el método de devolución de llamada de tiempo de espera sea satisfactorio o hasta que se llegue al límite de reintentos. Tras alcanzar el límite de reintentos, el servidor no intentará ejecutar de nuevo el método de devolución de llamada de tiempo de espera, incluso aunque los intentos anteriores no hayan resultado satisfactorios. El valor predeterminado de -1 indica reintentos ilimitados. Un valor de 0 indica que no se llevan a cabo reintentos, y no es compatible con la especificación EJB. Un valor de 1 o mayor indica el número específico de reintentos.

El hecho de cambiar la configuración del número de veces que se reintenta un método de devolución de llamada de tiempo de espera para temporizadores no persistente resulta útil para las aplicaciones que no requieren que los temporizadores no persistentes finalicen en cada intento planificado. Por ejemplo, si una aplicación crea un temporizador de intervalo no persistente que se ha planificado para que se ejecute cada 5 minutos, al configurar el número de reintentos en 0, implica que el temporizador se ejecutará una vez cada 5 minutos, independientemente de si el resultado es satisfactorio o si falla.

Intervalo de reintentos

Especifica el intervalo entre reintentos para un método de devolución de llamada de tiempo de espera fallido. El primer reintento siempre se produce inmediatamente, independientemente del intervalo que se haya configurado para este valor. Todos los reintentos adicionales esperan al intervalo especificado para este valor. Un valor de 0 indica que todos los reintentos son inmediatos. Un valor de 1 o mayor indica que los reintentos deben esperar ese número específico de segundos. El valor predeterminado es de 300 segundos.

La configuración de un intervalo de tiempo distinto entre reintentos para temporizadores no persistentes resulta útil para aplicaciones en que es importante que el método de devolución de llamada de tiempo de espera se complete antes del tiempo planificado. Este enfoque también se aplica en aplicaciones en que se acepta retrasar la finalización del temporizador como, por ejemplo, un intervalo de reintento posterior, para habilitar el método de devolución de llamada de tiempo de espera de forma que la aplicación pueda tener una oportunidad de mejor de ejecutarse correctamente.

Almacén de tareas persistentes

Especifica qué origen de datos se utiliza. Se proporciona una instancia predeterminada, defaultDatabaseStore, que utiliza DefaultDataSrouce como almacén persistente.

Procedimiento

  1. Configure el servidor de aplicaciones para que incluya una característica EJB que admita temporizadores persistentes en el archivo server.xml.
     <featureManager>
             <feature>ejbPersistentTimer-3.2</feature>
        </featureManager>
  2. Configure el servicio de temporizador EJB para utilizar un número máximo específico de valores de reintento y valores de intervalo de reintento para temporizadores persistentes en el archivo server.xml. Por ejemplo, utilice la siguiente configuración para especificar el reintento de temporizadores persistente hasta 3 veces, con 10 segundos entre reintentos:
    <persistentExecutor id="defaultEJBPersistentTimerExecutor" retryInterval="10s"
              retryLimit="3"/>

    Con esta configuración, el método de devolución de llamada de tiempo de espera para un temporizador puede invocarse hasta 4 veces. La primera llamada se produce en el tiempo planificado. Si falla la primera llamada, el primer reintento se producirá inmediatamente tras el error. Si el método de devolución de llamada de tiempo de espera sigue fallando, el segundo y tercer reintento se producirá 10 y 20 segundos después.

    En el ejemplo siguiente, un método de devolución de llamada de tiempo de espera fallido solamente se reintenta una vez. El intervalo de la de devolución de llamada es irrelevante porque el primer reintento siempre se inicia inmediatamente.

    <persistentExecutor id="defaultEJBPersistentTimerExecutor" retryLimit="1"/>
  3. Configure el servicio de temporizador EJB para utilizar un origen de datos específico para temporizadores persistentes en el archivo server.xml. Por ejemplo, utilice la configuración siguiente para especificar que los temporizadores persistentes deben almacenarse utilizando jdbc/timerDataSource.
    <dataSource id="timerDataSource" jndiName="jdbc/timerDataSource">
    </dataSource>
    <databaseStore id="EJBTimerDatabaseStore" tablePrefix="EJBTimer_"dataSourceRef="timerDataSource"/>
    <persistentExecutor id="defaultEJBPersistentTimerExecutor"
              taskStoreRef="EJBTimerDatabaseStore"/>

Icono que indica el tipo de tema Tema de tarea

Nombre de archivo: twlp_config_ejbtimer_persistent.html