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

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. Esto lleva a que en la práctica numerosos programadores y empresas recurran a la creación de plantillas genéricas, por ejemplo en la forma de arquetipos Maven, que eviten tener que invertir tiempo en la creación y configuración de los nuevos proyectos desde cero (aunque esto conlleva el problema adicional de tener que mantener actualizadas dichas plantillas). Otra opción es utilizar plantillas de terceros disponibles en GitHub como por ejemplo las indexadas en yeoman, o irnos directamente a frameworks basados en Spring como JHipster aunque aquí ya entramos en el terreno de los generadores de código.

Seguir leyendo

JPA e Hibernate: relaciones y atributos Lazy

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 toda la base de datos en memoria).

En este artículo vamos a revisar de forma práctica cómo hacer que Hibernate obtenga de forma LAZY las relaciones y atributos de nuestras entidades.

Seguir leyendo

Spring JDBC Template: simplificando el uso de SQL

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.

Sin embargo, en muchos escenarios no es una buena opción o incluso es inviable el uso de Hibernate y similares, al menos como única solución:
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

Testing Spring con JUnit 4

logo spring

En el tutorial Testing con JUnit 4 vimos la importancia del testing automatizado y los primeros pasos para realizarlo en Java y Android con JUnit 4. En los proyectos en los que utilicemos Spring necesitaremos acceder en algunas clases de tests a los beans proporcionados por el contenedor de inyección de dependencias y, en muchos de ellos, utilizar versiones mocks, stubs, dummys, etc de los mismos.

Seguir leyendo

Testing con JUnit 4

junit

El testing automatizado suele ser uno de los grandes olvidados en el proceso de desarrollo de software y la primera “víctima” de las desviaciones de presupuestos y plazos de entrega. Sin embargo es parte fundamental del proceso de creación de software, incluso existe una metodología (TDD) en la que el desarrollo se hace en base a los tests que debe verificar el software y no al revés, esto es, primero se diseñan los tests y luego la aplicación que los verifica.

Seguir leyendo

Perfiles en Maven

Última actualización: 10/06/2018

maven

Durante el desarrollo de aplicaciones que van a ser utilizadas en distintos entornos (desarrollo, testing, producción, etc) solemos encontrarnos con el problema de adaptar la aplicación a cada uno de dichos entornos. Esto sucede habitualmente con los ficheros de configuración, por ejemplo los parámetros utilizados para la conexión a la base de datos, pero también es posible que necesitemos incluir librerías distintas en función de la versión de Java o incluso el sistema operativo que estamos utilizando.

Seguir leyendo

Servicios Web SOAP con JAX-WS, Spring y CXF (IV): Handlers

logo java

Es posible que en alguna ocasión nos veamos en la necesidad de realizar algún tipo de operación directamente con el mensaje SOAP que recibe y/o envía nuestro servicio web. Esta tarea puede realizarse con el mecanismo de Handlers (“manejadores”) definidos en la especificación JAX-WS y que permite “interceptar” las peticiones y respuestas SOAP en un método que implementamos. Este mecanismo puede ser aplicado tanto al servidor como a los clientes.

Existen dos tipos de handlers:

  • SOAP handler : Permite acceder a todo el mensaje SOAP completo, incluyendo los headers de la petición. Por este motivo también se denominan Protocol Handler
  • Logical handler: Sólo proporciona acceso al contenido (payload) del mensaje.

Seguir leyendo

Maven: aplicaciones ejecutables

logo java

Las aplicaciones web Java se empaquetan en ficheros war o ear y son desplegadas por un contenedor de servlets o servidor de aplicaciones JEE siguiendo siempre los estándares. En cambio, a la hora de empaquetar una aplicación de escritorio o consola tendremos que encontrar una estrategia que permita una fácil distribución y ejecución de estas aplicaciones. En este artículo veremos de forma muy práctica varias alternativas utilizando plugins de Maven.

Seguir leyendo

Servicios Web SOAP con JAX-WS, Spring y CXF (III): Securización TLS + BASIC

Última actualización: 20/02/2016

logo java

En la mayoría de servicios web será necesario incluir mecanismos tanto de autenticación como de cifrado que “securicen” la utilización del servicio. En SOAP se pueden utilizar varias alternativas, las dos que probablemente se utilizan con mayor frecuencia son las siguientes:

  • HTTPS(TLS) + BASIC: La autenticación BASIC consiste simplemente en el envío en el header del request de un par usuario/contraseña y con el uso del protocolo TLS las comunicaciones se cifran lo que garantiza la confidencialidad de los datos envíados. Esta combinación es fácil de implementar y suele aplicarse tanto a servicios web SOAP como REST proporcinando en muchos casos un nivel de seguridad suficiente.
  • WsSecurity: es un protocolo específico para SOAP y proporciona un elevado nivel de seguridad ya que, entre otras características, permite realizar una firma y cifrado de los mensajes a nivel de aplicación mientras que con TLS sólo garantizamos el cifrado y validez del mensaje a través de la red hasta el servidor de destino. Este mecanismo implica un pequeña merma del rendimiento ya que las aplicaciones clientes y servidor deben firmar los mensajes.

En esta tercera parte del tutorial se va a implementar el mecanismo TLS + BASIC en los ejemplos de los capitulos anteriores.

  1. Servidor
  2. Clientes
  3. Securización TLS + BASIC
  4. Handlers

Seguir leyendo