Introducción a Java EE Batch

Java EE Batch es una de las especificaciones JSR 352  añadidas por la plataforma Java EE 7 . Esta especificación esta orientada a la creación de procesos batch dentro del mundo Java. Vamos a un una pequeña introducción a su funcionamiento.

Java EE Batch y Jobs

Los procesos Batch tienen varios conceptos importantes en cuanto a la especificación se refiere. Uno de los mas importantes es el de Job o trabajo , que se encarga de definir  la estructura de un trabajo concreto.

Java EE Batch Jobs

Un trabajo puede estar compuesto de varios pasos o steps . Vamos a crear un nuevo proyecto Web y crear un trabajo. Para ello me voy a apoyar en Jboss Developer Studio.Esta herramienta permite la creación de un trabajo a través de un asistente .

Java EE Batch Eclipse

El asistente nos creará en fichero denominado job.xml en el cual podemos definir los diferentes pasos de nuestro trabajo.

Java_EE_Batch_JobFile

Cada uno de los pasos puede estar ligado a varios elementos que gestionan nuestros procesos batch .

 

Java EE Batch Batchlet

En este caso vamos a ligarlos a 2 Batchlet que son las unidades más básicas a nivel de procesos Batch. Vamos a ver las modificaciones que tenemos que hacer al fichero XML.


<?xml version="1.0" encoding="UTF-8"?>
<job id="job" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd"
version="1.0">
<step id="paso1" next="paso2">
<batchlet ref="batchLet"></batchlet>
</step>
<step id="paso2">
<batchlet ref="batchLet2"></batchlet>
</step>
</job>

 

Acabamos de ver como enlazar dos Batchlet en nuestro proceso , es momento de construir su código.


package com.arquitecturajava.batch;

import javax.batch.api.AbstractBatchlet;
import javax.enterprise.context.Dependent;
import javax.inject.Named;

@Dependent
@Named
public class BatchLet extends AbstractBatchlet{

@Override
public String process() throws Exception {
System.out.println("paso uno del proceso batch");

return null;
}

}


package com.arquitecturajava.batch;

import javax.batch.api.AbstractBatchlet;
import javax.enterprise.context.Dependent;
import javax.inject.Named;

@Dependent
@Named
public class BatchLet2 extends AbstractBatchlet{

@Override
public String process() throws Exception {
System.out.println("paso dos del proceso batch");

return null;
}

}

Los Batchlet que acabamos de crear imprimen un mensaje por la consola del servidor. Vamos a invocar nuestro job desde un Servlet para ver como este trabajo se ejecuta.


import java.util.Properties;

import javax.batch.operations.JobOperator;
import javax.batch.runtime.BatchRuntime;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/ServletBatch")
public class ServletBatch extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
JobOperator operador=BatchRuntime.getJobOperator();
operador.start("job", new Properties());

response.getWriter().append("proceso batch  ").append(request.getContextPath());
}


}

En este caso hemos usado el BatchRunTime que es el encargado de gestionar todos los procesos batch y le hemos solicitado un operador. El operador será el encargado de que lancemos el  trabajo.

Java EE Batch JobOperator

 

Podremos ver el resultado por la consola de JBoss acabamos de ejecutar nuestro primer ejemplo de Java EE Batch

Java_EE_Batch_Log

Otros artículos relacionados:  Java EE EJB , EJB remoto

It's only fair to share...Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

About Cecilio Álvarez Caules

Cecilio Álvarez Caules Sun Certified Enterprise Architech (J2EE/JEE).

6 Responses to Introducción a Java EE Batch

  1. José 17 Mayo, 2016 at 1:55 #

    Gracias por el aporte, he aprendido mucho gracias a tu sitio.

    • Cecilio Álvarez Caules 17 Mayo, 2016 at 7:55 #

      Me alegro que te sea útil 🙂

  2. Alejandro G. 16 Mayo, 2016 at 21:33 #

    No me queda claro cómo el servidor sabe cuál es la clase Java de cada batchlet, en base a lo declarado en el fichero job.xml. En dicho fichero no hay una referencia a la clase Java, ni tampoco la clase Java de cada batchlet tiene en ningún lado una referencia al Id declarado en el xml.

    • Cecilio Álvarez Caules 17 Mayo, 2016 at 7:57 #

      Usa el principio de convención sobre configuración , apoyandose en la anotación @Named. Una vez que hemos anotado los batchlets estos estan a nuestra disposición . Eso sí con el nombre empezando en minúsculas de ahí que no haga falta poner más.

      • Alejandro G. 18 Mayo, 2016 at 14:14 #

        Muchas gracias por la aclaración.

        Muy útil el sitio, siempre con ejemplos sencillos y prácticos.

Trackbacks/Pingbacks

  1. Mis artículos de Java más leídos en 2016 - Arquitectura Java - 3 Enero, 2017

    […] Introducción a Java EE Batch : Uno de los nuevos aportes de Java EE 7 y que permitirá la ejecución de procesos batch dentro de los standards. […]

Deja un comentario