Este artigo é o segundo de uma série de três artigos que ilustra como criar um aplicativo pureXML de três camadas que usa dispositivos JavaScript ou OpenSocial. Seguindo as etapas nesse artigo, você apresentará os dados do JSON descritos no primeiro artigo nesta série através do JSON Universal Services.
O JSONx é uma representação de XML canônica sem perda para o JSON que possibilita aos dispositivos e software que suportam XML para operar com o JSON. No primeiro artigo nessa série, fornecemos uma introdução ao JSONx e ilustramos como armazenar JSONx em um banco de dados pureXML. O pureXML possibilita armazenar, indexar e consultar XML através de linguagens como SQL/XML, XQuery e XPath.
O Universal Services para pureXML é um conjunto simples, mas fixo, de operações de banco de dados que permite consultar e modificar XML, armazenado em uma coluna pureXML de um banco de dados DB2®. Essas operações do banco de dados, que incluem inserir, atualizar, excluir e consultar, são apresentadas como serviços da Web, retornando os dados para o cliente como XML. O Universal Services é disponibilizado através de etapas diretas de configuração e implementação. Para mais informações sobre Universal Services, consulte o artigo do developerWorks "Universal Services para pureXML usando Data Web Services" (consulte Recursos para obter o link).
O JSON Universal Services é similar ao Universal Services, exceto por operar em dados do JSONx armazenados em uma coluna pureXML. Como mencionado anteriormente, as operações do banco de dados incluem inserir, atualizar, excluir e consultar, entretanto, os dados são retornados ao cliente como JSON, em vez de XML.
O JSON Universal Services garante que aplicativos cliente JavaScript (e outros) não reconheçam que um armazenamento XML é usado para persistir JSON. Os recursos XML nativos do DB2 podem ser alavancados com os objetos JSON persistidos, possibilitando visualizar, consultar e manipular os dados com linguagens declarativas como XPath, acelerando drasticamente o tempo de desenvolvimento.
Nesse artigo, abordamos a configuração, implementação e teste do JSON Universal Services em um armazenamento JSONx com base no banco de dados de amostra do DB2 descrito no primeiro artigo dessa série, "Criação de um aplicativo JSON e pureXML, Parte 1: Armazenar e consultar o JSON com o DB2 pureXML" (consulte Recursos para obter o link).
Se precisar de mais detalhes sobre essas etapas, consulte o documento README.pdf do pacote de download do JSON Universal Services para instruções passo-a-passo totalmente ilustradas. (Depois de descompactar o pacote, você encontrará o README.pdf no diretório JSONUniversalServices.)
Antes de instalar o JSON Universal Services, é necessário concluir as instalações descritas no primeiro artigo dessa série. Execute o pacote configurável do JSONx, que criará o banco de dados e registre as funções definidas pelo usuário (UDFs) em Java™ necessárias no DB2. Essas UDFs possibilitam converter JSON em JSONx e vice-versa. Também é necessário ter DB2 9.5 ou 9.7, Java Runtime Environment 1.5.0 e um servidor da Web (como WebSphere Application Server V6.x ou Apache Tomcat V6.x) instalado no seu sistema. Observe que o Java Runtime faz parte da instalação do DB2. Se você não instalou esses produtos, leia o primeiro artigo. Para um link para o primeiro artigo, consulte Recursos.
No primeiro artigo desta série, você criou uma tabela, CUSTOMER, que será usada para instalar e testar seu JSON Universal Services. A Tabela 1 mostra uma visão geral da tabela CUSTOMER:
Tabela 1. Visão geral da tabela JSONXMLADMIN.CUSTOMER
| Nome da coluna | Tipo de dados | Descrição |
|---|---|---|
| CID | INTEGER | ID do Cliente |
| INFO | XML | Um registro contendo informações pessoais sobre o cliente |
| COMMENT | VARCHAR(256) | Um pequeno identificador textual relativo ao cliente |
Agora que você tem os pré-requisitos instalados e a sua tabela foi criada, é possível configurar e instalar o JSON Universal Services para uma coluna pureXML específica.
Instalação do JSON Universal Services
Esta seção presume que você fez o download e extraiu o pacote JSON Universal Services para um diretório de trabalho temporário local. O diretório para JSON Universal Services usado ao longo deste artigo é C:\temp\JSONUniversalServices. Você deve consultar diretórios e arquivos como mostrado na Figura 1.
Figura 1. Conteúdos do pacote de download do JSON Universal Services

