miércoles, 28 de febrero de 2018

Ejemplo 2018-02: Java vs Groovy.

Resumen: 
Ejemplo de convertir una clase Java a código Groovy.

Descripción:
Muchas veces, poder medir los beneficios de trabajar con Groovy; resulta vacío sino no lo podemos cuantificar. Como parte de la charla "Introducción a Groovy", este post muestra los cambios del código para tener un webservice a partir de una clase Java.

1. El operador de acceso public es por defecto. El return es opcional.

2. Los tipos son inferidos al emplear def. Los paréntesis son opcionales. Listas y arreglos se tratan de la misma forma.


3. Uso del operador in. Empleo de cadenas interpoladas.  
4. Constructores dinámicos.

5. Adiós a los getters y setters


6. Triple comillas (dobles).
Código Fuente:
https://github.com/edgargs/power-groovy.git
 
Bibliografía: 
http://groovy-lang.org/documentation.html 
 
Configuración: 
SpringBoot 1.5.9
Groovy  2.4

miércoles, 31 de enero de 2018

Ejemplo 2018-01: WS-Parser ISO8583.

Resumen: 
Webservice para procesar tramas ISO8583.

Descripción:
Dado que este es un blog personal, me tomo la libertad de empezar con una anécdota.
---
El primer trabajo que tuve, fue para Mifarma (una cadena de farmacias) allá por el año 2006. A los pocos meses me asignaron el proyecto de Recargas Virtuales. Recuerdo que el proveedor era Brightstar, y exponía un servicio web para las transacciones. Las tramas cumplían el estándar ISO-8583 y debía usar la librería j8583.

Todo perfecto, solo que nuestro sistema se ejecutaba en Java 1.4 y la librería estaba en Java 5.0. Como recordarán, la transición entre dichas versiones fue grande. Tuve el oportunidad de contactarme con el creador: Enrique Zamudio (@chochosmx en Twitter). En aquellos años, el medio de facto eran el correo y, el fenecido, MSN Messenger. Con su ayuda, pude hacer los cambios necesarios y compilarlo en la versión que necesitaba.

Esa experiencia y otros proyectos, siempre con la misma librería, me permitirieron calificar a mi trabajo actual (mi primer proyecto en banca). Por eso, mi alegría al escribir este post.
---
Construí un webservice con Springboo y usé Groovy para el controller. Para la lógica, reutilicé ejemplos anteriores escritos en Java. Esto me permite mostrar la perfecta interoperabilidad entre las clases (bytecode) en un mismo proyecto.

Al ejecutar (siempre con Gradle) se exponen dos métodos:
  1. leer
  2. generar
En el primer caso, recibe una trama y recupera los campos.


Luego, para generar la trama, se ingresan los valores: monto y número.

Código Fuente:
https://github.com/edgargs/ws-parse-ISO8583.git 
 
Bibliografía: 
http://www.javamexico.org/blogs/ezamudio/iso_8583_en_java  
http://j8583.sourceforge.net/ 
https://github.com/chochos/j8583
 
Configuración: 
SpringBoot 1.5.9
Groovy  2.4

miércoles, 27 de diciembre de 2017

Ejemplo 2017-12: Leer datos encriptados.

Resumen: 
Leer datos de una tabla encriptada.

Descripción: 
Sin quererlo, los últimos artículos, se han convertido en una serie de encriptación:
  1. Logging encriptado
  2. Tabla encriptada
El requerimiento era consultar los registros que se grabaron en la tabla encriptada. El programa debía ejecutarse en background (demon) y tomar acción según el estado.

Se hizo con Spring Boot y Spring Data. El mapeo de la entidad es muy parecido a Grails. Para la transformación (desencriptar) de los campos, se debe implementar un listener.


Como adicional, el uso de Spring Boot nos permite empaquetar las clases y librerías (al estilo de Fat-Jar); para tener una aplicación lista para el despliegue.

Bibliografía: 
https://spring.io/guides/gs/accessing-data-mysql/
https://www.concretepage.com/java/jpa/jpa-entitylisteners-example-with-callbacks-prepersist-postpersist-postload-preupdate-postupdate-preremove-postremove
 
Configuración: 
SpringBoot 1.5.8
Gradle 3.5
Java 1.8

martes, 28 de noviembre de 2017

Ejemplo 2017-11: Tabla encriptada.

Resumen: 
Mantenimiento formulario con datos encriptados.

Descripción: 
En el post anterior (https://codigo-programacion-17.blogspot.pe/2017/10/ejemplo-2017-10-logging-encriptado.html), utilicé el método AES para encriptar el texto del log. Entonces, la misma librería fue la que usé para grabar los datos encriptados de una tabla de registros.

Dado que teníamos una fecha límite (30 días) para tener el programa con las especificaciones requeridas, opté por usar Grails para construir el proyecto. En este ejemplo, quiero describir la forma de encriptar los datos. También aclarar, que otras formas de resolver esto era:

  1. Emplear los método de encriptación de MySql, 
  2. Configurar Hibernate para que haga la conversión.
Primero tuve que crear el proyecto, el dominio y el controlador. En el clase de dominio agregar los métodos para transformar los datos necesarios.


Antes de insert o actualizar (beforeInsert, beforeUpdate) se encripta las información. Y cuando se lee de la tabla (afterLoad) se desencripta.

Obviamente, este es un caso muy simple. Pero, si lo hubiera creando procedimiento de base de datos hubiera significado desencriptar en cada consulta. O, encriptar cada campo en cada transacción.

Finalmente, la ventaja que con GORM tenemos los métodos findBy* que son muy útiles.

Configuración: 
Grails 3.3.1
Gradle 3.5
Java 1.8