Contenido


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

Comments

Contenido de la serie:

Este contenido es la parte # de # de la serie: Construya una aplicación pureXML y JSON, Parte 2

Manténgase en contacto por contenidos adicionales de esta serie.

Este contenido es parte de la serie:Construya una aplicación pureXML y JSON, Parte 2

Manténgase en contacto por contenidos adicionales de esta serie.

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

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


Recursos para Descargar


Temas relacionados


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

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