Skip to main content

Microservicios con Java EE/Jakarta + PayaraMicro +EJBMoordb

"Building RESTful Web Services with Java EE 8" es un buen libro de  Leander Reimer

https://www.packtpub.com/application-development/building-restful-web-services-java-ee-8



Nos muestra como crear microservicios en Java EE 8 de manera muy sencilla. Utilizando JAX-RS, En este ejemplo mostraremos un ejemplo usando la base de datos NoSQL.

 Mongodb mediante el API ejbmoordb, utilizando Payara Micro  con Apache NetBeans.

Si no tienes el plugin de Payara Micro para NetBeans, en un post anterior se muestra los pasos para instalarlo .Ejecutar payara micro desde NetBeans



Ejecutamos Mongodb

mongod

Entrar al shell
mongo

En mongodb contamos con una base de datos llamada store

y una colección llamada pais


Deseamos crear una aplicación Java EE basada en JAX-RS para crear microservicios , usaremos un Repository para las operaciones CRUD con la base de datos implementando ejbmoordb. 

Creamos una aplicación Payara Micro Application

desde  NetBeans: File -->New Project
Categories: Maven 
Projects: Payara Micro Application





Agregar la dependencia y el repositorio al archivo pom.xml
  <dependency>
            <groupId>com.github.avbravo</groupId>
            <artifactId>ejbjmoordb</artifactId>
            <version>0.8.5</version>
        </dependency>

 <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>


Indicar el finalName
  <finalName>microservices</finalName>

_____________________________________________________________

CONFIGURAR ENTORNO EJBMOORDB 
_______________________________________________________________________
  • Provider
  • Entity
  • Repository


  • Crear el entity 

public class Pais {
@Id
    private String idpais;
    private String pais;

    @Embedded
    private List<UserInfo> userInfo;

    public Pais() {
    }

    @Override
    public String toString() {
        return  pais ;
    }
      
}



  • Crear el Repository

@Stateless
public class PaisRepository extends Repository<Pais> {

    @EJB
    MongoClientStoreejbProvider MongoClientStoreejbProvider;
    @Override
    protected MongoClient getMongoClient() {
       return MongoClientStoreejbProvider.getMongoClient();
    }
    public PaisRepository(){
        super(Pais.class,"store","pais");
    }
    @Override
    public Object findById(String key, String value) {
       return search(key,value); 
    }
    @Override
    public Object findById(String key, Integer value) {
        return search(key,value);
    }

}

  • Crear el provider
@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public class MongoClientProvider {

    private static final Logger LOG = Logger.getLogger(MongoClientProvider.class.getName());
    private MongoClient mongoClient = null;

    @Lock(LockType.READ)
    public MongoClient getMongoClient() {
        if (mongoClient == null) {
            init();
        }
        return mongoClient;
    }

    @PostConstruct
    public void init() {
        try {

           mongoClient = new MongoClient();
        } catch (Exception e) {
            JsfUtil.errorMessage("init() " + e.getLocalizedMessage());
        }
    }
}


_______________________________________________________________________________
CREAR EL MICROSERVICIO
_______________________________________________________________________________

Una clase Java que hereda de Application y debemos agregar la anotación @ApplicationPath("mypath")  donde especificamos el path del microservicio.

import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("rest")
public class ApplicationConfiguration extends Application{
      @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new java.util.HashSet<>();
        resources.add(com.avbravo.microservices.PaisResources.class);
             return resources;
    }
}


Crear el Resource 

  • @GET 
  • @Path indicamos la ruta
  • @PathParam especificamos el parametro
  •  @Produces indicamos el MediaType.

Crearemos dos métodos 
  1.   public Pais find(@PathParam("idpais") String idpais) Lo usamos para devolver un solo pais.
  2.   public List<Pais> findAll() . Retornara una lista de paises

import com.avbravo.microservices.entity.Pais;
import com.avbravo.microservices.repository.PaisRepository;
import java.util.List;
import java.util.Optional;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
 *
 * @author avbravo
 */
@Stateless
@Path("pais")
public class PaisResources {

    @Inject
    PaisRepository paisRepository;

    @GET
    @Path("{idpais}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Pais find(@PathParam("idpais") String idpais) {
        Pais pais = new Pais();
        try {
            List<Pais> list = paisRepository.findBy(new Document("idpais",idpais));
            if(!list.isEmpty()){
                pais= list.get(0);
                
            }
     
        } catch (Exception e) {
            System.out.println("Error find() " + e.getLocalizedMessage());
        }
        return pais;
    }


