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.
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 .
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.
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?
Hola!
Antes de comenzar con tu ejemplo deberías advertir que los servicios Rest no sirven para implementar Microservicios.
Saludos!
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
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
Intentaré escribir algo las próximas semanas para aclararlo 🙂 , gracias por la idea
muy buen articulo, y gracias tambien al aporte de Sergio, muy interesante el tema micro servicios con Docker
gracias 🙂
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… Read more »
Excelente articulo !! Gracias.
de nada 🙂
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,
gracias a tí 😉