El presente es el segundo de una serie de tres artículos que muestran cómo construir una aplicación pureXML de tres niveles que use JavaScript o gadgets OpenSocial. Siguiendo los pasos detallados en este artículo, logrará exponer los datos JSON descriptos en el primer artículo de esta serie a través de JSON Universal Services.
JSONx es una representación canónica de XML sin pérdida de datos de JSON que permite a dispositivos y software que soportan XML operar con JSON. En el primer artículo de esta serie, realizamos una presentación de JSONx y mostramos cómo almacenar JSONx en una base de datos pureXML. pureXML permite almacenar, incluir en índices y consultar XML a través de lenguajes como SQL/XML, XQuery y XPath.
Los Universal Services for pureXML comprenden un conjunto de operaciones de base de datos simple pero fijo que permite consultar y modificar XML almacenados en una columna pureXML de una base de datos DB2®. Estas operaciones de bases de datos (entre otras: insert, update, delete y query) se exponen como servicios web y devuelven los datos en forma de XML al cliente. Para poner a disposición los Universal Services deben seguirse una serie de sencillos pasos de configuración e implementación. Para obtener más información acerca de Universal Services, vea el artículo de developerWorks, "Universal Services for pureXML using Data Web Services" (busque el vínculo en la sección de Recursos).
Los JSON Universal Services son similares a los Universal Services, con la diferencia de que operan sobre datos JSONx almacenados en una columna pureXML. También en JSON Universal Services las operaciones de base de datos son, entre otras: insert, update, delete y query; sin embargo, los datos se devuelven al cliente en forma de JSON, en lugar de XML.
Los JSON Universal Services garantizan que aplicaciones JavaScript (y otras) clientes no tengan conocimiento de que se está usando un almacenamiento XML para guardar JSON. Los objetos JSON guardados potencian las capacidades XML nativas de DB2, posibilitando la visualización, consulta y manipulación de datos mediante lenguajes declarativos como XPath, lo que redunda en una considerable aceleración del tiempo de desarrollo.
Este artículo cubrirá la configuración, implementación y prueba de los JSON Universal Services en un almacén JSONx basado en la base de datos DB2 de muestra usada en el primer artículo de esta serie: "Build a pureXML and JSON application, Part 1: Store and query JSON with DB2 pureXML" (busque el vínculo en la sección Recursos).
Si desea obtener más información sobre estos pasos, consulte el documento README.pdf del paquete de descarga de JSON Universal Services, el cual le proporcionará instrucciones paso a paso (luego de descomprimir el paquete, encontrará al archivo README.pdf en el directorio JSONUniversalServices).
Antes de instalar JSON Universal Services, deberá haber realizado las instalaciones descriptas en el primer artículo de esta serie. Ejecute el paquete JSONx (éste creará la base de datos) y registre las funciones Java™ definidas por el usuario (UDFs, por sus siglas en inglés) en DB2. Estas UDFs permiten la conversión de JSON a JSONx y viceversa. Además, su sistema deberá tener instalados: DB2 9.5 o 9.7, Java Runtime Environment 1.5.0 y un servidor Web (por ejemplo: WebSphere Application Server V6.x o Apache Tomcat V6.x). Tome en cuenta que el tiempo de ejecución de Java viene incluido en la instalación de DB2. Si usted aún no ha instalado estos productos, lea el primer artículo. Busque el vínculo al primer artículo en la sección de Recursos.
En el primer artículo de esta serie, creamos la tabla CUSTOMER (Cliente). Usaremos esta tabla para instalar y probar JSON Universal Services. La Tabla 1 muestra una visión general de la tabla CUSTOMER:
Tabla 1. Visión general de la tabla JSONXMLADMIN.CUSTOMER
| Nombre de la columna | Tipo de datos | Descripción |
|---|---|---|
| CID | INTEGER | ID del cliente |
| INFO | XML | Registro que contiene información personal sobre el cliente |
| COMMENT | VARCHAR(256) | Identificador textual pequeño sobre el cliente |
Luego de haber instalado los requisitos previos y creado la tabla, podrá proceder a configurar e instalar JSON Universal Services para una columna pureXML específica.
Instalación de JSON Universal Services
Esta sección supone que usted ha descargado y extraído el paquete JSON Universal Services en un directorio local, temporario y en funcionamiento. El directorio de JSON Universal Services usado en todo este artículo es C:\temp\JSONUniversalServices. En su sistema, verá los directorios y archivos mostrados en la Figura 1.
Figura 1. Contenido del paquete de descarga de JSON Universal Services
Los directorios incluyen clases, servicios y war. Los archivos son configure.bat, configure.sh y README.pdf.
Cuando tenga los archivos y scripts necesarios en su sistema, proceda con la instalación de los JSON Universal Services, la cual básicamente consiste en tres pasos:
- Configurar los JSON Universal Services según la configuración de su sistema local.
- Implementar los JSON Universal Services en su servidor de aplicaciones.
- Probar los JSON Universal Services.
Configuración de los JSON Universal Services
La configuración de los servicios web se logra a través de un script proporcionado con la descarga llamado configure.bat (usuarios de Linux®: configure.sh). Este script ha sido modificado para trabajar con el paquete JSONx. Por consiguiente, si usted modificó el paquete JSONx o si decidió usar otra base de datos distinta a la del artículo, deberá modificar el script configure.bat antes de ejecutarlo. Es posible que deba ajustar algunos parámetros según la configuración de su sistema local. La Tabla 1 muestra los parámetros usados en este script de configuración.
Tabla 2. Visión general de los parámetros usados en el script de configuración
| Nombre del parámetro | Descripción | Valor (de acuerdo con la base de datos de muestra) |
|---|---|---|
| DB2INSTALLDIR | Ruta al directorio de la instalación de DB2. | C:\Program Files\IBM\SQLLIB |
| DBSCHEMA | Nombre del esquema de base de datos al que pertenece la tabla que contiene la columna XML. | JSONXMLADMIN |
| DBNAME | Nombre de la base de datos con la que se usan los Universal Services. | JSONSMPL |
| DBTABLE | Nombre de la tabla que contiene la columna XML. | CUSTOMER |
| DBPRIMARY | Nombre de la columna primaria de la tabla especificada en DBTABLE. Esta columna puede ser de tipo INTEGER o VARCHAR. | CID |
| DBCOMMENT | Nombre de la columna de comentarios de la tabla especificada en DBTABLE. | COMMENT |
| DBXML | Nombre de la columna XML de la tabla especificada en DBTABLE. Esta es la columna que contiene los datos XML. | INFO |
Observe que los valores de los tres parámetros de la Tabla 2, DBPRIMARY, DBCOMMENT y DBXML, coinciden con los nombres de las columnas de la Tabla 1.
La Figura 2 muestra el archivo de configuración luego de su edición en base a los valores proporcionados en la Tabla 2. (Ver una versión de texto de la Figura 2.)
Figura 2. Edición del archivo de configuración configure.bat
Después de modificar configure.bat (usuarios de Linux: configure.sh) con los parámetros apropiados, podremos ejecutar el script que realiza la configuración de JSON Universal Services. Este script crea un archivo de almacenamiento Web Application Archive (WAR) que contiene todos los archivos requeridos por la aplicación Web de JSON Universal Services y puede implementarse en su servidor de aplicaciones. Recuerde que el script debe ejecutarse en el procesador de la línea de comandos de DB2 ya que, de lo contrario, la ejecución fallará.
Implementación de JSON Universal Services
Como explicamos en la sección anterior, la edición y ejecución del script configure.bat creó un archivo WAR que ahora puede implementar en su servidor de aplicaciones. Antes de implementar el archivo WAR en el servidor de aplicaciones, deberá configurar una fuente de datos en el servidor de aplicaciones para que los Universal Services puedan acceder a su base de datos DB2.
Para establecer la fuente de datos, siga el proceso de configuración estándar de su servidor de aplicaciones. El único requisito a tomar en cuenta durante la configuración es que el nombre de la fuente de datos debe cumplir con el siguiente patrón: jdbc/nombre de base de datos. El nombre de la fuente de datos del ejemplo de este artículo es jdbc/jsonsmpl. Si desea obtener más información sobre la configuración de una fuente de base de datos, consulte la documentación de su servidor de aplicaciones o lea el documento README.pdf incluido en el paquete de descarga de JSON Universal Services (en el directorio JSONUniversalServices).
El segundo paso consiste en implementar el archivo WAR real en el servidor de aplicaciones. Debido a las diferencias entre los artefactos de servicios web requeridos por WebSphere Application Server V6.x y por Apache Tomcat V6.x, el script de configuración crea dos archivos WAR distintos, uno para cada servidor de aplicaciones.
Los archivos WAR se encuentran en el subdirectorio war, dentro de directorio en funcionamiento C:\temp\JSONUniversalServices de JSON Universal Services. Específicamente, el directorio contiene dos subdirectorios: tomcat y was. El directorio tomcat contiene el archivo WAR a instalar en Apache Tomcat V6.x, mientras que el directorio was contiene el archivo WAR a instalar en WebSphere Application Server V6.x. Para instalar el archivo WAR en su servidor de aplicaciones, siga el procedimiento estándar correspondiente. Si desea obtener más información, consulte la documentación de su servidor de aplicaciones o lea el documento README.pdf incluido en el paquete de descarga de JSON Universal Services.
Ahora estamos en condiciones de probar el conjunto de servicios web mediante la página de prueba de JSON Universal Services, la cual ya se encuentra disponible a través de la implementación del archivo WAR.
Prueba de JSON Universal Services
Para verificar que la instalación y configuración de JSON Universal Services en su sistema local se haya realizado con éxito, es necesario probar estos servicios. La forma más fácil de hacerlo es mediante una página HTML simple que ya se encuentra disponible en su servidor de aplicaciones como parte de la instalación de JSON Universal Services.
Para acceder a la página de prueba de JSON Universal Services, redirija su navegador a la URL http://localhost:8080/JSONUniversalServices/testServices.html. Tome en cuenta que para instalaciones en Apache Tomcat deberá usar el puerto 8080. Si usted es usuario de WebSphere Application Server, deberá usar el puerto 9080 para acceder a la página. Considere que, de acuerdo con su sistema local, es posible que deba adaptar el nombre de host o el puerto. Visualizará la página mostrada en la Figura 3.
Figura 3. Página de prueba de JSON Universal Services
Esta página de prueba simple permite insertar, actualizar, eliminar y consultar datos
JSON almacenados como JSONx en su base de datos. Los servicios web se invocan a
través de los botones proporcionados en la página de prueba. La Figura 4 muestra la respuesta del servicio web luego haber invocado la
operación getPrimaryKeys a través del botón de la
página de prueba.
Figura 4. Respuesta a la invocación de la operación de servicios web getPrimaryKeys
Los documentos JSON se convirtieron e insertaron en la columna como documentos XML. Es posible recuperar estos documentos tanto en formato JSON como XML.
Por ejemplo, al invocar el método getJSONDocumentByKey,
obtendrá la siguiente representación JSON del documento:
Listado 1. Información de cliente correspondiente a Kathy Smith en JSON
{
"customerinfo" : { "cid" : 1000 , "name" : "Kathy Smith" , "addr" : { "country" :
"Canada" , "street" : "5 Rosewood" , "city" : "Toronto" , "prov-state" : "Ontario" ,
"pcode-zip" : "M6W 1E6" } , "phone" : { "work" : "416-555-1358" } } } |
En cambio, si se invoca el métodogetXMLDocumentByKey se
obtendrá el documento XML (formato JSONx) almacenado en su base de datos DB2
pureXML:
Listado 2. Información de cliente correspondiente a Kathy Smith en JSONx
<json:object xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"> <json:object name="customerinfo"> <json:number name="cid">1000</json:number> <json:string name="name">Kathy Smith</json:string> <json:object name="addr"> <json:string name="country">Canada</json:string> <json:string name="street">5 Rosewood</json:string> <json:string name="city">Toronto</json:string> <json:string name="prov-state">Ontario</json:string> <json:string name="pcode-zip">M6W 1E6</json:string> </json:object> <json:object name="phone"> <json:string name="work">416-555-1358</json:string> </json:object> </json:object> </json:object> |
Además, esta página proporciona otros servicios como insert, update, delete y XML query. Para obtener más información, lea la sección a continuación y las instrucciones en la página de prueba.
Más información acerca de las operaciones JSON Universal Services
Esta sección incluye la Tabla 3. Esta tabla describe los parámetros, sus codificaciones y los tipos MIME asociados con las operaciones JSON Universal Services. Estas operaciones se encuentran disponibles a través de HTTP GET, HTTP POST con los tipos MIME codificado en URL y de texto plano.
- En las operaciones getDocumentByKey y getXMLDocumentByKey puede especificar un ID y así recuperar los datos correspondientes almacenados en JSON o en XML, respectivamente.
- En las operaciones insert y update puede especificar un ID para insertar o actualizar un documento JSON junto con el documento nuevo. Si la solicitud se realiza con éxito, obtendrá un conteo de actualizaciones con valor 1. De lo contrario, obtendrá un conteo de actualizaciones con valor 0.
- En la operación delete puede especificar un ID para eliminar un documento del almacén pureXML. Si la solicitud delete se realiza con éxito, obtendrá un conteo de actualizaciones con valor 1. De lo contrario, obtendrá un conteo de actualizaciones con valor 0.
- En la operación runXMLQuery puede proporcionar un XQuery o datos de entrada para un XMLQUERY (parte de SQL/XML) para recuperar contenidos XML incluidos en varios documentos almacenados. La página de prueba proporciona algunos ejemplos.
Tabla 3. Visión general de las operaciones JSON Universal Services
| Operación | Parámetro de entrada | HTTP GET | HTTP POST aplicación MIME_TYPE/ x-www-form-urlencoded | HTTP POST aplicación MIME_TYPE/x-www-form-urlencoded | Respuesta |
|---|---|---|---|---|---|
| getDocumentByKey | ID | ID: parámetro/valor codificado en URL en cadena de consulta | ID: parámetro/valor codificado en URL en mensaje | ID: parámetro/valor codificado en URL en cadena de consulta | documento JSON (texto/plano) |
| getXMLDocumentByKey | ID | ID: parámetro/valor codificado en URL en cadena de consulta | id: parámetro/valor codificado en URL en mensaje | id: parámetro/valor codificado en URL en cadena de consulta | representación JSONx del documento (texto/xml) |
| insert | ID (único) doc (Documento JSON) | ID: parámetro/valor codificado en URL en cadena de
consulta doc: parámetro/valor codificado en URL en cadena de consulta | ID: parámetro/valor codificado en URL en
mensaje doc: parámetro/valor codificado en URL en mensaje | ID: parámetro/valor codificado en URL en cadena de
consulta doc: contenido de mensaje POST | Conteo de actualizaciones (texto/plano) |
| update | ID doc (Documento JSON) | ID: parámetro/valor codificado en URL en cadena de
consulta doc: parámetro/valor codificado en URL en cadena de consulta | ID: parámetro/valor codificado en URL en
mensaje doc: parámetro/valor codificado en URL en mensaje | ID:parámetro/valor codificado en URL en cadena de
consulta doc: contenido de mensaje POST | Conteo de actualizaciones (texto/plano) |
| delete | ID | ID: parámetro/valor codificado en URL en cadena de consulta | id: parámetro/valor codificado en URL en mensaje | id: parámetro/valor codificado en URL en cadena de consulta | Conteo de actualizaciones (texto/plano) |
| runXMLQuery | query (XQuery o datos de entrada para XMLQUERY) | consulta: parámetro/valor codificado en URL en cadena de consulta | consulta: parámetro/valor codificado en URL en mensaje | consulta: contenido de mensaje POST | Documentos XML con resultados (texto/xml) |
Este artículo presentó a JSON Universal Services y cubrió la configuración, implementación y prueba de JSON Universal Services en un almacén JSONx basado en la base de datos DB2 de muestra.
El primer artículo de la serie describió el nuevo formato JSONx y la habilitación del almacenamiento de JSON como XML en la base de datos DB2 pureXML. También desarrolló un caso de uso de JSON y destacó los beneficios que brinda el uso de pureXML para almacenar JSON.
El próximo artículo de esta serie se centrará en la creación de la capa de presentación con gadgets OpenSocial que usan los JSONx Universal Services como back-end.
| Descripción | Nombre | tamaño | Metodo de descarga |
|---|---|---|---|
| JSON Universal Services package | JSONUniversal Services.zip | 3692KB | HTTP |
Información sobre métodos de descarga
Aprender
- Universal Services for pureXML using Data Web Services (Susan Malaika y
Christian Pichler, developerWorks, agosto de 2008): obtenga más información acerca
de Universal Services para pureXML.
- Build a
pureXML and JSON application, Part 1: Store and query JSON with DB2
pureXML (Nuno Job, Susan Malaika y Michael Schenker; developerWorks, octubre de
2009): lea el primer artículo de esta serie y comience a beneficiarse con los
objetos persistentes JSON con conservación del estado en las distintas sesiones.
Almacene, gestione y consulte JSON con DB2 pureXML y obtenga un mapeo simple de JSON
a XML. (Parte 1 de una serie de tres partes).
- Build a
pureXML and JSON application, Part 3: Create OpenSocial gadgets for
pureXML (Han Nguyen, Andy B Smith y Mark D Weitzel; developerWorks, noviembre de
2009): defina, implemente y pruebe gadgets OpenSocial que interactúen con JSON
Universal Services. (Parte 3 de una serie de tres partes).
- IBM Data
Studio: Get Started with Data Web Services (Michael L. Pauser,
developerWorks, noviembre de 2007): lea una introducción muy detallada y simple que
le explica cómo desarrollar su primer Data Web Service.
- "Industry Formats and Services with pureXML": ¡Descargue gratis una gran
variedad de ejemplos! Cada ejemplo muestra cómo trabajar con formatos industriales
basados en XML y pureXML. Los ejemplos muestran cómo registrar un XML Schema, cómo
realizar validaciones de documentos de instancias XML, cómo consultar datos XML
usando XQuery o SQL/XML y mucho más.
- Data Web Services: Build Web Services the new way to access IBM database
servers (Vijay Bommireddipalli, developerWorks, diciembre de 2007): Cree y
personalice un Data Web Service basándose en este contexto teórico sobre Data Web
Services que brinda una visión arquitectónica general de Data Web Services. Este
artículo aborda distintos aspectos de Data Web Services como, por ejemplo, la
seguridad.
- Using industry standard data formats with WebSphere ESB and DB2 Version 9
pureXML (Mohab El-Hilaly, Andre Tost, and Alaa Youssef; developerWorks, June
2007): en este artículo encontrará un escenario que muestra cómo, al usar WebSphere
Enterprise Service Bus y DB2 9 pureXML, una empresa farmacéutica logra cumplir con
las obligaciones legales de exponer datos estandarizados sobre sus
productos.
- Certificación en XML de
IBM: sepa cómo obtener la certificación IBM-Certified Developer en XML y en
tecnologías relacionadas.
- Biblioteca
técnica de XML: visite la Zona XML en developerWorks y consulte una amplia
gama de artículos y consejos técnicos, tutoriales, estándares e IBM
Redbooks.
- Eventos técnicos y transmisiones por
Internet de developerWorks: Manténgase al día en temas de tecnología con
estas sesiones.
- Podcasts developerWorks: escuche
interesantes entrevistas y conversaciones dirigidas a desarrolladores de
software.
Obtener los productos y tecnologías
- DB2 Express-C: descargue esta edición comunitaria sin cargo del servidor de
datos DB2.
- Versiones de evaluación de productos de
IBM: descargue o investigue las versiones de prueba online en
el IBM SOA Sandbox y tenga acceso a herramientas de desarrollo de
aplicaciones y productos de middleware de DB2®, Lotus®, Rational®,
Tivoli® y WebSphere®.
Comentar
- Participar en el foro de debate.
- Foros de debate
en la zona XML: participe en cualquiera de los múltiples debates
relacionados con XML.
- Blogs developerWorks: lea estos blogs y
participe en lacomunidad developerWorks.

