Resumen
En esta clase repasamos la noción de eventos para comunicar cosas que ocurren en nuestro sistema a otros objetos, sin acoplarnos a lo que hacen, pero ganando en flexibilidad de que se puedan suscribir otros interesados.
Además, introducimos el concepto de patrones de comunicación entre componentes, entre los que aparecerán viejos conocidos junto a nuestro nuevo concepto de eventos.
Finalmente, trabajaremos sobre tareas programadas.
Tareas programadas
Las tareas programadas (o tareas calendarizadas) son operaciones de nuestro sistema que en lugar ejecutarlas de forma interactiva, como parte de nuestros casos de uso, se ejecutan de forma automática, con cierta frecuencia.
Puntos de entrada
Vamos a necesitar definir un archivo que oficie de punto de entrada, o como se suele llamar en inglés, main. Este archivo será responsable de cargar nuestro código y ejecutar la tarea calendarizada.
public class Main {
public static void main(string[] args) {
// ...
}
}
Empaquetado
Para poder ejecutar nuestro main, vamos a necesitar primero crear un paquete ejecutable (en el ecosistema de Java, utilizamos el formato jar
) que contenga el código de nuestro proyecto y sus dependencias.
Para ellos vamos a tener que agregar la configuración del maven-assembly-plugin
a nuestro pom.xml
:
<plugin>
<!-- Este plugin permite empaquetar nuestras aplicaciones utilizando distintos formatos -->
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<!-- Esto indica que genere un paquete que incluya las dependencias -->
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<!-- Esto indica cual será el punto de entrada de nuestro ejecutable -->
<manifest>
<mainClass>archivo.con.el.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Luego podremos ejecutar mvn package
, comando que generará el paquete en cuestión.
Crontab y expresiones cron
Finalmente, en cada nodo del sistema operativo donde se ejecutarán nuestras tareas programadas, vamos a tener que generar un crontab:
Nota: Al editar las tareas de
cron
, éste nos abrirá por defecto un editor de línea de comandos, comonano
ovim
. ¡A no temer! Es un editor, pero que se opera mediante el teclado.
# Con este comando podemos listar las tareas instaladas
crontab -l
# nos permitirá editar las tareas
crontab -e
Ahora sí, veamos las expresiones cron. Son propias de los sistemas operativos unix (como Linux) pero están ampliamente extendidas en otras tecnologías. Tienen la siguiente forma:
# m h dom mon dow comando
Por ejemplo:
# a cada minuto de cada día
* * * * * java -jar /home/user/nombre-del-paquete-ejecutable.jar
# cada 5 minutos
*/5 * * * * java -jar /home/user/nombre-del-paquete-ejecutable.jar
# al inicio de cada hora
0 * * * * java -jar /home/user/nombre-del-paquete-ejecutable.jar
# a las 23:59 de cada domingo
23 59 * * 0 java -jar /home/user/nombre-del-paquete-ejecutable.jar
¡Tenemos que tener cuidado! Las rutas a los archivos deben ser absolutas.
Si todo está bien, obtendremos el siguiente mensaje al guardar:
crontab: installing new crontab
Archivos de log
Necesitamos tener registro de lo que pasó. Una forma sencilla consiste en redireccionar la salida estándar utilizando >>
* * * * * java -jar /home/user/nombre-del-paquete-ejecutable.jar >> /home/user/tarea_programada.log
Deteniendo la calendarización
crontab -e
Y eliminamos la línea o la comentamos con #
. Obtendremos nuevamente éste mensaje:
crontab: installing new crontab
Material
- Repaso de Observer
- Que Me Pongo Sexta Iteración: Punto bonus.
- Esta es una posible puesta en común.
- Esta es otra puesta en común, que incluye el punto bonus
- Presentación utilizada
- Apunte sobre el patrón Observer, caso práctico
- Sobre los efectos del Observer
Material complementario
- Patrones de Diseño
- Observer, página 269
Para la próxima clase
- Releer los apuntes de Observer, caso práctico, Repaso de Observer y Sobre los efectos del Observer. Es importante hacerlo dado que es un patrón complejo que requiere tiempo para que asiente.
- Ver ¿Por qué me vigilan si no soy nadie?, una charla que sirve como puntapié para entender el vínculo entre eventos, extractivismo de datos y vigilancia digital.
- Ver Diseño y metodologías de desarrollo
- Leer el enunciado de Noodle. Idealmente, comenzar a pensar una solución.