martes, febrero 22, 2011

Java - Automatización de Procesos o Tareas con Java


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. Entorno


  • JDK 1.6.0 - 21
  • Netbeans 6.9.1.
  • Librerías de Quartz que lo pueden bajar de Aqui

2. Introducción


A quien no le han pedido en el trabajo o en la universidad que programen una tarea que se ejecute cada cierto determinado tiempo. Por ejemplo su jefe les puede decir que cada día le llegue a las 8:00 a.m. un reporte de las ganancias a su correo o les pueden decir cada hora quiero ver como va mi producción o tal vez cada 5 minutos quieren revisar si hay un nuevo registro de un proveedor. Esta tarea se podría hacer de manera fácil con un buen motor de Base De Datos, pero que pasaría si no tiene un motor de base de datos que se porte la programación de Tareas o Job??? Es por eso que buscando en Google encontré una librería que se llama Quartz que nos permite automatizar estos procesos. Y en el siguiente tutorial les mostrare como realizar un ejemplo sencillo con esta libreria.

3. Desarrollo


3.1. Creando el proyecto en Netbeans

Lo primero que debemos de hacer es crear un proyecto en Netbeans 6.9.1. al cual llamaremos "AutomatizarTareas"


















3.2. Agregando las librerías al proyecto

Luego debemos de agregar las librerías a nuestro proyecto y para eso hacemos clic derecho en nuestro proyecto que se llama "AutomatizarTareas" y seleccionamos la opción "Properties-->Libraries-->Add Jar Folder" y agregamos las librerías de Quartz que hemos bajado en la Parte 1 de este tutorial  (Entorno)



















3.3. Creando la Tarea

Debemos crear una clase que se llama "TareaInvocar.java"

package automatizartareas;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

//@autor Henry Joe Wong Urquiza

//La clase que tiene la tarea debe de implementar de la clase Job de Quartz
//ya que el programador de la tarea va a buscar una clase que implemente de ella
//y buscara el metodo execute para ejecutar la tarea
public class TareaInvocar implements Job {

  //Metodo que se ejecutara cada cierto tiempo que lo programemos despues
  public void execute(JobExecutionContext jec) throws JobExecutionException {
    //Aca pueden poner la tarea o el job que desean automatizar
    //Por ejemplo enviar correo, revisar ciertos datos, etc
    SimpleDateFormat formato = new SimpleDateFormat("hh:mm:ss");
    System.out.println( "Tarea invocada a la hora: " + formato.format(new Date()));
  }
}


3.4. Programación de la tarea

Debemos de crear una clase que se llame "Programacion.java"

package automatizartareas;

import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;

// @author Henry Joe Wong Urquiza

public class Programacion {
    //El horario de la tarea
    private Scheduler horario;

    //Metodo que crea el horario
    private void crearProgramacio() {

        try {
            //Creando la programacion
            SchedulerFactory factoria = new StdSchedulerFactory();
            //Obteniendo el horario
            horario = factoria.getScheduler();
            //Damos inicio al horario
            horario.start();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

    }
    //Metodo que da la informacion mas detallada sobre el horario, como hora de inicio de la tarea y cada
    //cuanto tiempo se ejecute la tarea
    public void iniciarTarea() {
        if (this.horario == null) {
            this.crearProgramacio();
        }
        //Informacion sobre la tarea
        //La informacion que se pide un nombre, a que grupo pertenece 
        //y a que clase que implemente de Job va a ser llamado
        JobDetail job = new JobDetail("TareaAutomatizar", null, TareaInvocar.class);
        //Creamos un trigger y le decimos cada cuanto queremos que se invoque la tarea o Job
        //Tenemos los metodos como los siguientes
        //TriggerUtils.makeSecondlyTrigger(tiempo) --> Para invocar una tarea cada cierto segundos
        //TriggerUtils.makeMinutelyTrigger(tiempo) --> Para invocar una tarea cada cierto minutos
        //TriggerUtils.makeHourlyTrigger(tiempo) --> Para invocar una tarea cada cierta hora
        //Entre otros mas que pueden revisar en la documentacion
        Trigger trigger = TriggerUtils.makeSecondlyTrigger(5);
        //En que momento va a iniciar la tarea
        trigger.setStartTime(new Date());
        //El nombre del trigger que debe ser unico
        trigger.setName("CadaCincoSegundos");
        try {
            this.horario.scheduleJob(job, trigger);
        } catch (SchedulerException ex) {
            System.out.println(ex.getMessage());
        }
    }
}

3.5. Invocar la tarea

Creamos una clase "Main.java" que vamos a invocar la tarea

package automatizartareas;

// @author hwong
public class Main {

    public static void main(String[] args) {
        try {
            new Programacion().iniciarTarea();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }
}

4. Ejemplo de la Aplicación


5 comentarios:

ESTA INTERESANTE EL TEMA, SIN DUDA ME SACARA DE VARIOS APUROS, YA QUE NECESITO IMPLEMENTARLO PARA QUE ME EJECUTE UNA TAREA CADA DETERMINADO TIEMPO. VOY A PROBAR EL CÓDIGO, Y LES COMENTO QUE TAL ME FUNCIONO.

MUCHAS GRACIAS POR PONER ESTE CÓDIGO

muy bien explicado, gracias :)

Me ha servido de mucho el ejemplo, muchas gracias!

Excelente tema. muchas gracias por la explicación.