Testing con JUnit 4

Última actualización: 02/03/2019

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 a grandes rasgos 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

Última actualización: 03/03/2019

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: 03/03/2019

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 enviados. Esta combinación es fácil de implementar y suele aplicarse tanto a servicios web SOAP como REST proporcionando 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 una 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 capítulos anteriores.

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

Seguir leyendo

Persistencia en BD con Spring Data JPA (III): Auditoría

Última actualización: 06/10/2018

Tercera parte del artículo dedicado a la persistencia en BD con Spring Data JPA:

  1. Primeros pasos
  2. Repositorios personalizados
  3. Auditoría

Spring Data JPA proporciona un mecanismo simple y elegante para dotar de un sistema automático de auditoría
a las entidades. Los campos de auditoría contemplados son la fecha de creación, fecha de última modificación, el usuario creador y el último que modificó la entidad. Vamos a implementar este mecanismo en nuestro ejemplo paso a paso.

Seguir leyendo

Persistencia en BD con Spring Data JPA (II): Repositorios personalizados

Última actualización: 06/10/2018

Segunda parte del artículo dedicado a la persistencia en BD con Spring Data JPA:

  1. Primeros pasos
  2. Repositorios personalizados
  3. Auditoría

En el caso de que sea necesario acceder directamente al EntityManager y codificar operaciones con él podemos implementar nuestro propio repositorio conservando todas funcionalidades proporcionadas por los repositorios de forma estándar. Vamos a implementar el método que desarrolló para el tutorial Persistencia en BD con Springque eliminaba los objetos de la entidad almacenados en la caché. En primer lugar, se crea una nueva interfaz con la definición del método. Por defecto el nombre de esta interfaz debe tener el sufijo “Custom”.

Seguir leyendo

Tareas programadas en Spring

Última actualización: 02/06/2018

logo spring

Es posible que al desarrollar una aplicación la mejor solución para ciertas funcionalidades sea la implementación de tareas programables, esto es, métodos que se ejecuten periódicamente en momentos determinados o bien cada cierto periodo de tiempo. Ejemplos: revisión de la base de datos para la generación de informes de seguimiento, envío de notificaciones, realizar tareas de sincronización con otros sistemas, etc. Asimismo, estas tareas suelen formar parte de la propia aplicación ya que así se pueden utilizar los servicios, capa DAO, etc, de la misma.

En Java la herramienta más empleada para la ejecución de tareas programadas es Quartz pero si utilizamos Spring y la casuística es sencilla podemos utilizar las funcionalidades proporcionadas de serie. En este tutorial echaremos un vistazo a estas funcionalidades en Spring 4 y que siguen disponibles y utilizables de la misma forma en Spring 5.

Seguir leyendo

Persistencia en BD con Spring Data JPA (I): Primeros pasos

Última actualización: 31/03/2019

logo spring

Spring Data es el nombre de un módulo de Spring que a su vez engloba un gran número de sub-módulos cuyo objetivo es facilitar el acceso y explotación de datos en aplicaciones basadas en Spring siguiendo una praxis común. Los datos que se explotan pueden provenir de orígenes tan dispares como bases de datos relacionales, a través de JPA o el novedoso Spring Data JDBC, bases de datos NoSQL como MongoDB o Neo4J, o directorios LDAP. El presente tutorial expondrá el uso básico del módulo para JPA, utilizándose como implementación Hibernate, y se divide en tres partes:

  1. Primeros pasos
  2. Repositorios personalizados
  3. Auditoría

Seguir leyendo

Integrando Struts 2 y Spring IoC

Última actualización: 08/03/2014

logo spring

Originalmente este artículo nació como un tip para la sección tips Struts 2, pero puesto que expone una integración de frameworks muy interesante y habitual he optado por tratarla con algo más de profundidad y darle más extensión de la que cabría esperar en un tip. Así pues, vamos a ver paso a paso lo fácil que es integrar el contenedor IoC de Spring con Struts 2 para poder inyectar beans en los Action e incluso definir los Actions como beans de Spring, ya sea a través de xml o mediante anotaciones.

Nota: no es necesario que los Actions sean definidos en Spring para poder inyectar las dependencias en ellos pero es la práctica habitual y lo que se mostrará en este artículo.

Seguir leyendo

JSON y Java\Android: Introducción a Gson

logo java

Gson es una pequeña librería open source creada por Google que permite convertir el contenido de objetos Java en su representación en formato JSON y viceversa, o lo que es lo mismo, serializar y deserializar objetos Java en cadenas JSON. Su principal virtud es que es muy sencilla de utilizar y además se puede emplear en aplicaciones Android por lo que es una buena opción a tener en cuenta si se tiene que trabajar con ficheros JSON de cierta complejidad que nos obligarían a escribir bastante código si se usara la API estándar y básica de JSON de bajo nivel.

Seguir leyendo

Persistencia en BD con Spring: Integrando JPA, c3p0, Hibernate y EHCache

Última actualización:01/09/2017

logo spring

Una de las fortalezas de Spring es que no es un simple framework al uso, sino una suerte de metaframework o ecosistema compuesto por multitud de módulos conectados entre sí pero también integrables con terceros frameworks y estándares JEE. El núcleo de Spring (Spring IoC Container) puede hacer de “pegamento” en nuestros proyectos entre las distintas tecnologías que utilicemos, pertenezcan o no al propio Spring. Por ejemplo, que Spring incluya un módulo MVC para la capa de vista de aplicaciones web (SpringMVC) no es excluyente para que usemos cualquier otro framework de vista como Struts2, JSF, GWT…

En este blog ya hemos visto estas posibilidades de integración con los tutoriales sobre servicios web SOAP en los que utilizamos el core de Spring en una aplicación web que implementa esos servicios SOAP utilizando el estándar JAX-WS con Apache CXF. En esta ocasión, veremos cómo realizar una integración que probablemente realicemos en la mayoría de nuestros proyectos Spring: la de SpringIoC con un framework ORM para gestionar con Spring la persistencia, incluyendo la transaccionalidad. En concreto, se va a utilizar Hibernate, siguiendo en la medida de lo posible la especificación JPA, y que es el ORM más popular para Java. También se usará el pool de conexiones c3p0 para optimizar la conexión con la base de datos, que en este artículo será MySQL, y veremos la configuración y uso básico de la caché de objetos EHCache para mejorar el rendimiento de la aplicación.

Nota: En este ejemplo se va a utilizar un DAO para implementar a través de JPA\Hibernate las operaciones con la BD, pero recomiendo encarecidamente el uso de Spring Data JPA para estandarizar, simplificar y acelerar el desarrollo de la capa de persistencia de nuestras aplicaciones.

Seguir leyendo