SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
FRANCISCO JAVIER TOSCANO LOPEZ
23/03/2023
https://github.com/fjtoscano/meetuprelationaldb
SEVILLA MuleSoft Meetup Group
Who am I?
2
● Soy un gaditano que emigró hace ya casi 20
años a Sevilla donde resido actualmente.
● Llevo casi 20 años como Arquitecto Java,
experto en arquitecturas de Microservicios
basadas en Spring Boot y que hace 5 años
tuvo la oportunidad de conocer Mulesoft.
● Desde entonces, llevo ayudando a diseñar
arquitecturas de integración utilizando toda la
potencia que nos ofrece Mulesoft.
● Porque Mulesoft?, porque al estar basado en
Java me permitió conocer todos su potencial
desde el minuto uno , y me ayudo a entender
mejor como funciona por dentro.
Javier Toscano Lopez, Chief Architect, NTT Data
https://www.linkedin.com/in/francisco-javier-toscano-
lopez-1815919/
@fjtoscano
2
3
Agenda
• Como se integra Java con Bases de Datos relacionales
• Somos los integradores DBA? Pide ayuda !!!!
• Pool de conexiones, que es y para que sirve
• ApiKit Odata, generación automática de API´s a partir de fuentes de
datos
• Historias para no dormir y casos extraños
• Mesa redonda.
All contents © MuleSoft, LLC
Como se integra Java con Bases de Datos
relacionales
5
Bases de Datos
• Definición: Las bases de datos son sistemas de información capaces de almacenar
grandes cantidades de información de manera organizada.
Relacionales:
• Colección de elementos de datos
organizados en un conjunto de tablas
formalmente descritas.
• SQL: lenguaje estándar de consultas
No Relacionales:
• Esquemas flexibles
• No tienen identificador para asociar
datos
6
Java y las Bases de Datos
Java se puede comunicar con las BDs a través de
librerías llamadas JDBC
JDBC
CADENA DE CONEXION
• Url JDBC de conexión
• Identificación del usuario
• Query a ejecutar
APERTURA DE CONEXIÓN
• Creación de un objeto connection, con la cadena
de conexión
• Ejecución de la query
• Tratamiento de resultados
• Cierre de la conexión
7
Java y las Bases de Datos
Open
Close
Transactional
Operation
8
La evolución: persistencia y transaccionalidad
Para abstraer de la programación en SQL a los desarrolladores Java se crea la tecnología de persistencia
en BD, donde:
• Se utilizan clases Java “Entidades” que representan las tablas de BD, y donde sus atributos son las
columnas de dichas tablas.
• Se utiliza MyBatis, hibernate, o Spring Data como ejemplos de motores de persistencia.
• Se crea el concepto de transaccionalidad @Transactional, donde se controla el canuto de conexión
con la BD. Solo cuando termina el método es cuando se ejecuta todas las ordenes SQL
@Service
@Transactional
public class CustomerService {
private final CustomersRepository customersRepository;
@Autowired
public
this.cusCustomerService(final CustomersRepository customersRepository)
{tomersRepository = customersRepository;
}
public Customer findById(final long id) {
final CustomerEntity customer = customersRepository.findOne(id);
if (customer == null) {
throw new CustomerNotFoundException();
}
final Customer dto = new Customer();
dto.setFirstName(customer.getFirstName());
dto.setLastName(customer.getLastName());
dto.setEmail(customer.getEmail());
return dto;
}
@Entity
@Table(name = "customer")
public class CustomerEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "first_name", nullable = false)
private String firstName;
@Column(name = "last_name", nullable = false)
private String lastName;
@Column(nullable = false)
private String email;
All contents © MuleSoft, LLC
Somos los integradores, DBA?
Pide ayuda a alguien que sepa de BD !!!
10
Conector de Base de Datos de MuleSoft
• MuleSoft utiliza el Database Connector, para conectarse a cualquier tipo de BD del que exista librería
JDBC
• Utiliza el método mas antiguo, el método JDBC connection, donde el desarrollador de integración
tiene que saber de SQL para poder interactuar con la BD
• Por lo general el desarrollador de integración no tiene porque saber hacer consultas complejas a BD y
es por ellos, que se puede caer en un mal uso del conector de BD
11
Conector de Base de Datos de MuleSoft –
Conexion
• Configuración inline de conexión a BD
12
Conector de Base de Datos de MuleSoft –
Conexión por bean de Spring
• Configuración referenciando un bean
de Spring
13
Conector de Base de Datos - Operaciones
El conector de BD nos permite realizar muchas operaciones sobre las BD, pero las
principales son:
• Select, Insert, Update, Delete: CRUD de operaciones normales sobre las tablas
• Bulk Insert, Update, Delete: CRUD de operaciones con datos masivos
• On Table Row: Disparador que activa el flujo de mule cuando algo cambia en la tabla de
la BD
• Stored procedure: En los sistemas de BD que lo permitan, este componente hace
llamadas a los Procedure o Function de la BD
• Execute script o DDL: Permiten ejecutar lenguaje DDL que es capaz de construir
elementos como tablas en BBDD.
14
Conector de Base de Datos - Ejemplos
15
Conector de Base de Datos – Stored Procedure
y UDT
• Algunas BD relacionales como ORACLE, SQL Server, Mysql o PostGreSQL son capaces de
ejecutar código programático denominado PL/SQL
• PL/SQL se agrupa en forma de Funciones y Procedimientos que pueden ser llamados
desde MuleSoft
• La operación Stored Procedure, hacen referencia a la interacción de MuleSoft con los
PROCEDURE y FUNCTION de las BD relacionales.
• UDT (User Defined Types) son objetos creados dentro de ORACLE y que sirven como
parámetros en los procedimientos, funciones, cursores,….
16
Conector de Base de Datos – Stored Procedure
y UDT
1.- Se crean 4 tipos de objetos
PHONE_NUMBER
PHONE_NUMBER_ARRAY
PERSON
PEOPLE
2.- Se crea una tabla HUMANS, con tipos nativos
y tipos compuestos
3.- Finalmente se crea un procedimiento para
insertar registros en la tabla HUMANS
https://docs.mulesoft.com/db-
connector/1.14/database-connector-udt-stored-
procedure
17
Conector de Base de Datos – Stored Procedure
y UDT
%dw 2.0
output application/java
fun toPhoneNumberArray(phoneNumber) = Db::createArray("Database_Config", "PHONE_NUMBER_ARRAY",[Db::createStruct("Database_Config", "PHONE_NUMBER",
[phoneNumber.areaCode, phoneNumber.phoneNumber])])
fun toPerson(person) = Db::createStruct("Database_Config", "PERSON", [person.name, person.surname, person.age, toPhoneNumberArray(person.phoneNumber)])
---
Db::createArray("Database_Config", "PEOPLE", payload map (item, index) -> (toPerson(item)) )
18
Conector de Base de Datos – Stored Procedure
y UDT
%dw 2.0
output application/java
fun toPhoneNumberArray(phoneNumber) =
Db::createArray("Database_Config","PHONE_NUMBER_ARRAY",[Db::createStruct("Database_Config",
"PHONE_NUMBER", [phoneNumber.areaCode, phoneNumber.phoneNumber])])
fun toPerson(person) = Db::createStruct("Database_Config", "PERSON", [person.name,
person.surname, person.age, toPhoneNumberArray(person.phoneNumber)])
---
Db::createArray("Database_Config", "PEOPLE", payload map (item, index) -> (toPerson(item)) )
19
Conector de Base de Datos –
Recomendaciones de uso
• SELECT Y FOR EACH: Existen múltiples formas de conseguir los datos de una BD con
select anidadas y complejas, si no sabes pregunta a alguien que sepa.
• Cada componente de BD abre una conexión con la BD y esto consume muchos recursos
y tiempos de respuesta, limítalas todo los posible, utilizando correctamente las
operaciones.
• UDT SP: La codificación de los colum type en el DataBase Config esta en
https://docs.mulesoft.com/db-connector/0.3.9/database-connector-reference#data-
types-example
• UDT SP: El tratamiento de datos complejos en DataWeave es costoso en tiempo de
ejecución, es decir cuando el flujo del API entra en el trasform Message que crea los UDT
este proceso tarda mucho en MuleSoft y puede aumentar mucho el tiempo de respuesta
del API.
• UDT SP: Intentar utilizar datos nativos como parámetros en los stored procedure
All contents © MuleSoft, LLC
Pool de conexiones, que es y para que sirve
21
Pool de conexiones
Definición: Un pool de conexiones es un conjunto limitado de conexiones a una base de datos, que es
manejado por un servidor de aplicaciones de forma tal, que dichas conexiones pueden ser
reutilizadas por los diferentes usuarios.
• El componente de Database de MuleSoft, por defecto no tiene configurado el pool de conexiones,
por lo que cada vez que se conecta a la BD abre y cierra una conexión, consumiendo mucha
memoria.
22
Pool de conexiones – como se configura?
• Max pool size: Numero máximo de conexiones
concurrentes
• Min pool size: Numero mínimo de conexiones
abiertas
• Acquire Increment: Determina cuantas conexiones
a la vez puede coger cuando el pool está agotado
• Prepared Statement Cache Size: Determina
cuántas declaraciones se almacenan en caché por
conexión agrupada. Establecer esto en cero
desactiva el almacenamiento en caché de la
instrucción
• Max Wait: La cantidad de tiempo que un cliente
que intenta obtener una conexión espera a que se
adquiera cuando se agota el pool. Establecer este
valor en cero (predeterminado) significa esperar
indefinidamente
• Max Idle Time: Determina cuántos segundos una
conexión puede permanecer en pool, pero sin usar
antes de ser descartada. Establecer este valor en
cero (por defecto) significa que las conexiones
inactivas nunca caducan.
23
Pool de conexiones – para que sirve y
recomendaciones
• Aprovechar los recursos de memoria y CPU del API
• Aprovechar los recursos del pool de conexiones del servidor de base de datos
• Antes de setear los datos en la Global Element de MuleSoft, es necesario que se hable
con el gestor de la BD para saber las características del pool de conexiones que tiene el
Servidor de Base de Datos
• Es recomendable siempre dejar el valor de Min pool size como mínimo a 1, ya que
mantiene siempre abierta una conexión a la BD para que no se cierre dicha conexión y
consuma mas recursos de los que debe
All contents © MuleSoft, LLC
OData ApiKit
25
OData
• OData es un protocolo para la creación de APIs tipo REST a partir de fuentes de datos diversas
como Bases de Datos, CRM como Salesforce, o SAP.
• OData ApiKit de MuleSoft es la herramienta para poder crear a partir de un fichero EDM (Entity
Data Model) un conjunto de operaciones CRUD API Rest para poder gestionar a través de las
mismas los datos de la fuente.
• Permite mediante API Rest, realizar operaciones similares a las que se haría con SQL, como filtros
en búsquedas, ordenación, insert, update, …
EDM / OData
GET
POST
PATCH
PUT
DELETE
26
Odata - EDM
• Un fichero EDM o Entity Data Model, es un fichero en formato XML que contiene la estructura de
los datos con sus atributos y tipos.
1.- Descripción de entidad
2.- Clave primaria de la entidad
3.- Conjunto de entidades que se van a exponer
4.- Relación entre entidades
27
Odata – EDM – Generación desde RAML
• Un fichero EDM se puede crear a partir de
un RAML tipo Library que contenga el tipo
de datos que se va a utilizar en un API
28
Odata – APIKit MuleSoft
• Crear un nuevo proyecto
• Copiamos el fichero edm (odata-metadata.csdl.xml) a la carpeta
/src/main/resources/api
• Sobre el fichero edm pulsamos botón derecho Mule -> Generate Mule Odata 4 API
• Esto nos genera el flujo principal que con el componente Route
• Por cada Entidad:
1.- Tenemos los flujos GET, POST, PUT, PATCH y DELETE
2.- Tenemos opciones para poder realizar búsquedas con diferentes operadores
$select, $orderby, $count
• El componente Transform to SQL Select, nos construye la operación el Select a partir de
los query parameters específicos del estándar Odata
29
Odata – Transform to SQL Select
• Dentro del componente OData existe una operación muy interesante que convierte los
parámetros y atributos HTTP de una petición en una sentencia SQL
All contents © MuleSoft, LLC
Historias para no dormir y casos extraños
31
Casos extraños – Dejando conexiones abiertas
PROBLEMA: Cuando se utiliza el Stored Procedure del componente Database, se quedan las
conexiones abiertas y bloqueadas en la BD, de forma que cuando se llega al máximo de conexiones
configuradas en el Pool de conexiones el API deja de poder llamar a la BD.
CAUSA:
La causa es conocida por MuleSoft pero no es algo que pase siempre por este motivo no se ha
solucionado el problema a día de hoy.
SOLUCION
Es necesario cubrir el componente Stored Procedure con una componente try e indicar en el
componente try el tipo de Transactional action en ALWAYS_BEGIN. Esto lo que hace es forzar que la
transacción se abra y se cierre en el momento y así desbloquea el hilo cuando termina el stored
procedure de ejecutarse.
32
Casos extraños – Envío de parámetros vacíos ???
PROBLEMA: BD ORACLE - Cuando un componente Stored Procedure envía los parámetros vacíos o
null a la BD y cuando se hace debug el valor que aparece es "???”
CAUSA:
El charset en el que está desplegado la BD, cuando se trata de Charset Americanos u otros que no
sigan el estándar ISO
SOLUCION
Esto se soluciona de una forma “muy sencilla” pero que ni MuleSoft sabia, y es añadiendo una
librería que complementa los charset que contiene la librería ojdbc8.jar a la hora de conectarse con
las BD, esta librería es la orai18n.jar.
Thank you
https://github.com/fjtoscano/meetuprelationaldb

