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
No hay comentarios:
Publicar un comentario