Faton (Tony) Avdiu es graduado en Ingeniería Informática y realiza una pasantía en activación de DB2 pureXML. Tony se encuentra cursando un máster en Sistemas de Información en la Universidad Pace. En IBM, se dedica actualmente a tecnologías para almacenar XML en DB2.
Susan Malaika es Senior Technical Staff Member para el IBM Information Management Group (parte del IBM Software Group). Entre sus especialidades se incluyen XML, la Web y las bases de datos. Susan ha desarrollado estándares que respaldan datos para entornos distribuidos en el Global Grid Forum. Además de trabajar como desarrolladora de software para los productos de IBM, también se desempeñó como especialista en Internet, analista de datos y diseñadora y desarrolladora de aplicaciones. También es coautora de un libro que se encuentra en la Web y ha publicado varios artículos sobre el procesamiento de transacciones y XML. Susan es miembro de la IBM Academy of Technology.

Michael Schenker obtuvo su segundo título universitario en ciencias de la computación en la Universidad de Ciencias Aplicadas de Leipzig, Alemania. Tiene 7 años de experiencia profesional con IBM. A lo largo de su carrera, trabajó en varios productos relacionados con las bases de datos. Comenzó como pasante trabajando para DB2 Information Integration, con especialización en contenedores no relacionales. Luego, a fines de 2003, comenzó a trabajar para IBM como empleado de tiempo completo. En 2006 se unió a la organización de herramientas para bases de datos y trabajó en la funcionalidad de proveedores de servicios web de DB2 en IBM Data Studio Developer. Gracias a esto, adquirió gran experiencia en tecnologías Web y SOA. Recientemente, Michael ingresó al equipo optimizador de DB2 for z/OS, aunque sigue estando interesado en las tecnologías Web y SOA relacionadas con DB2.