Más contenido relacionado

Similar a SEVILLA Meetups23032023.pdf

curso-servidores-apache-2
curso-servidores-apache-2curso-servidores-apache-2
curso-servidores-apache-2greenpeans
 
Personalización Data Collectors
Personalización Data CollectorsPersonalización Data Collectors
Personalización Data CollectorsSolidQ
 
Migrando mis datos a la nube con Azure Data Factory
Migrando mis datos a la nube con Azure Data FactoryMigrando mis datos a la nube con Azure Data Factory
Migrando mis datos a la nube con Azure Data FactoryRaul Martin Sarachaga Diaz
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)josecuartas
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Asier Marqués
 
Programacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datosProgramacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datosJosé Antonio Sandoval Acosta
 
Guía Practica conexión BD 2021
Guía Practica conexión BD  2021Guía Practica conexión BD  2021
Guía Practica conexión BD 2021lissette_torrealba
 
cuadro_comparativo_SGBD_top_10.docx (1).docx
cuadro_comparativo_SGBD_top_10.docx (1).docxcuadro_comparativo_SGBD_top_10.docx (1).docx
cuadro_comparativo_SGBD_top_10.docx (1).docxIgor Rodriguez
 
Vistazo a SQL Server 2016
Vistazo a SQL Server 2016Vistazo a SQL Server 2016
Vistazo a SQL Server 2016Eduardo Castro
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...José Antonio Sandoval Acosta
 
LenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxLenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxcarrilloja98
 
Portabilidad y transportabilidad
Portabilidad y transportabilidadPortabilidad y transportabilidad
Portabilidad y transportabilidadjuanmanuelsalgado
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2Steven Gomez
 
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Francisco Javier Toscano Lopez
 

Similar a SEVILLA Meetups23032023.pdf (20)

curso-servidores-apache-2
curso-servidores-apache-2curso-servidores-apache-2
curso-servidores-apache-2
 
Personalización Data Collectors
Personalización Data CollectorsPersonalización Data Collectors
Personalización Data Collectors
 
Azure DataFactory
Azure DataFactoryAzure DataFactory
Azure DataFactory
 
Migrando mis datos a la nube con Azure Data Factory
Migrando mis datos a la nube con Azure Data FactoryMigrando mis datos a la nube con Azure Data Factory
Migrando mis datos a la nube con Azure Data Factory
 
servlets
servlets servlets
servlets
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2
 
Programacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datosProgramacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datos
 
sesion 01_sql basico.pdf
sesion 01_sql basico.pdfsesion 01_sql basico.pdf
sesion 01_sql basico.pdf
 
Guía Practica conexión BD 2021
Guía Practica conexión BD  2021Guía Practica conexión BD  2021
Guía Practica conexión BD 2021
 