Os diretórios incluem classes, serviços e war. Os arquivos são configure.bat, configure.sh e README.pdf.
Assim que os arquivos e scripts necessários estiverem disponíveis no seu sistema, é possível continuar com a instalação do JSON Universal Services, que consiste basicamente em três etapas:
- Configurar o JSON Universal Services para ajustar-se à configuração do seu sistema local.
- Implementar o JSON Universal Services no seu servidor de aplicativo.
- Testar o JSON Universal Services.
Configuração do JSON Universal Services
A configuração dos serviços da Web é obtida através de um script fornecido com o download chamado configure.bat (usuários do Linux®: configure.sh). Esse script é modificado para funcionar com o pacote configurável do JSONx. Portanto, se você modificou o pacote configurável do JSONx, ou decidiu usar um banco de dados diferente, é necessário modificar o script configure.bat antes de executá-lo. Pode ser necessário ajustar alguns parâmetros para adequar-se à configuração do seu sistema local. A Tabela 1 mostra os parâmetros usados nesse script de configuração.
Tabela 2. Visão geral dos parâmetros usados no script de configuração
| Nome do parâmetro | Descrição | Valor (de acordo com o banco de dados de amostra) |
|---|---|---|
| DB2INSTALLDIR | Caminho para o diretório de instalação do DB2. | C:\Program Files\IBM\SQLLIB |
| DBSCHEMA | Nome do esquema do banco de dados ao qual pertence a tabela contendo a coluna de XML. | JSONXMLADMIN |
| DBNAME | Nome do banco de dados com o qual o Universal Services é usado. | JSONSMPL |
| DBTABLE | Nome da tabela que contém a coluna XML. | CUSTOMER |
| DBPRIMARY | Nome da coluna principal da tabela especificada em DBTABLE. Essa coluna pode ser do tipo INTEGER ou VARCHAR. | CID |
| DBCOMMENT | Nome da coluna de comentários da tabela especificada em DBTABLE. | COMMENT |
| DBXML | Nome da coluna XML da tabela especificada em DBTABLE. É a coluna que contém os dados XML. | INFO |
Observe que os valores dos três parâmetros na Tabela 2 DBPRIMARY, DBCOMMENT e DBXML, são os mesmos que os nomes da coluna na Tabela 1.
A
Figura 2 mostra o arquivo de configuração depois que ele foi editado, de acordo com os valores fornecidos na Tabela 2. (Consulte uma versão de texto da Figura 2.)
Figura 2. Edição do arquivo de configuração configure.bat

