jueves, 29 de diciembre de 2016

Ejemplo 2016-05

Resumen
Enviar geoposición desde el backend con Primefaces y Gmaps.

Descripción
Este ejemplo muestra como interactuar con información del backend y el frontend. Específicamente, enviar una posición y mostrarla en un mapa (google maps).

Recuperamos la latitud y longitud (posiblemente desde la base de datos) en el controller.
La posición lo almacenamos en variables de javascript. En la página web, también tendremos dos input's para mostrar cómo va cambiando la posición al mover el marker.
Creamos el mapa y colocamos el marker. Agregamos los eventos para mostrar la posición actual.


Bibliografía
https://developers.google.com/maps/documentation/javascript/examples/

Configuración
Spring 4
Primefaces 6
Javascript

viernes, 2 de diciembre de 2016

Ejemplo 2016-04

Resumen
Configurar gradle para un proyecto Eclipse/Web.

Descripción
Construir una aplicación y desplegar la misma es un servidor, se hace tedioso si siempre lo hacemos nosotros mismos. En realidad no hay mayor aporte que utilizar el mouse y IDE de turno. En su momento, configuré Ant para compilar mis proyectos. Luego me pasé a Maven, con el añadido de tener un repositorio para las librerías. Si es que conocen ambas herramientas, seguro que sabrán el paso siguiente: GRADLE.

Sin embargo, me tocó trabajar en un aplicación Web echa con Eclipse. Para el despliegue local, es fácil hacerlo. Pero pasarlo a Producción, requiere muchos clicks, para mi gusto. En pos de automatizar esta labor, agregué el archivo build.gradle para empaquetar el war.

En este punto es necesario aclarar, que la estructura de carpetas para una aplicación web en gradle es:

    src/main/java/
    src/main/webapp/WEB-INF/
    src/main/resources/

Pero el proyecto en Eclipse, tiene la siguiente forma:

    src/
    WebContent/WEB-INF/

Entonces, lo que se desea no es alterar los directorios, sino amoldar gradle para que reconozca dicha estructura. Este es el archivo que hace posible esto.



Bibliografía
https://docs.gradle.org/current/userguide/war_plugin.html
http://stackoverflow.com/questions/18273184/how-to-set-webappdirname-in-gradle
https://newfivefour.com/gradle-java-war.html

Configuración
Eclipse Neon
Gradle
JDK 8
WildFly 10

jueves, 13 de octubre de 2016

Ejemplo 2016-03

Resumen 

Grabar una misma consulta en distintas tablas.

Descripción

Si nos encontramos en la necesidad de grabar una consulta (normalmente un resumen o consolidado) en varias tablas, notamos que se repite la consulta de base de datos y solo cambia una condición. El resultado debe insertarse en distintas tablas a la vez o discriminar la tabla a registrar.

Entonces, podemos emplear una sentencia BULK COLLECT, que recupera de un cursor (recibe como parámetro la condición diferencial) e inserta en la tabla asignada.

Con este ejemplo vamos a tener ahorro en líneas de código. Además, cuando la sentencia se modifica, el cambio sólo se hace una vez.

Configuración
Oracle 11g

lunes, 3 de octubre de 2016

Ejemplo 2016-02

Resumen 

Emplear una vista con parámetros.

Descripción

Se tiene una consulta que es repetida en distintos lugares (este ejemplo asume que las consultas se realizan en paquetes de base de datos). La estructura es igual. La diferencia se da en los campos que se recuperan para mostrar o procesar. 

La consulta en cuestión puede ser compleja: incluir subconsultas, uniones de otras tablas, etc. En el ejemplo se hace un consulta muy sencilla para facilitar la compresión de lo que se quiere hacer. Al crear una vista con la consulta (compleja) nos ahorramos líneas de código en los procedimientos que lo ejecutan. También, será más fácil poder optimizarla.

Para poder parametrizar la vista, se debe crear un paquete que encapsular las variables. Luego, son recuperados al procesar la sentencia.

Configuración
Oracle 11g

martes, 20 de septiembre de 2016

Ejemplo 2016-01

Resumen
Procesar una transacción remota (en una base de datos relacional), mediante un procedimiento almacenado.

Descripción
Un cliente necesitaba enviar información (transaccional) a su base de datos centralizada. Lo normal en estos casos, sería emplear un servicio web que recibe los datos y los persiste de forma autónoma, segura y confiable. Pero construir una servicio web, no estaba entre los planes. Entonces, se decidió grabar las tablas invocando un procedimiento almacenado remoto. Había que enviar todos los datos concatenados, de tal forma que puedan ser interpretados del lado del servidor. Lo primero que pensé fue en enviar la información en formato JSON. Generar el código desde JAVA fue sencillo. El problema es que el Oracle 11g no soporta el tipo JSON_TABLE (qué está implementado en Oracle 12c). No me quedó más remedio que enviar el texto, pero en formato XML. Se asumió el riesgo del envió de la información no cifrada (el sistema está en una red privada), el tamaño de los datos y el costo de procesamiento del servidor.

Este ejemplo nuestra cómo generar el formato XML en el cliente: Se etiqueta los bean's con la anotación  @XmlRootElement. En este punto, no se quiso emplear librerías de terceros (ej. commons-beanutils).

Este sería el procedimiento para interpretar el xml y grabar las tablas correspondientes. Investigando un poco, la solución es válida para todas las base de datos relacionales (como Postgres y Sql Server), aunque el código varía entre ellas.

Código Fuente
https://github.com/edgargs/Ejemplo-2016-01.git

Bibliografía
http://howtodoinjava.com/jaxb/jaxb-exmaple-marshalling-and-unmarshalling-list-or-set-of-objects/ http://viralpatel.net/blogs/oracle-xmltable-tutorial/

Configuración
Netbeans
Maven
JDK 8
Oracle 11g

lunes, 12 de septiembre de 2016

Prueba: Hola.java

He buscado la forma de publicar algunas porciones de código (programación), y encontré una guía para emplear el repositorio de github: using-github-as-a-syntax-highlighter. A modo de prueba, va este post.

martes, 16 de septiembre de 2014

¿TDD?

Hace poco escuché todos los podcast's de Basta ya de picar. Entonces, recordé lo poco que leí sobre TDD. De manera, que hice mis primeros pasos en de emplear esta metodología en gsPOS. Es ya conocido, que para estas labores se emplea la librería JUnit. Agregué los jar's al proyecto. Generé la prueba, al método que ya había creado. Luego de algunas correcciones en el código, culminé mi primera prueba. Ahora toca, pensar la prueba y el luego implementar la solucion.