Introducción a CDI Beans 2.0 (JEE 8)

logo java

JEE (Java Enterprise Edition) es una colección de especificaciones especialmente orientadas al desarrollo de aplicaciones empresariales generalmente del lado del servidor (aplicaciones web). Incluye tecnologías tales como Servlet, JSP, EJB, JAX-WS, JPA o JMS. La versión más actual en el momento de escribir el presente tutorial es la 8 (su versionado no coincide con el de Java SE que es el core del propio lenguaje Java).

El desarrollo de JEE es controlado por Oracle y realizado dentro del Java Community Process(JCP), pero a finales de 2017 Oracle cedió JEE a la fundación Eclipse y, por cuestiones legales en el uso de la marca Java EE, ha pasado a llamarse Jakarta EE. La primera versión es Jakarta EE 8 y coincide exactamente con las especificaciones Java EE 8. Los cambios llegarán con Jakarta EE 9, prevista para finales de 2020 y basada en Java 11.

Seguir leyendo

Spring: Sistema de eventos

logo springLos sistemas de eventos permiten que múltiples componentes intercambien información reduciendo el acoplamiento entre ellos suponiendo en la práctica una generalización más abstracta de los principios del patrón de diseño observador. El core de Spring cuenta con un sistema de eventos que quizás no sea demasiado conocido, de hecho en la bibliografía se suele citar de pasada. Este sistema de eventos de Spring es muy básico y utiliza el propio ApplicationContext como bróker para el envío de eventos entre los beans gestionados por el mismo. En este tutorial echaremos un vistazo a este sistema eventos.

Seguir leyendo

Spring Boot: Gestión de errores en aplicaciones web y REST

logo springEn este tutorial haremos un breve repaso con un enfoque eminentemente práctico de las mejores opciones que tenemos para la gestión de excepciones en aplicaciones web, tanto “tradicionales” como REST, desarrolladas con Spring MVC. Se hará especial hincapié en las funcionalidades implementadas de forma específica por Spring Boot que facilitarán nuestro trabajo.

Seguir leyendo

Testing en Spring Boot con JUnit 4\5. Mockito, MockMvc, REST Assured, bases de datos embebidas.

Última actualización: 13/09/2020

logo springEn el tutorial Introducción a Spring Boot: Aplicación Web con servicios REST y Spring Data JPA se construye una pequeña aplicación web que muestra en pantalla los registros de una tabla de una base de datos MySQL a la que se accede a través de Spring Data JPA, y que también dispone de una pequeña api REST.

Sin embargo, falta un elemento vital como son los tests. Para suplir esta carencia, en el presente tutorial voy a mostrar cómo configurar tests de integración en Spring Boot utilizando esa misma aplicación así como algunas opciones y librerías que pueden ser de gran ayuda. Estos tests necesitarán para su ejecución levantar el contexto de Spring, y su objetivo no es tanto validar el funcionamiento de la aplicación sino “jugar” con las funcionalidaes más básicas que Spring Boot y esas librerias proporcionan.

Los tests se desarrollarán con JUnit 4 pero al final del tutorial veremos cómo utilizar también JUnit 5. Esta versión del tutorial está actualizada a Spring Boot 2.3.3 (agosto 2020), y se indicarán algunas diferencias significativas con respecto a versiones anteriores para ayudar al lector en el caso de que trabaje con aplicaciones más antiguas.

Seguir leyendo

Creación de validadores con Bean Validation\Hibernate Validator

logo java

Una vez que hemos empezado a utilizar la especificación Bean Validation para definir restricciones sobre los atributos de clases Java, en algún momento nos encontraremos con la necesidad de validar restricciones que no sean proporcionadas ni por el estándar Bean Validation ni por Hibernate Validator y que no pueden definirse utilizando expresiones regulares con @Pattern. Por ejemplo, realizar alguna comprobación en una base de datos.

Seguir leyendo

Validaciones de atributos con Bean Validation\Hibernate Validator

logo java

