Construya una aplicación pureXML y JSON, Parte 2: Cree Universal Services para pureXML que expongan JSON

Configure, implemente y pruebe JSON Universal Services en un almacén JSONx

Los pureXML Universal Services for JSON (denominados “JSON Universal Services” en este artículo) son un conjunto de operaciones de bases de datos como insert (insertar), update (actualizar), delete (eliminar) y query (consultar) expuestas como servicios web. Estos servicios permiten a la aplicación guardar JSON en pureXML y realizar consultas fácilmente a través de HTTP con WebSphere Application Server. Lea este artículo y comience ya a configurar y probar JSON Universal Services.

3 de noviembre de 2009 – Los autores agregaron la sección Más información acerca de las operaciones JSON Universal Services que incluye la Tabla 3 a efectos de describir los parámetros, codificaciones y los tipos MIME asociados con las operaciones en los JSON Universal Services.

Faton (Tony) Avdiu, CoOp: DB2 Technical Enablement Specialist, IBM  

Photo of Faton (Tony) AvdiuFaton (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, Senior Technical Staff Member, IBM

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, IBM DB2 for z/OS Optimizer Software Engineer, IBM

Author Photo: Michael SchenkerMichael 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.



29-07-2011 (Primera publicación 27-10-2009)

Introducción

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).

Términos de uso común

  • HTML: HyperText Markup Language (Lenguaje de marcado de hipertexto)
  • HTTP: Hypertext Transfer Protocol (Protocolo de transferencia de hipertexto)
  • JSON: JavaScript Object Notation (Anotación de objetos JavaScript)
  • SOA: Service Oriented Architecture (Arquitectura orientada a servicios)
  • URL: Uniform Resource Locator (Localizador uniforme de recursos)
  • WAR: archivos Web ARchive
  • XML: Extensible Markup Language (Lenguaje de marcado extensible)

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).

Requisitos previos

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 columnaTipo de datosDescripción
CIDINTEGERID del cliente
INFOXMLRegistro que contiene información personal sobre el cliente
COMMENTVARCHAR(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
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ámetroDescripciónValor (de acuerdo con la base de datos de muestra)
DB2INSTALLDIRRuta al directorio de la instalación de DB2.C:\Program Files\IBM\SQLLIB
DBSCHEMANombre del esquema de base de datos al que pertenece la tabla que contiene la columna XML.JSONXMLADMIN
DBNAMENombre de la base de datos con la que se usan los Universal Services.JSONSMPL
DBTABLENombre de la tabla que contiene la columna XML.CUSTOMER
DBPRIMARYNombre de la columna primaria de la tabla especificada en DBTABLE. Esta columna puede ser de tipo INTEGER o VARCHAR.CID
DBCOMMENTNombre de la columna de comentarios de la tabla especificada en DBTABLE.COMMENT
DBXMLNombre 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
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
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
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ónParámetro de entradaHTTP GETHTTP POST aplicación MIME_TYPE/ x-www-form-urlencodedHTTP POST aplicación MIME_TYPE/x-www-form-urlencodedRespuesta
getDocumentByKeyIDID: parámetro/valor codificado en URL en cadena de consultaID: parámetro/valor codificado en URL en mensajeID: parámetro/valor codificado en URL en cadena de consultadocumento JSON (texto/plano)
getXMLDocumentByKeyIDID: parámetro/valor codificado en URL en cadena de consultaid: parámetro/valor codificado en URL en mensajeid: parámetro/valor codificado en URL en cadena de consultarepresentación JSONx del documento (texto/xml)
insertID (ú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)
updateID
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)
deleteIDID: parámetro/valor codificado en URL en cadena de consultaid: parámetro/valor codificado en URL en mensajeid: parámetro/valor codificado en URL en cadena de consultaConteo de actualizaciones (texto/plano)
runXMLQueryquery
(XQuery o datos de entrada para XMLQUERY)
consulta: parámetro/valor codificado en URL en cadena de consultaconsulta: parámetro/valor codificado en URL en mensajeconsulta: contenido de mensaje POSTDocumentos XML con resultados (texto/xml)

Conclusión

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.


Descargar

DescripciónNombretamaño
JSON Universal Services packageJSONUniversal Services.zip3692KB

Recursos

Aprender

Obtener los productos y tecnologías

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Information mgmt, SOA y servicios web
ArticleID=480589
ArticleTitle=Construya una aplicación pureXML y JSON, Parte 2: Cree Universal Services para pureXML que expongan JSON
publish-date=07292011