Java EE MicroServices con Payara

Vamos a construir  nuestro primer ejemplo de Java EE MicroServices usando Payara como servidor de aplicaciones . Payara este basado en Glassfish y esta cogiendo tracción en este mundo nuevo de los microservicios. El primer paso que tenemos que hacer es descargarnos la versión de Payara para microservices Básicamente lo que estaremos descargando es un simple fichero jar. Este servidor es capaz de ejecutar cualquier aplicación en formato war . Vamos a construir nuestro primer Microservicio sobre Java EE.


package com.arquitecturajava.recursos.ejemplo1;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

import com.arquitecturajava.Libro;

@Path("libros")
public class RecursoLibros {
	
	@GET
	@Produces("application/json")
	public List<Libro>  getLibros() {
		
		Libro l1= new Libro("El juego de ender",500);
		Libro l2= new Libro("Dune",100);
		List<Libro> misLibros= new ArrayList<Libro>();
		misLibros.add(l1);
		misLibros.add(l2);
		return misLibros;
	}
	
}

Creando Java EE MicroServices

Hemos usado la anotación @Path para dar de alta la ruta  “libros” y la anotación @GET para que responda a la petición GET habitual devolviendo un listado de libros.  La anotación @Produces nos devuelve los datos en formato JSON. El uso de estas anotaciones nos generará errores a nivel de la aplicación web en Eclipse ya que no las encuentra. Para solventarlo modificaremos las propiedades del proyecto y añadiremos soporte para el estandar de JAX-RS en su versión 2.

java ee microservices

Una vez hecho esto todas las anotaciones serán aceptadas por Eclipse. Nos queda por mostrar el código fuente de la clase Libro.


ackage com.arquitecturajava;

import java.io.Serializable;

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "libro")
public class Libro implements Serializable {

	private String titulo;
	private int paginas;
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	public int getPaginas() {
		return paginas;
	}
	public void setPaginas(int paginas) {
		this.paginas = paginas;
	}
	public Libro() {
		super();
	}
	
	public Libro(String titulo, int paginas) {
		super();
		this.titulo = titulo;
		this.paginas = paginas;
	}
	
	
}


Como podemos observar la clase incluye la anotación @XmlRootElement que permitirá que el servidor pueda serializar correctamente los diferentes libros a formato JSON. El último paso es registrar nuestro servicio.


package com.arquitecturajava;


import java.util.Set;

import javax.ws.rs.core.Application;
@javax.ws.rs.ApplicationPath("servicios")
public class MicroServicioAplicacion extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new java.util.HashSet<>();
        addRestResourceClasses(resources);
        return resources;
    }
    private void addRestResourceClasses(Set<Class<?>> resources) {
        resources.add(com.arquitecturajava.recursos.ejemplo1.RecursoLibros.class);
    }
}


Ya tenemos el Microservicio creado , nos queda exportar el proyecto como war y pasarlo como parámetro a Payara server para que lo lance .

java ee microservices payara

La instrucción a nivel de linea de comandos es así de sencilla , nos vale con lanzar el servidor y pasar como parámetro nuestra aplicación. Ya podemos acceder al microservicio.

java ee microservices json

Payara se esta haciendo un hueco en el mundo de Java EE MicroServices hay que estar atento a su evolución.

Otros artículos relacionados : ¿Qué es Spring Boot? , Reactive MicroServices y Arquitectura , ¿Qué es Docker y para qué sirve?

About Cecilio Álvarez Caules

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

,

11 Responses to Java EE MicroServices con Payara

  1. sergio 14 diciembre, 2016 at 13:06 #

    Por complementar, el gran Adam Bien muestra como integrar esos microservicios con Docker.

    https://www.youtube.com/watch?v=QO2321eMNYE

    https://www.youtube.com/watch?v=8Da5jOMaNtk

    Un saludo 🙂 Gracias Cecilio,

    • Cecilio Álvarez Caules 14 diciembre, 2016 at 13:26 #

      gracias a tí 😉

  2. Liz Miranda. 14 diciembre, 2016 at 16:42 #

    Excelente articulo !! Gracias.

    • Cecilio Álvarez Caules 14 diciembre, 2016 at 17:16 #

      de nada 🙂

  3. Sergio 14 diciembre, 2016 at 22:17 #

    Creo que sería bastsnte interesante que escribieras un entrada sobre la comunicación entre microservicios. Por lo que he estado leyendo el tema de la comunicación es bastante complejo ya que al ser servicios independientes no debe haber acoplamiento entre los diferentes objetos de negocio, es decir, dos microservicios no deben conocer el mismo DTO para evitar el acoplamiento entre ellos o al menos eso entiendo. Entonces, si no conocen el objeto se negocio, ¿cómo se comunican? En el ejemplo usas un marshall a JSON de un DTO, pero para que otro servicio usara el JSON tendría que conocer la estructura del mismo.

    Saludos!

  4. Oscar P. 14 diciembre, 2016 at 22:24 #

    muy buen articulo, y gracias tambien al aporte de Sergio, muy interesante el tema micro servicios con Docker

    • Cecilio Álvarez Caules 14 diciembre, 2016 at 22:24 #

      gracias 🙂

  5. Juan 15 diciembre, 2016 at 14:35 #

    He escuchado mucho de los microservicios en los últimos días. Cecilio ¿tenés algún artículo que hable o explique el tema? o po lo meno que diga con qué se come

    • Cecilio Álvarez Caules 16 diciembre, 2016 at 12:23 #

      Intentaré escribir algo las próximas semanas para aclararlo 🙂 , gracias por la idea

  6. asdf 15 diciembre, 2016 at 14:40 #

    Hola!

    Antes de comenzar con tu ejemplo deberías advertir que los servicios Rest no sirven para implementar Microservicios.

    Saludos!

    • Cecilio Álvarez Caules 17 diciembre, 2016 at 8:00 #

      La verdad es que todo lo de los microservicios esta empezando y es cierto que hay voces que hablan de que usar REST directo no es lo mejor sino que deberíamos usar un message broker para desacoplar como pone en este artículo de netflix. Aún así la comunicación seguiría siendo REST pero mas desacoplada. Cualquier idea que puedas aportar será bienvenida.

      gracias

Deja un comentario