cuadro_comparativo_SGBD_top_10.docx (1).docx
cuadro_comparativo_SGBD_top_10.docx (1).docxcuadro_comparativo_SGBD_top_10.docx (1).docx
cuadro_comparativo_SGBD_top_10.docx (1).docx
 
Vistazo a SQL Server 2016
Vistazo a SQL Server 2016Vistazo a SQL Server 2016
Vistazo a SQL Server 2016
 
Semana 01.pdf
Semana 01.pdfSemana 01.pdf
Semana 01.pdf
 
Configuración del entorno
Configuración del entornoConfiguración del entorno
Configuración del entorno
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
 
LenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxLenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptx
 
Portabilidad y transportabilidad
Portabilidad y transportabilidadPortabilidad y transportabilidad
Portabilidad y transportabilidad
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2
 
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
 
Base De Datos
Base De DatosBase De Datos
Base De Datos
 

Último

Trabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalTrabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalEmanuelCastro64
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfTENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfJoseAlejandroPerezBa
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdftecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdflauralizcano0319
 
Tecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestríaTecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestríaElizabethLpezSoto
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nóminacuellosameidy
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y maslida630411
 
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskTrabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskbydaniela5
 
Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024anasofiarodriguezcru
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaYeimys Ch
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxCarolina Bujaico
 

