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.

jueves, 4 de septiembre de 2014

Pensando en módulos

Para ordenar el código fuente y la base de datos, es mejor agrupar por módulos. Entonces, el programa tiene los siguientes: Administracion Configuracion Ventas Caja Inventario Reportes Contabilidad Compras Los mismos, tienen su representación en esquemas de BBDD y librerías.

miércoles, 3 de septiembre de 2014

Uso de patrones

En el ámbito web, existe infinidad de frameworks a emplear: JSF, Spring, Struts, etc. Todas con sus ventajas y contras. Sin embargo, para desarrollar aplicaciones de escritorio en java las opciones son muy escasas. Por ejemplo: Swing Application Framework, Eclipse RCP y NetBeans Platform, entre los que revisé. No quedo más remedio que seguir con la implementación a medida. Pero sí podemos aplicar patrones. Ahora todos programamos con patrones. Estos son mis favoritos, por eso los incluyo en el proyecto: MVC Facade DAO