Depois que o configure.bat (usuários do Linux: configure.sh) for modificado com os parâmetros adequados, é possível executar o script que realiza a configuração do JSON Universal Services. O script cria um arquivo Web application archive (WAR) que contém todos os arquivos necessários para o aplicativo da Web JSON Universal Services, e que pode ser implementado no seu servidor de aplicativos. Lembre que o script deve ser executado no processador de linha de comandos do DB2, caso contrário, a execução falha.
Implementação do JSON Universal Services
Como descrito na seção anterior, a edição e execução do script configure.bat cria um arquivo WAR que agora pode ser implementado no servidor de aplicativos. Antes da implementação do arquivo WAR no servidor de aplicativos, é necessário configurar uma fonte de dados no servidor de aplicativos, que habilita o Universal Services a acessar o banco de dados do DB2.
Para configurar a origem de dados, siga o processo de configuração padrão do seu servidor de aplicativos. O único requisito a considerar durante a configuração é o nome da origem de dados, que deve atender ao seguinte padrão: nome jdbc/database. O nome da origem de dados para o exemplo usado neste artigo é jdbc/jsonsmpl. Se precisar de mais informações sobre como configurar uma origem de dados, consulte a documentação para o seu servidor de aplicativos ou leia o documento README.pdf incluso no pacote de download do JSON Universal Services (no diretório JSONUniversalServices).
A segunda etapa é implementar o arquivo WAR real no servidor de aplicativos. Entretanto, devido às diferenças nos artefatos do serviço da Web requeridos pelo WebSphere Application Server V6.x e pelo Apache Tomcat V6.x, o script de configuração cria dois arquivos WAR separados, um para cada servidor de aplicativos.
Os arquivos WAR podem ser encontrados no subdiretório war, localizado no diretório de trabalho do JSON Universal Services C:\temp\JSONUniversalServices. Em particular, o diretório contém dois subdiretórios: tomcat e was. O diretório tomcat contém o arquivo WAR a ser instalado no Apache Tomcat V6.x, enquanto o diretório was contém o arquivo WAR a ser instalado no WebSphere Application Server V6.x. Para instalar o arquivo WAR no seu servidor de aplicativos, siga o procedimento padrão. Se forem necessárias mais informações, consulte a documentação do seu servidor de aplicativos ou leia o documento README.pdf incluso no pacote de download do JSON Universal Services.
Agora é possível testar o seu conjunto de serviços da Web com a página de teste do JSON Universal Services, que já está disponível através da implementação do arquivo WAR.
Teste do JSON Universal Services
Para garantir que a configuração e a definição do JSON Universal Services no seu sistema local tiveram êxito, é necessário testar esses serviços. A maneira mais fácil de testá-los é usar uma página HTML simples, já disponível no seu servidor de aplicativos, como parte da implementação do JSON Universal Services.
Para acessar a página de teste do JSON Universal Services, redirecione o seu navegador para a URL http://localhost:8080/JSONUniversalServices/testServices.html. Observe que a porta 8080 é usada se a instalação foi feita no Apache Tomcat. Se foi usado um WebSphere Application Server, é preciso usar a porta 9080 para acessar a página. Observe que, dependendo do seu sistema local, pode ser necessário adaptar o nome de host ou porta. Você deve ver a página na Figura 3.
Figura 3. Página de teste do JSON Universal Services

Essa página simples de teste permite inserir, atualizar, excluir e consultar dados JSON, armazenados como JSONx no seu banco de dados. Os serviços da Web são chamados através dos botões fornecidos na página de teste. A Figura 4 mostra a resposta do serviço da Web, depois que chamamos a operação getPrimaryKeys através do botão na página de teste.
Figura 4. Resposta depois que a operação do serviço da Web getPrimaryKeys é chamada

