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

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

Eclipse ADT y Android Studio: incluir dependencias y librerías

GitHub

En la mayoría de aplicaciones Android y en los tutoriales del blog haremos uso de librerías de terceros, especialmente de las librerías de compatibilidad de Google. En este artículo veremos cómo hacerlo tanto en Eclipse ADT como en Android Studio.

Versiones utilizadas
  • Eclipse Luna 4.4.2 + ADT 23
  • Android Studio 1.3

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 (II): Clientes

logo java

Tras la primera parte del artículo ya tenemos una aplicación web que publica mediante SOAP un bean de Spring de forma muy sencilla gracias a JAX-WS y Apache CXF. Ahora toca volver a utilizar estas tecnologías pero con el objetivo contrario, esto es, consumir un servicio web que en nuestro caso será el del primer artículo. Lo haremos con un proyecto Maven y una clase Main y, opcionalmente, con Spring.

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

Sin Spring (cxf-client)

Usaremos un proyecto Maven estándar no web con el siguiente pom.xml donde sólo se tomarán como dependencias las de CXF y log4j

Seguir leyendo

Servicios Web SOAP con JAX-WS, Spring y CXF (I) : Servidor

Última actualización: 13/02/2016

logo java

Java API for XML Web Services (JAX-WS), es una especificación para la creación de servicios web basados en XML-SOAP que vino a suponer la evolución de la especificación JAX-RPC y que forma parte de JEE 5 y Java SE 6. Está basada en anotaciones y permite la creación tanto de servicios como de clientes de servicios web SOAP directamente con clases Java POJO sin tener que lidiar con XML lo que simplifica enormemente trabajar con esta tecnología. A pesar del auge que han tenido en los últimos años los servicios REST(y que en Java cuentan con la especificación JAX-RS), los servicios web SOAP se siguen usando ampliamente y son una opción perfectamente válida para la publicación de APIs y la interoperabilidad de aplicaciones. En este enlace hay una interesante comparativa entre ambas tecnologías.

JAX-WS cuenta con una implementación de referencia llamada Metro, aunque también existen otros productos que implementan la especificación como CXF (el antigüo XFire) o Axis 2. En este tutorial vamos a partir de la base de que ya tenemos una aplicación web que utiliza Spring (al menos su contenedor IoC) y queremos publicar los métodos de un bean como un servicio web SOAP estándar para su consumo por parte de terceras aplicaciones. El módulo Spring WS permite la creación de servios web Contract-first y un soporte (limitado) del estándar JAX-WS pero lo que nosotros queremos es generar el servicio web automáticamente a partir de nuestro código Java sin definir el WSDL.

Este será el primero de una serie de artículos dedicados a JAX-WS con CXF y Spring.

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

Nota: Aquí hay una interesante comparativa en inglés entre los puntos fuertes y débiles de Axis 2, CXF y Spring WS, recomendándose este último.
Seguir leyendo

JPA + Hibernate: Claves primarias

logo java

JPA – Java Persistence API es una especificación (concretamente JSR-317 en su última versión) que debutó con JEE5 junto a EJB 3.0 y que intentó superar la complejidad que suponía hasta el momento utilizar EJB (en el caso de JPA hablaríamos de los EJB de Entidad usados para la persistencia) , además de estandarizar hasta cierto punto los ORM que como Hibernate o TopLink por aquel entonces ya eran usados masivamente, especialmente Hibernate que suponía casi un estándar de facto (de hecho JPA se “inspiró” bastante en este último). La versión 2.0 de la especificación amplió sus capacidades con nuevas opciones de mapeo y una API para la creación de consultas programáticamente, algo con lo que Hibernate ya contaba bastante antes de la aparición de JPA 1.0.La versión 2.1 está ya muy cerca de su publicación final

Siempre que se habla de JPA tenemos que tener muy claro que no es más que una especificación por lo que para utilizarla tendremos que recurrir a un producto que implemente este estándar, y que además este producto puede ofrecer soluciones y alternativas propias fuera del estándar pudiéndose combinar ambas (aunque en este caso sería complicado cambiar de implementación a posteriori). De todas implementaciones, voy a utilizar Hibernate como “vendor” por ser la más conocida y utilizada aunque existen otras alternativas excelentes como OpenJPA de Apache, ObjectDB o la ya mencionada TopLink.

El objetivo de este tutorial es doble:

  • Proporcionar un ejemplo listo para usar de JPA con la implementación de Hibernate configurado para las BBDD más populares. Este ejemplo forma parte de la colección de demos de danielme.com(aquí) y está disponible en GitHub. Para más información sobre cómo utilizar GitHub, consultar este artículo.
  • Utilizar este ejemplo como base para estudiar las posibilidades que JPA con Hibernate ofrece para la gestión de claves primarias en varias bases de datos.

Seguir leyendo