Último (20)

Trabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalTrabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamental
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfTENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdftecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
 
Tecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestríaTecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestría
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nómina
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y mas
 
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskTrabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
 
Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptx
 

SEVILLA Meetups23032023.pdf

  • 1. FRANCISCO JAVIER TOSCANO LOPEZ 23/03/2023 https://github.com/fjtoscano/meetuprelationaldb SEVILLA MuleSoft Meetup Group
  • 2. Who am I? 2 ● Soy un gaditano que emigró hace ya casi 20 años a Sevilla donde resido actualmente. ● Llevo casi 20 años como Arquitecto Java, experto en arquitecturas de Microservicios basadas en Spring Boot y que hace 5 años tuvo la oportunidad de conocer Mulesoft. ● Desde entonces, llevo ayudando a diseñar arquitecturas de integración utilizando toda la potencia que nos ofrece Mulesoft. ● Porque Mulesoft?, porque al estar basado en Java me permitió conocer todos su potencial desde el minuto uno , y me ayudo a entender mejor como funciona por dentro. Javier Toscano Lopez, Chief Architect, NTT Data https://www.linkedin.com/in/francisco-javier-toscano- lopez-1815919/ @fjtoscano 2
  • 3. 3 Agenda • Como se integra Java con Bases de Datos relacionales • Somos los integradores DBA? Pide ayuda !!!! • Pool de conexiones, que es y para que sirve • ApiKit Odata, generación automática de API´s a partir de fuentes de datos • Historias para no dormir y casos extraños • Mesa redonda.
  • 4. All contents © MuleSoft, LLC Como se integra Java con Bases de Datos relacionales
  • 5. 5 Bases de Datos • Definición: Las bases de datos son sistemas de información capaces de almacenar grandes cantidades de información de manera organizada. Relacionales: • Colección de elementos de datos organizados en un conjunto de tablas formalmente descritas. • SQL: lenguaje estándar de consultas No Relacionales: • Esquemas flexibles • No tienen identificador para asociar datos
  • 6. 6 Java y las Bases de Datos Java se puede comunicar con las BDs a través de librerías llamadas JDBC JDBC CADENA DE CONEXION • Url JDBC de conexión • Identificación del usuario • Query a ejecutar APERTURA DE CONEXIÓN • Creación de un objeto connection, con la cadena de conexión • Ejecución de la query • Tratamiento de resultados • Cierre de la conexión
  • 7. 7 Java y las Bases de Datos Open Close Transactional Operation
  • 8. 8 La evolución: persistencia y transaccionalidad Para abstraer de la programación en SQL a los desarrolladores Java se crea la tecnología de persistencia en BD, donde: • Se utilizan clases Java “Entidades” que representan las tablas de BD, y donde sus atributos son las columnas de dichas tablas. • Se utiliza MyBatis, hibernate, o Spring Data como ejemplos de motores de persistencia. • Se crea el concepto de transaccionalidad @Transactional, donde se controla el canuto de conexión con la BD. Solo cuando termina el método es cuando se ejecuta todas las ordenes SQL @Service @Transactional public class CustomerService { private final CustomersRepository customersRepository; @Autowired public this.cusCustomerService(final CustomersRepository customersRepository) {tomersRepository = customersRepository; } public Customer findById(final long id) { final CustomerEntity customer = customersRepository.findOne(id); if (customer == null) { throw new CustomerNotFoundException(); } final Customer dto = new Customer(); dto.setFirstName(customer.getFirstName()); dto.setLastName(customer.getLastName()); dto.setEmail(customer.getEmail()); return dto; } @Entity @Table(name = "customer") public class CustomerEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(name = "first_name", nullable = false) private String firstName; @Column(name = "last_name", nullable = false) private String lastName; @Column(nullable = false) private String email;
  • 9. All contents © MuleSoft, LLC Somos los integradores, DBA? Pide ayuda a alguien que sepa de BD !!!
  • 10. 10 Conector de Base de Datos de MuleSoft • MuleSoft utiliza el Database Connector, para conectarse a cualquier tipo de BD del que exista librería JDBC • Utiliza el método mas antiguo, el método JDBC connection, donde el desarrollador de integración tiene que saber de SQL para poder interactuar con la BD • Por lo general el desarrollador de integración no tiene porque saber hacer consultas complejas a BD y es por ellos, que se puede caer en un mal uso del conector de BD
  • 11. 11 Conector de Base de Datos de MuleSoft – Conexion • Configuración inline de conexión a BD
  • 12. 12 Conector de Base de Datos de MuleSoft – Conexión por bean de Spring • Configuración referenciando un bean de Spring
  • 13. 13 Conector de Base de Datos - Operaciones El conector de BD nos permite realizar muchas operaciones sobre las BD, pero las principales son: • Select, Insert, Update, Delete: CRUD de operaciones normales sobre las tablas • Bulk Insert, Update, Delete: CRUD de operaciones con datos masivos • On Table Row: Disparador que activa el flujo de mule cuando algo cambia en la tabla de la BD • Stored procedure: En los sistemas de BD que lo permitan, este componente hace llamadas a los Procedure o Function de la BD • Execute script o DDL: Permiten ejecutar lenguaje DDL que es capaz de construir elementos como tablas en BBDD.
  • 14. 14 Conector de Base de Datos - Ejemplos
  • 15. 15 Conector de Base de Datos – Stored Procedure y UDT • Algunas BD relacionales como ORACLE, SQL Server, Mysql o PostGreSQL son capaces de ejecutar código programático denominado PL/SQL • PL/SQL se agrupa en forma de Funciones y Procedimientos que pueden ser llamados desde MuleSoft • La operación Stored Procedure, hacen referencia a la interacción de MuleSoft con los PROCEDURE y FUNCTION de las BD relacionales. • UDT (User Defined Types) son objetos creados dentro de ORACLE y que sirven como parámetros en los procedimientos, funciones, cursores,….
  • 16. 16 Conector de Base de Datos – Stored Procedure y UDT 1.- Se crean 4 tipos de objetos PHONE_NUMBER PHONE_NUMBER_ARRAY PERSON PEOPLE 2.- Se crea una tabla HUMANS, con tipos nativos y tipos compuestos 3.- Finalmente se crea un procedimiento para insertar registros en la tabla HUMANS https://docs.mulesoft.com/db- connector/1.14/database-connector-udt-stored- procedure
  • 17. 17 Conector de Base de Datos – Stored Procedure y UDT %dw 2.0 output application/java fun toPhoneNumberArray(phoneNumber) = Db::createArray("Database_Config", "PHONE_NUMBER_ARRAY",[Db::createStruct("Database_Config", "PHONE_NUMBER", [phoneNumber.areaCode, phoneNumber.phoneNumber])]) fun toPerson(person) = Db::createStruct("Database_Config", "PERSON", [person.name, person.surname, person.age, toPhoneNumberArray(person.phoneNumber)]) --- Db::createArray("Database_Config", "PEOPLE", payload map (item, index) -> (toPerson(item)) )
  • 18. 18 Conector de Base de Datos – Stored Procedure y UDT %dw 2.0 output application/java fun toPhoneNumberArray(phoneNumber) = Db::createArray("Database_Config","PHONE_NUMBER_ARRAY",[Db::createStruct("Database_Config", "PHONE_NUMBER", [phoneNumber.areaCode, phoneNumber.phoneNumber])]) fun toPerson(person) = Db::createStruct("Database_Config", "PERSON", [person.name, person.surname, person.age, toPhoneNumberArray(person.phoneNumber)]) --- Db::createArray("Database_Config", "PEOPLE", payload map (item, index) -> (toPerson(item)) )
  • 19. 19 Conector de Base de Datos – Recomendaciones de uso • SELECT Y FOR EACH: Existen múltiples formas de conseguir los datos de una BD con select anidadas y complejas, si no sabes pregunta a alguien que sepa. • Cada componente de BD abre una conexión con la BD y esto consume muchos recursos y tiempos de respuesta, limítalas todo los posible, utilizando correctamente las operaciones. • UDT SP: La codificación de los colum type en el DataBase Config esta en https://docs.mulesoft.com/db-connector/0.3.9/database-connector-reference#data- types-example • UDT SP: El tratamiento de datos complejos en DataWeave es costoso en tiempo de ejecución, es decir cuando el flujo del API entra en el trasform Message que crea los UDT este proceso tarda mucho en MuleSoft y puede aumentar mucho el tiempo de respuesta del API. • UDT SP: Intentar utilizar datos nativos como parámetros en los stored procedure
  • 20. All contents © MuleSoft, LLC Pool de conexiones, que es y para que sirve
  • 21. 21 Pool de conexiones Definición: Un pool de conexiones es un conjunto limitado de conexiones a una base de datos, que es manejado por un servidor de aplicaciones de forma tal, que dichas conexiones pueden ser reutilizadas por los diferentes usuarios. • El componente de Database de MuleSoft, por defecto no tiene configurado el pool de conexiones, por lo que cada vez que se conecta a la BD abre y cierra una conexión, consumiendo mucha memoria.
  • 22. 22 Pool de conexiones – como se configura? • Max pool size: Numero máximo de conexiones concurrentes • Min pool size: Numero mínimo de conexiones abiertas • Acquire Increment: Determina cuantas conexiones a la vez puede coger cuando el pool está agotado • Prepared Statement Cache Size: Determina cuántas declaraciones se almacenan en caché por conexión agrupada. Establecer esto en cero desactiva el almacenamiento en caché de la instrucción • Max Wait: La cantidad de tiempo que un cliente que intenta obtener una conexión espera a que se adquiera cuando se agota el pool. Establecer este valor en cero (predeterminado) significa esperar indefinidamente • Max Idle Time: Determina cuántos segundos una conexión puede permanecer en pool, pero sin usar antes de ser descartada. Establecer este valor en cero (por defecto) significa que las conexiones inactivas nunca caducan.
  • 23. 23 Pool de conexiones – para que sirve y recomendaciones • Aprovechar los recursos de memoria y CPU del API • Aprovechar los recursos del pool de conexiones del servidor de base de datos • Antes de setear los datos en la Global Element de MuleSoft, es necesario que se hable con el gestor de la BD para saber las características del pool de conexiones que tiene el Servidor de Base de Datos • Es recomendable siempre dejar el valor de Min pool size como mínimo a 1, ya que mantiene siempre abierta una conexión a la BD para que no se cierre dicha conexión y consuma mas recursos de los que debe
  • 24. All contents © MuleSoft, LLC OData ApiKit
  • 25. 25 OData • OData es un protocolo para la creación de APIs tipo REST a partir de fuentes de datos diversas como Bases de Datos, CRM como Salesforce, o SAP. • OData ApiKit de MuleSoft es la herramienta para poder crear a partir de un fichero EDM (Entity Data Model) un conjunto de operaciones CRUD API Rest para poder gestionar a través de las mismas los datos de la fuente. • Permite mediante API Rest, realizar operaciones similares a las que se haría con SQL, como filtros en búsquedas, ordenación, insert, update, … EDM / OData GET POST PATCH PUT DELETE
  • 26. 26 Odata - EDM • Un fichero EDM o Entity Data Model, es un fichero en formato XML que contiene la estructura de los datos con sus atributos y tipos. 1.- Descripción de entidad 2.- Clave primaria de la entidad 3.- Conjunto de entidades que se van a exponer 4.- Relación entre entidades
  • 27. 27 Odata – EDM – Generación desde RAML • Un fichero EDM se puede crear a partir de un RAML tipo Library que contenga el tipo de datos que se va a utilizar en un API
  • 28. 28 Odata – APIKit MuleSoft • Crear un nuevo proyecto • Copiamos el fichero edm (odata-metadata.csdl.xml) a la carpeta /src/main/resources/api • Sobre el fichero edm pulsamos botón derecho Mule -> Generate Mule Odata 4 API • Esto nos genera el flujo principal que con el componente Route • Por cada Entidad: 1.- Tenemos los flujos GET, POST, PUT, PATCH y DELETE 2.- Tenemos opciones para poder realizar búsquedas con diferentes operadores $select, $orderby, $count • El componente Transform to SQL Select, nos construye la operación el Select a partir de los query parameters específicos del estándar Odata
  • 29. 29 Odata – Transform to SQL Select • Dentro del componente OData existe una operación muy interesante que convierte los parámetros y atributos HTTP de una petición en una sentencia SQL
  • 30. All contents © MuleSoft, LLC Historias para no dormir y casos extraños
  • 31. 31 Casos extraños – Dejando conexiones abiertas PROBLEMA: Cuando se utiliza el Stored Procedure del componente Database, se quedan las conexiones abiertas y bloqueadas en la BD, de forma que cuando se llega al máximo de conexiones configuradas en el Pool de conexiones el API deja de poder llamar a la BD. CAUSA: La causa es conocida por MuleSoft pero no es algo que pase siempre por este motivo no se ha solucionado el problema a día de hoy. SOLUCION Es necesario cubrir el componente Stored Procedure con una componente try e indicar en el componente try el tipo de Transactional action en ALWAYS_BEGIN. Esto lo que hace es forzar que la transacción se abra y se cierre en el momento y así desbloquea el hilo cuando termina el stored procedure de ejecutarse.
  • 32. 32 Casos extraños – Envío de parámetros vacíos ??? PROBLEMA: BD ORACLE - Cuando un componente Stored Procedure envía los parámetros vacíos o null a la BD y cuando se hace debug el valor que aparece es "???” CAUSA: El charset en el que está desplegado la BD, cuando se trata de Charset Americanos u otros que no sigan el estándar ISO SOLUCION Esto se soluciona de una forma “muy sencilla” pero que ni MuleSoft sabia, y es añadiendo una librería que complementa los charset que contiene la librería ojdbc8.jar a la hora de conectarse con las BD, esta librería es la orai18n.jar.