Os documentos JSON foram convertidos e inseridos na coluna como documentos XML. É possível recuperar esses documentos tanto no formato JSON quanto XML.
Por exemplo, chamando o método getJSONDocumentByKey, você obtém a representação JSON do documento:
Listagem 1. Informações do cliente para Kathy Smith em 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"
}
}
}
|
Alternativamente, se você chamar o método getXMLDocumentByKey, irá obter o documento XML (formato JSONx) como ele está armazenado no seu banco de dados DB2 pureXML:
Listagem 2. Informações do cliente para Kathy Smith em 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> |
Além disso, essa página fornece outros serviços, como inserir, atualizar, excluir e consultar XML. Leia a seção a seguir e as instruções na página de teste para mais informações.
Saiba mais sobre as operações do JSON Universal Services
Nesta seção, incluímos a Tabela 3, que descreve os parâmetros, suas codificações e os tipos MIME associados às operações no JSON Universal Services. As operações estão disponíveis através de HTTP GET, HTTP POST com tipos mime de texto simples e codificados para URL.
- Para operações getDocumentByKey e getXMLDocumentByKey, é possível especificar um id e recuperar os dados armazenados correspondentes em JSON ou XML, respectivamente.
- Para operações de inserção e atualização, é possível especificar um id para um documento JSON a ser inserido ou atualizado, junto com o novo documento. Se a solicitação for bem-sucedida, você receberá uma contagem de atualização de 1. Caso contrário, receberá uma contagem de atualização de 0.
- Para operação de exclusão, é possível especificar um id para um documento a ser excluído do armazenamento pureXML. Se a solicitação de exclusão for bem-sucedida, você receberá uma contagem de atualização de 1. Caso contrário, receberá uma contagem de atualização de 0.
- Para a operação runXMLQuery, é possível fornecer um XQuery ou entrada para um XMLQUERY (parte de SQL/XML) para recuperar conteúdo XML que pode estender-se através de muitos documentos armazenados. Consulte a página de teste para obter alguns exemplos.
Tabela 3. Visão geral das operações do JSON Universal Services
| Operação | Parâmetro de entrada | HTTP GET | HTTP POST MIME_TYPE application/x-www-form-urlencoded | HTTP POST MIME-TYPE text/plain, application/json | Resposta |
|---|---|---|---|---|---|
| getDocumentByKey | id | id: parâmetro/valor codificado por URL na cadeia de consultas | id: parâmetro/valor codificado por URL na mensagem | id: parâmetro/valor codificado por URL na cadeia de consultas | documento JSON (texto/simples) |
| getXMLDocumentByKey | id | id: parâmetro/valor codificado por URL na cadeia de consultas | id: parâmetro/valor codificado por URL na mensagem | id: parâmetro/valor codificado por URL na cadeia de consultas | representação JSON do documento (texto/xml) |
| inserção |
id (único) doc (Documento JSON) |
id: parâmetro/valor codificado por URL na cadeia de consultas doc: parâmetro/valor codificado por URL na cadeia de consultas |
id: parâmetro/valor codificado por URL na mensagem doc: parâmetro/valor codificado por URL na mensagem |
id: parâmetro/valor codificado por URL na cadeia de consultas doc: conteúdo da mensagem POST | Contagem de atualização (texto/simples) |
| atualização |
id doc (documento JSON) |
id: parâmetro/valor codificado por URL na cadeia de consultas doc: parâmetro/valor codificado por URL na cadeia de consultas |
id: parâmetro/valor codificado por URL na mensagem doc: parâmetro/valor codificado por URL na mensagem |
id: parâmetro/valor codificado por URL na cadeia de consultas doc: conteúdo da mensagem POST | Contagem de atualização (texto/simples) |
| exclusão | id | id: parâmetro/valor codificado por URL na cadeia de consultas | id: parâmetro/valor codificado por URL na mensagem | id: parâmetro/valor codificado por URL na cadeia de consultas | Contagem de atualização (texto/simples) |
| runXMLQuery |
consulta (XQuery ou entrada para XMLQUERY) | consulta: parâmetro/valor codificado por URL na cadeia de consultas | consulta: parâmetro/valor codificado por URL na mensagem | consulta: conteúdo da mensagem POST | documento XML com resultados (texto/xml) |
Esse artigo forneceu uma introdução do JSON Universal Services, abrangendo configuração, implementação e teste do JSON Universal Services em um armazenamento JSONx com base no banco de dados de amostra do DB2.
O primeiro artigo dessa série focou na introdução do novo formato JSONx, possibilitando o armazenamento do JSON como XML no banco de dados DB2 pureXML. Também discutiu um caso de uso para o JSON e destacou os benefícios de usar pureXML para armazenar JSON.
O próximo artigo dessa série focará na criação da camada de apresentação com dispositivos Open-Social que contam com o JSONx Universal Services como backend.
| Descrição | Nome | Tamanho | Método de download |
|---|---|---|---|
| JSON Universal Services package | JSONUniversal Services.zip | 3692KB | HTTP |
Informações sobre métodos de download
Aprender
- Universal Services for pureXML using Data Web Services (Susan Malaika e Christian Pichler, developerWorks, agosto de 2008): Obtenha mais informações sobre o Universal Services para pureXML.
- Build a pureXML and JSON application, Part 1: Store and query JSON with DB2 pureXML (Nuno Job, Susan Malaika e Michael Schenker; developerWorks, outubro de 2009): Consulte o primeiro artigo dessa série e comece a se beneficiar de objetos JSON persistentes que mantêm o estado através das sessões. Armazene, gerencie e consulte o JSON com o DB2 pureXML e um simples mapeamento JSON para XML. (Parte 1 da série de três partes.)
- Build a pureXML and JSON application, Part 3: Create OpenSocial gadgets for pureXML (Han Nguyen, Andy B Smith e Mark D Weitzel; developerWorks, novembro de 2009): Definir, implementar e testar os dispositivos OpenSocial para interagir com JSON Universal Services. (Parte 3 da série de três partes.)
- IBM Data Studio: Get Started with Data Web Services (Michael L. Pauser, developerWorks, novembro de 2007): Leia uma introdução muito simples e detalhada sobre como desenvolver seu primeiro Data Web Service.
- "Industry Formats and Services with pureXML": Faça o download de uma grande variedade de exemplos gratuitamente! Cada exemplo ilustra como trabalhar com formatos de segmento de mercado baseados em XML e pureXML. Os exemplos mostram como registrar um esquema XML, como realizar a validação de documentos de instância XML, como consultar dados XML usando XQuery ou SQL/XML e muito mais.
- Data Web Services: Build Web Services the new way to access IBM database servers (Vijay Bommireddipalli, developerWorks, dezembro de 2007): Crie e personalize um Data Web Service com histórico teórico útil sobre Data Web Services, que inclui uma visão geral de arquitetura sobre Data Web Services. O artigo aborda diferentes aspectos do Data Web Services, como Segurança.
- Using industry standard data formats with WebSphere ESB and DB2 Version 9 pureXML (Mohab El-Hilaly, Andre Tost e Alaa Youssef; developerWorks, junho de 2007): Encontre um cenário que mostra como o uso de WebSphere Enterprise Service Bus e DB2 9 pureXML pode ajudar uma empresa farmacêutica a cumprir obrigações legais para apresentar dados padronizados sobre seus produtos.
- Certificação IBM XML: Descubra como se tornar um Desenvolvedor Certificado pela IBM em XML e tecnologias relacionadas.
- Biblioteca técnica de XML: Veja na developerWorks XML Zone uma grande variedade de artigos técnicos e dicas, tutoriais, padrões e Redbooks da IBM.
- Eventos técnicos e webcasts do developerWorks: Fique atualizado sobre a tecnologia por meio dessas sessões.
- Podcasts do developerWorks: Escute entrevistas e debates interessantes para desenvolvedores de software.
Obter produtos e tecnologias
- DB2 Express-C: Faça o download dessa edição da comunidade gratuita do servidor de dados do DB2.
- Versões de avaliação de produtos IBM: Faça download ou explore os testes on-line no IBM SOA Sandbox e use as ferramentas de desenvolvimento de aplicativos e produtos de middleware do DB2®, Lotus®, Rational®, Tivoli® e WebSphere®.
Discutir
- Participar do fórum de discussão.
- Fóruns de discussão da zona XML: Participe de várias discussões relacionadas a XML.
- Blogs do developerWorks: Veja esses blogs e faça parte da comunidade do developerWorks.

