Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El desarrollo de microservicios busca desacoplar, distribuir toda la lógica compleja de un sistema en pequeños módulos
independientes pero que trabajan conjuntamente para un propósito en común. Los microservicios comúnmente son
consumidos por algún cliente, el cual puede ser un frontend o incluso otro microservicio.
Un microservicioS tiene una responsabilidad única (un alcance delimitado, un ámbito).
Vamos a partir del siguiente esquema de DB, que mapea las entidades de un hospital.
En este caso, para propósitos de práctica, crearemos un microservicio para cada tabla, pero si este fuera un esquema
más grande que reflejara la complejidad de un negocio más grande (cualquier proyecto empresarial), todas estas tablas
estarían siendo afectadas por un solo microservicio, dado que son catálogos.
Definiremos un proyecto base, el cual contendrá 3 de las 7 capas contempladas. Este proyecto sirve de staff para todos
los demás microservicios que estaremos definiendo. Este proyecto NO estará corriendo en el servidor.
PRIMER PASO
Ingresamos a https://start.spring.io para configurar nuestro proyecto springboot. Esta configuración también se puede
realizar desde dentro del ide, pero la interface web se presenta más sencilla.
Para este proyecto base se realizará la siguiente configuración:
Project: Maven Project
Languaje: Java
SpringBoot: 2.4.10 (escoger alguna que no tenga SNAPSHOT, M2 o alguna anotación.)
Metadata:
Group: com
Artifact: ms-persistence
Name: ms-persistence
Packaging: Jar
Java 8
Dependencias:
Spring Data JPA
Oracle Driver (en el caso de utilizar una db Oracle, si no, buscar el correspondiente)
SpringBoot DevTools
Estas dependencias son únicamente para la conexión a DB y el uso del modulo JPA.
En este punto damos clic a GENERATE, esto nos descargará un paquete comprimido que contiene nuestro proyecto
configurado.
SEGUNDO PASO
Descomprimir el paquete, esa carpeta ponerla en el workspace del IDE. Después es necesario abrir el IDE para
importarlo.
El archivo pom.xml nos indica que si reconoció el proyecto, clic en Finish para terminar de importarlo. Después de eso,
Maven estará construyendo la estructura del proyecto en nuestra máquina, la primera vez esto puede tomar un tiempo
considerable, esperar un poco.
Vemos que ya existe un paquete por default, com.mspersistence. Tomando como base esa nomenclatura, definiremos 3
paquetes más, entitys, repositorys y request.
Es importante que se siga EXACTAMENTE esa nomenclatura, es decir, los paquete conserven el nombre
base(com.mspersistence) y posteriormente diferenciarlos(entitys, repositorys, request).
De otro modo, el proyecto no encontrará las clases aunque nosotros si las podamos ver.
CUARTO PASO
Pero hay un problema, si desplegamos el paquete com.mspersistence veremos que dentro hay una clase llamada
MsPersistenceApplication.java la cual contiene el método main:
Esta clase deberemos eliminarla por una sencilla razón: este proyecto estará conectándose con los demás
microservicios, esto crearía una estructura donde habría más de un método main presente y recordemos que en
cualquier aplicativo Java sólo debe existir un método main en todo el aplicativo.
QUINTO PASO
Empezaremos a colocar las clases e interfaces necesarias en sus respectivos paquetes. Crearemos una clase llamada
Paciente. Es importante señalar que los nombres de las clases en Java siempre comienzan con su primer letra
mayúscula.
En el paquete repository, creamos una interface llamada PacienteRepository:
Por último, crearemos también una clase en el paquete Request, llamada PacienteRequest.
Nuestro proyecto debe verse ahora así:
SEXTO PASO – MAPEO DE ENTIDADES
Las entitys en Java son clases que mapean (es decir, reflejan o modelan) una tabla en concreto de base de datos, estas
clases contienen un atributo de clase por cada columna de la tabla en db y además de una anotación que le indica a JPA
como va a procesar esa columna con el atributo, además de otras situaciones particulares.
Cada columna de la
tabla tiene un nombre y
una definición (tipo de
dato)
Hay que considerar también que al menos en Oracle, la generación de id’s en las tablas se hacen por medio de una
secuencia , la cual también debe estar mapeada en la entidad. De modo que el mapeo quedaría así:
ANOTACIONES DE JPA
Al empezar a colocar las anotaciones, es normal que inmediatamente el IDE no sepa de donde importarlas. Basta con
esperar unos segundos para que esto suceda.
Esto agregara una línea nueva en la sección de los imports (ubicada en el tope de la clase)
Si sigue sin reconocerlas, entonces debemos ejecutar una serie de pasos a fin de que nuestro gestor de dependencias
reescane todas las clases y librerías.
Ahora debemos configurar la interface que se encargará de llevar y traer datos de la db por medio de JPA
Si dentro de los métodos de JPA no encontramos alguno que cumpla nuestras necesidades, podemos crear consultas
personalizadas con la anotación @Query, pero esto lo veremos mas adelante según se vaya necesitando.
Las dependencias extras son para la construcción de los servicios rest con JAX-RS y tomcat como servidor de
aplicaciones.
Se realizan los mismos pasos, generar el comprimido, descargarlo, descomprimir en el workspace e importarlo al IDE.
Nuestro proyecto debería tener una Del mismo modo que el estructura como la siguiente:
anterior proyecto, se crearán 4
paquetes con distinto nombre,
conservando la nomenclatura
del paquete default:
service
serviceImpl
controllers
exception
Se agregarán 2 anotaciones:
@EnableJpaRepositories: Sobreescribe la configuración por default de
JPA por la que nosotros le pasemos como argumento.
@EntityScan: Le indica a JPA en qué paquete debe buscar los entitys
con los que estará trabajando. Estructura del proyecto persistence
En este punto, ya estamos referenciando código de un proyecto dentro de otro, las capas de entidades y acceso a datos
estarán únicamente en el proyecto de persistencia. Estás serán consumidas por todos los demás microservicios y para
esto, hace falta hacer la inyección de dependencia del persistence hacia pacientes, en este caso.
Para tal motivo, es necesario abrir el archivo pom.xml de los 2 proyectos:
Datos de la dependencia
Lo que se realizó aquí fue integrar como una dependencia más, todo el proyecto persistence dentro del pom del
proyecto pacientes, indicándole el groupId, artifactId y versión del persistence dentro de llaves de dependencia.
Esta interface contiene las acciones particulares de cada lógica de negocio, por lo regular son procesos complejos que
utilizan dentro de sí las acciones definidas por JPA. En este ejemplo sencillo, se trata únicamente de las acciones básicas
de cualquier CRUD, pero en realidad esta capa tiene que ver más con los procesos propios de cada negocio.
Recordemos que en las interfaces solo se enlistan las acciones a realizar sin darles lógica, es decir, quedan como
métodos abstractos. La lógica se les da en aquellas clases que implementen estas interfaces.
Ahora, observa como al posicionar el cursor sobre el error marcado en la línea 12, la ayuda del IDE identifica un paquete
com.persistence.entity. Tal paquete es la capa de entitys del proyecto persistence, el proyecto que se conectó.
Entonces, el configurar las anotaciones @EnableJpaRepositories, @EntityScan y la respectiva inyección de
dependencias en los pom hizo posible que el IDE sepa de donde tomar ciertas clases que en el proyecto pacientes no
existen.
DECIMO PRIMER PASO – CAPA DE IMPLEMENTACION
Esta capa del microservicio es donde se encuentran todas las capas anteriores. Nótese entonces que las demás capas
estuvimos construyendo los distintos objetos y relaciones que nos servirán en esta capa para poder trabajar con objetos
que mapean tablas de base de datos y operaciones dadas por JPA, además de objetos de respuesta.
Cada anotación que aquí ves, el IDE te dirá de donde importarlo. Si no fuera asi, debes actualizar el proyecto.
Clic derecho al proyecto, Refresh, Build Project, después Maven->Update Project.