Mi programa tiene un componente, denominado Planificador, que permite que otros componentes registren puntos en el momento en el que desean que se los devuelva. Esto debería funcionar muy parecido al servicio cron de Unix, i. mi. usted le dice al Programador "notifíqueme a las diez minutos después de cada hora completa".Clase de biblioteca Java para manejar la ejecución programada de "devoluciones de llamada"?
Me doy cuenta de que no hay devoluciones de llamada reales en Java.
Aquí está mi enfoque, ¿hay una biblioteca que ya haga esto? No dude en sugerir mejoras, también.
Registro de llamadas a Programador pasa:
- una especificación de tiempo que contiene la hora, minuto, segundo, mes del año, dom, Dow, donde cada elemento puede ser indeterminado, que significa "ejecutar cada hora/minuto etc. " (al igual que los crontabs)
- un objeto que contiene datos que le indicarán al objeto que llama qué hacer cuando el Programador lo notifique. El Programador no procesa esta información, solo la almacena y la reenvía luego de la notificación.
- una referencia al objeto que llama
En el arranque, o después de una nueva solicitud de registro, el programador comienza con un objeto Calendario de la hora actual del sistema y comprueba si hay alguna entrada en la base de datos que coincidan con esta punto en el tiempo. Si los hay, se ejecutan y el proceso comienza de nuevo. Si no lo hay, el tiempo en el objeto Calendario se incrementa en un segundo y los entreis se vuelven a verificar. Esto se repite hasta que haya una entrada o más que coincidan. (Simulación de eventos discretos)
El programador recordará esa marca de tiempo, dormirá y se activará cada segundo para verificar si ya está allí. Si sucede que se despierta y el tiempo ya pasó, comienza de nuevo, del mismo modo si ha llegado el momento y las tareas se han ejecutado.
Editar: Gracias por señalarme a cuarzo. Estoy buscando algo mucho más pequeño, sin embargo.
Sí, pero necesitaba algo realmente simple, sin dependencias adicionales. Tengo persistencia manejada en mi aplicación de todos modos, el programador no lo necesita. Sin embargo, tengo Quartz en mi lista, si necesito más poder más adelante. –
En la versión más reciente, ahora puede agrupar trabajos de Quartz con Terracotta además de una base de datos. –
Es curioso que las funciones de persistencia de Quartz se promocionen como una gran ventaja: en muchos/la mayoría de los casos, son solo un gran PITA. – StaxMan