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.

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