Michael Schenker possui mestrado em ciência da computação pela University of Applied Science, em Leipzig/Alemanha. Ele tem sete anos de experiência profissional na IBM. Durante sua carreira, Michael trabalhou em diversos produtos relacionados a banco de dados, começando como estagiário para trabalhar em DB2 Information Integration com foco em wrappers não relacionais. Ele se uniu à IBM como funcionário em tempo integral no final de 2003. Em 2006, Michael juntou-se à organização de ferramentas de banco de dados e trabalhou na funcionalidade de provedor de serviços da Web do DB2 no IBM Data Studio Developer. Ele ganhou muita experiência em SOA e tecnologias da Web durante esse tempo. Recentemente, Michael uniu-se à equipe de otimização de DB2 para z/OS, mas ainda tem interesse em SOA e tecnologias da Web em (e relacionadas a) DB2.

Susan Malaika é Membro Senior da Equipe Técnica no IBM Information Management Group (parte do IBM Software Group). Suas especialidades incluem XML, Web e bancos de dados. Ela desenvolveu padrões que suportam dados para ambientes de grade no Global Grid Forum. Além de trabalhar como desenvolvedora de software de produtos IBM, ela também trabalhou como especialista em Internet, analista de dados e editora e desenvolvedora de telas. Susan também é coautora de um livro sobre a Web e publicou artigos sobre processamento de transações e XML. Ela é membro da IBM Academy of Technology.
