"Building RESTful Web Services with Java EE 8" es un buen libro de Leander Reimer
o en el browser
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.
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
- public Pais find(@PathParam("idpais") String idpais) Lo usamos para devolver un solo pais.
- 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
- 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
Comments