    @GET
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public List<Pais> findAll() {
        return paisRepository.findAll();
    }
}



______________________________________________________________________________
EJECUTAR EL MICROSERVICIOS
______________________________________________________________________________

Hay diversas maneras
  1. Meditante un Uber Jar
  • Si usamos Payara Micro podemos generar el uber jar mediante
java -jar payara-micro-5.182.jar --deploy /home/avbravo/microservices.war --outputUberJar /home/avbravo/microservices.jar

  • Ejecutarlo
java -jar microservices.jar


2. Desde NetBeans
Podemos ver los web services


Ejecutamos el proyecto



En la parte inferior observamos
Payara Micro URLs:
http://192.168.60.243:8080/microservices

'microservices' REST Endpoints:
GET /microservices/rest/application.wadl
GET /microservices/rest/pais
GET /microservices/rest/pais/{idpais}


Podemos verificarlos desde el navegador, terminal , aplicación como postman

Usando la dirección: http://192.168.60.243:8080/microservices/rest/pais

Desde consola:

Desde el navegador


Usando postman

Si solo queremos un registro





o en el browser















Comments

Popular posts from this blog

Libro JEE7 Capítulo 2. Crear aplicación Web

Capítulo 2. Crear  aplicación Web Modelo General Desarrollo de una aplicacion Web Dependencias Maven Usando el Asistente Maven del IDE Editar el archivo pom.xml MODELO DESARROLLO JPA Proceder a Crear los Entity con NetBeans Creación de los EJB CDI vs ManagedBeans CREAR UN CDI PARA EL MANEJO DE MENSAJES Código completo del CDI JSFUtil.java FACELETS CREAR PLANTILLA FACELETS CON <p:layout> de PRIMEFACES Código completo de template.xhtml Editar template.xhtml Crear la página Index.xhtml CREAR CDI BEANS ESTATUSCONTROLLER.java Crear los Facelets Template Client para insertar Estatus Editar el entity Estatus.java Editar EstatusFacade.java Convertidores Crear EstatusConverter.java Modelo General Desarrollo de una aplicacion Web Este capítulo  muestra el desarrollo de la aplicación de ejemplo de Scrum usando tecnologías JEE 7. Esta aplicación  permitirá insertar registros en una tabla utilizando JPA, primefaces / JavaServer Faces, EJB, CDI. P

Cambiando el estado de un checkbox

Cambiando el Estado de un CheckBox Algunas veces deseamos controlar el estado de un checkbox o cambiarlo segùn determinadas condiciones. Pasos: 1. Creamos un proyecto Web. 2. En el diseñador agregamos un checkbox y dos botones. * Dar click derecho en el checkbox y luego seleccionar Add Binding Attribute, para agregar los atributos al checkbox, de manera que los podamos usar en nuestro código. Generando automáticamente private Checkbox checkbox1 = new Checkbox(); public Checkbox getCheckbox1() { return checkbox1; } public void setCheckbox1(Checkbox c) { this.checkbox1 = c; } 3.Damos click derecho en el botón Habilitar, y seleccionamos Edit Action Event Handler. A continuación, agregamos el código: this.checkbox1.setSelected(true);, el método setSelected con valor true, marca el checkbox como seleccionado, y un valor de false, quita la marca. public String button1_action() { // TODO: Process the action. Return value is a navigation

Tutorial básico de aplicaciones Web con NetBeans parte 1

NetBeans ofrece un excelente soporte para el desarrollo de aplicaciones Web, en esta ocasión lo haremos utilizando el Framework Java Server Faces 2.0. En el Menu Seleccionamos Nuevo->Proyecto y luego en Categorias Java Web y en tipo de Proyectos Web  Application indicamos el nombre del proyecto Seleccinamos el servidor Web, usamos GlassFish ya que este soporta EJB3.0 y JSF 2.0 Framework Java Server Faces El IDE genera el esquelto del proyecto Web Pages   almacenamos las paginas .html, xhtml, jsf, los archivos de recursos, los scripts .js, imagenes Source Packages    Son las clases Java  Test Packages    Son las clases que usamos para los Test Libraries     Tenemos las bibliotecas de Java y GlassFish necesarias para ejecutar la aplicación Web. Test Libraries     Están las bibliotecas usadas para los test  Configuration Files    Archivos de configuración de la aplicación. Ejecutamos la aplicación  Esperamos que se inicie GlassFish y se cargue la aplicación Este se