Event-driven systems allow multiple components to communicate with each other by sharing any information and, most importantly, without being directly related. The general idea is that certain components generate events or messages and others receive and process them, either synchronously or asynchronously.
READ MOREAutor: danielme.com
Testing Spring Boot: Docker con Testcontainers y JUnit 5. MySQL y otras imágenes.
A la hora de diseñar pruebas de integración y end-to-end debemos decidir qué hacer con los sistemas externos que nuestra aplicación utiliza. El caso más habitual son las bases de datos. Además, no perdamos de vista que, en general, crear objetos dobles de tests desvirtúa el propósito de este tipo de pruebas.
Seguir leyendoSpring BOOT: integración con JSP
Jakarta Server Pages (JSP), antes conocida como Java Server Pages, es la tecnología de generación dinámica de páginas web que Java propone como estándar o especificación. A día de hoy se puede considerar un vestigio del pasado, pues hace años que contamos con motores de plantillas tales como Thymeleaf que ofrecen mejores capacidades. Además, la tendencia actual es la creación de clientes JavaScript, con Angular, React y similares, que interactúan con APIs REST.
Seguir leyendoTips Spring : [BOOT] propiedades de configuración personalizadas. La anotación @ConfigurationProperties.
Los parámetros de configuración de Spring Boot y las librerías compatibles se definen en el fichero /src/main/resources/application.properties (o application.yml para los que prefieran el formato YAML). Los disponibles se detallan en esta página.
Seguir leyendoCurso Jakarta EE 9 (39). JPA con Hibernate (22): Procedimientos almacenados SQL

Los procedimientos almacenados (stored procedures) suelen ser ignorados por los programadores no especialistas en bases de datos. Pero son una herramienta con un ámbito de aplicación más que interesante y que podemos usar fácilmente con JPA sin tener que recurrir a la API JDBC. Por ello, los vemos en este pequeño capítulo que complementa el estudio del empleo de SQL con JPA e Hibernate.
Seguir leyendoCurso Jakarta EE 9 (38). JPA con Hibernate (21): trabajando con SQL

Idealmente, las consultas en JPA se escriben con JPQL \ Criteria API utilizando el modelo de entidades para que sean agnósticas con respecto a la base de datos. No obstante, contamos con un magnífico soporte para la ejecución de consultas SQL, denominadas «nativas» en la especificación. ¿Por qué querríamos recurrir a él? Ya apunté algunos motivos en la introducción a los capítulos dedicados a JPA.
Seguir leyendoCurso Jakarta EE 9 (37). JPA con Hibernate (20): Criteria API (2). Funciones y WHERE. Modificaciones.

Completamos el estudio de los fundamentos de Criteria API con la descripción de las funciones y del bloque WHERE, incluyendo los operadores existentes y la posibilidad de efectuar subconsultas. También habrá una pequeña sección dedicada a las actualizaciones y eliminaciones.
Seguir leyendoCurso Jakarta EE 9 (36). JPA con Hibernate (19): Criteria API (1). Consultas básicas.

Las consultas JPQL son simples cadenas de texto fáciles de escribir y comprender debido a sus similitudes con el lenguaje SQL. La alternativa dentro de Jakarta Persistence para explotar los datos con el modelo de entidades es la API Criteria. Permite construir consultas de forma programática, esto es, en código Java, y con un tipado absoluto tanto de los parámetros como de los resultados. Lo hace ofreciendo métodos que equivalen a las cláusulas, operadores y funciones de JPQL.
Seguir leyendoCurso Jakarta EE 9 (35). JPA con Hibernate (18): el lenguaje JPQL\HQL (3). Funciones.

Completemos la revisión de JPQL examinando sus funciones y cómo podemos sacar partido a las nativas que ofrecen las bases de datos. No está de más subrayar que, por cuestiones de rendimiento, es preferible delegar en la base de datos todo el procesamiento y cálculo que pueda realizar, en lugar de implementarlo nosotros en el código.
Seguir leyendoCurso Jakarta EE 9 (34). JPA con Hibernate (17): el lenguaje JPQL\HQL (2). Reuniones.

Hasta ahora, nos hemos conformado con usar una única entidad en el FROM de las consultas JPQL. Para combinar datos de varias necesitamos hacer una reunión o join entre ellas, tal y como haríamos con tablas en una consulta SQL. En este capítulo examinamos los distintos tipos de reuniones disponibles.
Seguir leyendoCurso Jakarta EE 9 (33). JPA con Hibernate (16): trabajando con JPQL\HQL (2). Proyecciones y paginación.

Con los conocimientos del capítulo anterior, estamos limitados a consultas que devuelvan un único tipo de entidad o de valor escalar, pese a que ya vimos que JPQL es flexible en este aspecto. Tampoco dimos solución a la recuperación de listados grandes. Dos asuntos de vital importancia en nuestro día a día con JPA que examinamos en detalle en este capítulo.
Seguir leyendoCurso Jakarta EE 9 (32). JPA con Hibernate (15): trabajando con JPQL \ HQL (1)

Recién vistos los fundamentos del lenguaje de consultas JPQL, y antes de seguir profundizando, veamos cómo materializar las consultas, simples cadenas de texto, en código Java que las ejecute.
Seguir leyendo