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

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

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

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 sencillo y elegante para dotar de un sistema automatico 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 nuestra demo paso a paso.

Seguir leyendo

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

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 del proyecto original que 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

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. El caso más típico consiste en la revisión de la base de datos para la generación de informes de seguimiento, el envío de notificaciones, realizar tareas de sicronizació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 se suele utilizar Quartz, sin embargo si utilizamos Spring y la casuística es sencilla no tenemos que recurrir a ninguna librería de terceros ya que con Spring 3 es sencillo definir ejecuciones períódicas de un método de un bean y es precisamente lo que se verá de forma práctica en este artículo.

Seguir leyendo

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


VERSIONES

  1. 08/02/2014 (Primera publicación)
  2. 02/03/2014:
    • Añadido ejemplo de UPDATE
    • Actualización de librerias de Spring
  3. 01/11/2014:
    • Ampliación de la sección de consultas
    • Configuración de caché
    • División del artículo original en dos partes y creación de una tercera
    • Diagrama de clases

logo spring

Nota: Este tutorial es una continuación de Persistencia en BD con Spring: Integrando JPA, c3p0, Hibernate y EHCache. El objetivo es reutilizar el mismo proyecto de ejemplo e incluir Spring Data JPA.

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, obteniéndose estos datos de fuentes tan dispares como servicios RestFUL, bases de datos relacionales a través de JPA, o bases de datos NoSQL como MongoDB o Neo4J, entre otras. Este artículo 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

Nota:A partir de la versión 1.7.0.RELEASE Spring Data JPA requiere Spring 4. En el artículo se utilizará Spring 3 y Spring Data JPA 1.6.4.RELEASE ya que Spring 3 se sigue utilizando ampliamente incluso en proyectos de nueva creación.

Seguir leyendo

Integrando Struts 2 y Spring IoC


VERSIONES

  1. 04/11/2013 (Primera publicación)
  2. 08/03/2014:
    • Añadida configuración de applicationContext en el web.xml
    • Pequeñas mejoras y correcciones varias

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.

Entorno de pruebas:

Requisitos: Conocimientos básicos de Maven, Struts 2 y Spring IoC.

Seguir leyendo

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


VERSIONES

  1. 19/06/2013 (Primera publicación)
  2. 06/07/2013:
    • Se cambia la dependencia hibernate-c3p0 por la de c3p0 ya que la conexión a la base de datos se define en Spring y no se utiliza la integración con Hibernate
    • Se amplia la sección dedicada a EHCache
  3. 28/09/2013:Añadido cómo acceder a sesión de Hibernate tanto al artículo como a la demo. Se han actualizado las librerias empleadas.
  4. 24/12/2013:Uso programático de la caché. Se han actualizado las librerias empleadas.
  5. 27/09/2014:Se elimina el persistence.xml. Revisión de la redacción. Se han actualizado las librerias empleadas.
  6. 08/11/2014:uso de JUnit
  7. 15/02/2015:propiedades de c3p0

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 frameworks externos o estándares JEE. El núcleo de Spring (Spring IoC Container) puede hacer de “pegamento” en nuestros proyectos entre las distintas tecnologías que usemos 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 atisbado estas posibilidades de integración con el artículo sobre servicios web, donde usamos el core de Spring para una aplicación web que ofrecía servicios SOAP a través del estándar JAX-WS y usando como implementación un framework de terceros como Apache CXF. En esta ocasión, se verá 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.

Así pues, se va a mostrar una integración que he realizado en numerosas ocasiones en mis proyectos y que forma parte de uno de los “stack” de desarrollo web Java más utilizados: Spring y JPA con la implementación de Hibernate, probablemente 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 Java.

Seguir leyendo