El objetivo de la especificación Bean Validation es establecer un estándar para la definición e implementación de restricciones en clases Java del tipo “el atributo nombre no puede ser nulo”, “el atributo cantidad debe ser un número positivo mayor que 10”, etc. La aplicación más evidente de estas restricciones es la realización de validaciones sobre los datos de entrada de un sistema, ya sean proporcionados por un usuario a través de un formulario o de forma automática por otro proceso. Al tratarse de un estándar compatible con Java SE puede ser utilizado en cualquier aplicación e integrado fácilmente con Spring, Struts 2 o JSF. Se puede encontrar un ejemplo de integración en Spring Boot en el tutorial Introducción a Spring Boot: Aplicación Web con servicios REST y Spring Data JPA.

Seguir leyendo

SQL nativo con JPA e Hibernate

logo hibernate

Tal y como vimos en el tutorial Spring JDBC Template: simplificando el uso de SQL, a pesar de la existencia de herramientas de mapeo ORM tales como Hibernate y estandarizadas con la especificación JPA, existen escenarios en los que necesitamos trabajar directamente con SQL nativo. El caso más habitual suele ser la ejecución de consultas complejas que deben ser optimizadas o bien son difíciles de implementar de forma eficiente con el ORM.

Seguir leyendo

Introducción a Spring Boot: Aplicación Web con servicios REST y Spring Data JPA

Última actualización: 25/10/2020

logo springEn el tutorial Persistencia en BD con Spring: Integrando JPA, c3p0, Hibernate y EHCache, vimos de forma práctica los pasos a seguir para configurar una aplicación Maven que integre Spring con JPA, utilizando Hibernate como implementación. No es difícil, pero resulta tedioso tener que replicar esta configuración cada vez que empecemos un proyecto nuevo y la configuración puede complicarse si por ejemplo vamos a desarrollar un proyecto web completo y necesitamos también utilizar otros módulos de Spring tales como MVC, Data, Security, etc.

Seguir leyendo

JPA e Hibernate: relaciones y atributos Lazy

Última actualización: 20/09/2020

logo hibernate

En JPA los atributos y relaciones que forman parte de una entidad pueden ser obtenidas desde la base de datos de dos formas distintas: en el momento en que obtengamos la entidad (EAGER) o bien bajo demanda (LAZY), esto es, la primera vez que se acceda a dichas propiedades o relaciones. Este modo LAZY es posible en Hibernate gracias al uso de objetos proxy que lanzan las consultas necesarias para la obtención de ese objeto, y su objetivo final es mejorar el rendimiento evitando obtener en nuestras aplicaciones datos que realmente no necesitamos (en ocasiones incluso podríamos terminar cargando casi toda la base de datos en memoria).

Seguir leyendo

Spring JDBC Template: simplificando el uso de SQL

Última actualización: 28/10/2018

logo spring

Generalmente el uso y explotación de bases de datos SQL en Java lo realizamos a través de herramientas de mapeo ORM tales como Hibernate o Apache OpenJPA que permiten desarrollar la capa de persistencia de nuestras aplicaciones de forma muy rápida con una alta abstracción sobre el modelo relacional. Spring no sólo es muy fácil de integrar con estos productos tal y como vimos en el tutorial “Persistencia en BD con Spring: Integrando JPA, c3p0, Hibernate y EHCache”, sino que además proporciona con Spring Data JPA su propia capa de abstracción que nos facilita y simplifica aún más el trabajo tal y como vimos en la correspondiente serie de tutoriales al respecto.

Seguir leyendo

Test Doubles con Mockito

mockito

Al testear cierto comportamiento de un objeto nos encontraremos habitualmente con que ese objeto posee una o varias dependencias de otros objetos en los que se apoya y que, por tanto, condicionan el comportamiento del código que queremos testear. A veces incluso esas dependencias nos impiden la realización de los tests ya que pueden conectarse a servicios, bases de datos, etc, sobre los que no tenemos el control y no podemos configurar para hace nuestros tests.

Seguir leyendo