Header Ads Widget

Ticker

6/recent/ticker-posts

Scheduling principals in Java applications

 Muchos proyectos requieren funcionalidad de programación, como trabajos programados, trabajos repetidos, ejecución asincrónica, etc.

Nuestro método preferido es utilizar un programador de trabajos empresariales como Quartz de OpenSymphony.

Una de las partes más complicadas al codificar con tareas programadas es la parte de ejecución. La regla general principal aquí es prestar atención al código real que se ejecutará. Los marcos de programación utilizan subprocesos de trabajo en segundo plano para ejecutar el código de forma asincrónica. El programador de trabajos empresariales Quartz, por ejemplo, mantiene un grupo de subprocesos de trabajo que son monitoreados por un subproceso principal de "controlador".

Debe tener en cuenta que los trabajos programados son asíncronos por naturaleza, por lo que introducir una capa de ejecución asíncrona es nuestra forma preferida de decir que mantenemos las cosas limpias.

Muchas veces en el pasado nos hemos encontrado con el dilema de permitir que los subprocesos de trabajo del marco de programación ejecuten el código real o implementar una capa de ejecución asincrónica alternativa. Cualquiera de las dos formas tiene sus pros y sus contras.

Usando el marco de programación para ejecutar código real, los pros:

  1. Requiere menos esfuerzo de implementación
  2. Los subprocesos de trabajo son supervisados ​​por el subproceso "controlador" del marco
  3. El código de implementación se ejecuta a la hora programada precisa

Usando el marco de programación para ejecutar código real, contras:

  1. El código de implementación coexiste con el marco de programación
  2. Para el código de implementación "de larga duración", como la comunicación con sistemas externos, las consultas de la base de datos en la "hora pico", el análisis de archivos, los bucles, etc., surge el problema principal de que probablemente se quedará sin la programación de subprocesos de trabajo del marco, especialmente en el caso de trabajos repetidos en intervalos de tiempo cortos.

Nos gusta pensar que el marco de programación debe actuar como el "programador" y no como el "ejecutor". La responsabilidad principal del marco de programación debería ser "disparar" los eventos de ejecución en el momento apropiado. Deben utilizarse detectores de eventos para realizar la ejecución real del código.

La mejor forma de implementar este patrón de diseño es utilizar mensajería JMS asíncrona. Los subprocesos de trabajo del marco de programación deben insertar un mensaje en una cola JMS al ejecutarse. Los subprocesos de escucha de JMS deben ejecutar el código real al recibir el mensaje. Al hacerlo, se introducirá un ligero retraso antes de la ejecución real del código, debido a la sobrecarga de lectura / escritura de JMS, pero el código de implementación "de larga duración" no causará ningún problema al marco de programación.

Publicar un comentario

0 Comentarios