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

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...

Incrementar Memoria NetBeans

Algunas veces necesitamos incrementar la memoria para un mejor rendimiento. http://www.netbeans.org/community/releases/55/uml-download.html Este es un ejemplo para UML. Descripción en ingles. Increasing Memory Settings (applicable to all builds) The default memory settings for NetBeans should be increased for UML projects. If you have the available memory, Locate your NetBeans installation directory ($install_dir). This can be found by starting up NetBeans and selecting Help -> About then select the Detail tab. Edit the $install_dir/etc/netbeans.conf file. Find the line defining netbeans_default_options . Increase the maximum memory attribute to -J-Xmx512m. If you experience heap overflows while working with larger files, you should increase this value further.

Test con JUnit

El viernes dicte un taller en el que conversábamos sobre Tecnologías Java y luego desarrollamos una aplicación muy básica para demostrar como utilizar JUnit con NetBeans. Pasos: 1. Crear un proyecto Desktop con NetBeans 2. Crear una clase llamada Operaciones 3. Diseñados un formulario y agregramos componentes de manera que quede similar a la figura Código de los botones try { double a = Double.parseDouble(jTextField1.getText()); double b = Double.parseDouble(jTextField2.getText()); Operaciones operaciones = new Operaciones(); double r = operaciones.Sumar(a, b); jTextField3.setText(String.valueOf(r)); } catch (Exception ex) { JOptionPane.showMessageDialog(this, ex.getMessage().toString()); } 4. Creamos los test Seleccionamos las clases En el menu Herramientas,seleccionamos Crear pruebas JUnit Seleccionamos la versión de JUnit En la ventana siguiente seleccionamos los parámetros para nuestras pruebas . Le quitamos la selección a Probar Inicializador y Probar Finalizador NetBeans crea las...