Usando CICS com DB2 pureXML, Parte 2: Execute armazenamento e recuperação avançados de XML por meio dos serviços da Web CICS

Mais cenários e casos de uso

Este artigo é a segunda parte de uma série de artigos. O primeiro artigo colocou em foco como aumentar os serviços da Web CICS® com duas rotinas para propósitos gerais (manipuladores de pipeline) que suportam dois cenários para armazenar e recuperar XML em DB2(R) pureXML. Esta segunda parte apresenta dois outros cenários: um cenário de solicitação de serviço e um cenário de resposta de serviço. O cenário de solicitação de serviço mostra como um manipulador de pipeline pode ser introduzido para aprimorar melhor os serviços da Web CICS para armazenar dados XML em forma relacional ou em forma XML após extrair o XML que representa os dados de negócios da mensagem SOAP. O cenário de resposta de serviço mostra como um manipulador de pipeline customizado pode ser introduzido para publicar dados relacionais como XML e como os dados XML podem ser modificados diretamente através de SQL antes de retornar os dados em uma resposta de serviço. Este artigo também ilustra como dados XML armazenados podem ser acessados como dados relacionais através de uma visualização para posicionamento fácil em um CICS COMMAREA ou contêiner. Código de origem COBOL de amostra está incluído na seção Downloads.

Daniel Millwood, Software Engineer, I.B.M.

Daniel MillwoodDan Millwood é engenheiro de software no IBM Software Group em Hursley, onde trabalha na equipe de CICS Services and Technologies. Durante seus 15 anos na IBM, ele trabalhou 7 anos como desenvolvedor de WebSphere MQ para z/OS, depois como desenvolvedor do componente de mensagem de plataforma do WebSphere Application Server antes de passar a fazer parte da organização de desenvolvimento do CICS. Dan é apaixonado por fotografia e também adora fazer caminhadas, andar de caiaque e jogar futebol.



Susan Malaika, Senior Technical Staff Member, IBM

Susan Malaika photoSusan 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.



13/Dez/2010

Introdução

Os serviços da Web CICS permitem acessar aplicativos CICS através dos serviços da Web. Os aplicativos CICS também podem chamar os serviços da Web. CICS fornece vários manipuladores, incluindo manipuladores de aplicativo e de pipeline, para manipular as mensagens de serviços da Web recebidas e enviadas. Também é possível escrever seus próprios manipuladores. Este artigo presume que você está familiarizado com os serviços da Web CICS.

O DB2 pureXML ativa o armazenamento de XML em coleções XML (colunas). Os elementos e atributos XML individuais no XML armazenado podem ser endereçados e manipulados em programas de aplicativo como Java, COBOL ou C, por meio de XPath e SQL/XML. O XML armazenado também pode ser visualizado em formulário relacional.

Os benefícios de armazenar e recuperar XML diretamente incluem o seguinte:

  • O sistema é mais simples de projetar: nenhuma (ou pouca) formalização de dados é necessária.
  • O sistema é mais rápido para desenvolver: poucos mapeamentos entre os dados recebidos e enviados e os dados armazenados.
  • O sistema é mais rápido de executar: junções relacionais e menos retaliação XML, o que consome CPU.
  • A progressão do sistema é mais rápida: menos mudanças do banco de dados necessárias, pois contanto que o XML esteja bem formado, ele pode ser armazenado no banco de dados (e validado opcionalmente)
  • O sistema é mais fácil de entender: as estruturas de dados são consistentes através dos limites do sistema e do banco de dados.
  • O sistema faz protótipos de maneira direta: menos customização necessária e o design do banco de dados é simples
  • O sistema se integra facilmente com tecnologias da Web: as tecnologias da Web são baseadas em XML.

O DB2 pureXML armazena dados XML em formulário analisado. Assim, em muitos casos não é necessário analisar repetidamente o mesmo XML na camada intermediária, que faz uso intenso da CPU. Ao invés disto, é possível usar linguagens declarativas como XPath ou SQL/XML para manipular o XML já analisado, como mostra a Figura 1.

Figura 1. Analisar uma vez—acessar muitos com DB2 pureXML
Client and protocol sending XML on left of CICS WebSphere server, and DB2 pureXML sending XML on the right of the server

Este artigo descreve o seguinte:

Revisando os cenários

O primeiro artigo desta série, "Usando CICS com DB2 pureXM L, Parte 1: Executar armazenamento e recuperação de XML básico através de Serviços da Web CICS" apresentou dois cenários. O Cenário 1 desse artigo armazenou uma mensagem XML de serviço da Web recebida, incluindo o cabeçalho SOAP, em uma coluna DB2 XML, como mostra a Figura 2.

Figura 2. Solicitação de serviço: Usando DB2 pureXML para registrar mensagens recebidas
Exec CICS gets container into XML using pipeline handler, Exec SQL inserts into Redbook, and DB2 logs SOAP messages

Este artigo desenvolve ainda mais o Cenário 1 descrevendo os seguintes cenários:

Cenário 1A
Extrai os dados de negócios da mensagem SOAP usando SQL/XML e, em seguida, armazena o XML
Cenário 1B
Converte (fragmenta) o XML em formulário relacional usando SQL/XML e o armazena

O cenário 2 no primeiro artigo recuperou dados XML armazenados em DB2, que incluíam o cabeçalho SOAP, e os retornou em uma resposta à solicitação de serviço da Web, como mostrado na Figura 3.

Figura 3. Resposta de serviço: Usando DB2 pureXML para criar mensagens de saída
Exec CICS gets container into XML using pipeline handler, Exec SQL selects XML serialize

Este artigo desenvolve ainda mais o Cenário 2 descrevendo os seguintes cenários:

Cenário 2A
Atualiza dados XML através de um recurso de DB2 10 para z/OS
Cenário 2B
Usa SQL/XML para publicar dados relacionais como XML e retornar o XML resultante em resposta a uma solicitação de serviço da Web.

Apresentando os novos cenários

A seguir estão os novos cenários deste artigo.

Solicitação de serviço CICS
Os cenários de solicitação de serviço, cenários 1A e 1B, dão exemplos de maneiras como os dados de uma mensagem de serviço da Web podem ser acessados e manipulados usando pureXML. É fornecido o SQL que extrai os dados de negócios do corpo de uma mensagem SOAP e, em seguida, os dados de negócios em DB2 são armazenados. No cenário 1A, os dados de negócios são armazenados como XML. Também é discutida uma variação que ativa os dados armazenados como XML para serem acessados como relacionais. O cenário 1B oferece uma opção em que o XML é fragmentado para permitir que os dados sejam armazenados como relacionais.
Resposta de serviço CICS
O Cenário 2A de resposta de serviço descreve como dados XML podem ser atualizados através de um recurso do DB2 10 para z/OS. O Cenário 2B de resposta de serviço ilustra como dados relacionais podem ser retornados como XML através de um recurso do DB2 8 z/OS. Os exemplos deste artigo usam isso para construir uma mensagem de resposta de serviço da Web para ser retornada do serviço da Web.

A Figura 4 mostra como cada um dos novos cenários procede:

  • O cenário 1A processa o cenário e armazena o XML intacto em uma tabela de armazenamento XML no servidor DB2.
  • O cenário 2A recupera o XML armazenado, modifica-o sem falhas e emite uma resposta de serviço.
  • O Cenário 1B processa a solicitação de serviço e a armazena como dados relacionais no servidor DB2.
  • O Cenário 2B recupera os dados relacionais armazenados e emite uma resposta de serviço em formato XML.
Figura 4. Solicitação de serviço e fluxo de resposta
Service request and responses on left, goes through 4 different scenarios (2 input, 2 output) on its way to XML or DB2 storage

A Tabela 1 mostra um resumo de cenário para os cenários dos dois artigos. O Artigo 1 refere-se ao primeiro artigo da série. O Artigo 2 refere-se a este artigo. A versão DB2 z/OS indica a versão do DB2 que fornece o recurso para suportar o cenário.

Tabela 1. Lista de serviços da Web CICS e cenários DB2 pureXML
Artigo (Parte 1 ou Parte 2)Versão DB2 z/OSNome do cenárioDescrição
19Cenário 1: Solicitação - XML com cabeçalho SOAPArmazene o XML recebido em DB2 pureXML com cabeçalho SOAP
29Cenário 1A: Solicitação - XML modificado (Extração de dados de negócios sem cabeçalho SOAP)Armazene o XML de entrada no DB2 pureXML ao extrair os dados de negócios usando SQL/XML para remover o cabeçalho SOAP. Além disso, acesse o XML armazenado como relacional por meio de visualizações SQL/XML
29Cenário 1B: Solicitação - RelacionalArmazene o XML recebido como relacional no DB2 usando SQL/XML para fragmentar o XML
19Cenário 2: Resposta - XML com cabeçalho SOAPRecupere o XML armazenado no DB2 pureXML e retorne-o como uma resposta
210 Cenário 2A: Resposta - XML modificadoRecupere e modifique o XML armazenado no DB2 pureXML e retorne-o como uma resposta usando o recurso DB2 10 para z/OS
28 Cenário 2B: Resposta - RelacionalRecupere os dados relacionais armazenados e retorne-os como uma resposta usando SQL/XML para publicar os dados relacionais como XML

Os benefícios de usar recursos do DB2 para manipular XML incluem o seguinte:

Manipulação do XML complexo
Se os dados XML de entrada forem complicados, com estruturas aninhadas multidimensionais, o acesso aos dados usando consultas XPath poderá ser mais simples do que usar as interfaces CHANNEL e CONTAINERs que o manipulador de aplicativo fornecido pelo CICS oferece.
Abordagem de analise única
Se os dados precisarem ser persistidos no DB2, é provável que menos CPU seja usada se todas as manipulações de XML forem executadas no DB2.
Log de mensagens recebidas
Usando algumas das técnicas descritas aqui, um log consultável das mensagens recebidas é mantido, tornando mais simples controlar o que está acontecendo no sistema.

Entendendo a configuração do serviço da Web CICS

Esta seção do artigo explica a configuração do serviço da Web CICS e onde os recursos pureXML são introduzidos. Os serviços da Web CICS usam diversos recursos CICS como um URIMAP, um PIPELINE que contém um ou mais manipuladores, um recurso WEBSERVICE, etc. Se não estiver familiarizado com serviços da Web CICS, é recomendável ler materiais introdutórios sobre o assunto antes de continuar este artigo. Em particular, presume-se que você esteja familiarizado com o CICS PIPELINE e manipuladores de pipeline. Consulte a seção Recursos para conhecer os documentos adequados.

Quando uma mensagem de serviço da Web (uma mensagem SOAP) passar através de um pipeline CICS, manipuladores podem acessar ou não a mensagem e podem ou não tomar decisões com base no seu conteúdo. O CICS fornece alguns desses manipuladores para segurança, Unidades de Trabalho Distribuídas (UOWs), etc, como mostra a Figura 5.

Figura 5. Manipuladores de serviços da Web CICS
Request in goes through optional, terminal and application handlers to run business logic and reply out

Após esses manipuladores serem executados, a mensagem é passada para um programa manipulador de terminal. O manipulador de terminal é responsável por acessar a mensagem SOAP.

É possível escrever seus próprios manipuladores, como o manipulador de terminal WEBINST para propósitos gerais descrito no primeiro artigo. No entanto, o CICS fornece um manipulador SOAP que executa uma série de verificações na mensagem SOAP de entrada para garantir que é compatível com as especificações SOAP e retorna as falhas de SOAP em situações de erro. Para este artigo, use o manipulador SOAP fornecido e ganhe os benefícios que ele fornece, inclusive a capacidade de modificar o ID do usuário CICS e o ID trans segundo o qual a lógica de negócios executa.

Após o manipulador SOAP fornecido por CICS ser executado, o controle é passado para um manipulador de aplicativo. O manipulador de aplicativo normalmente converte o corpo da mensagem SOAP em estruturas de dados adequadas para uso em um programa CICS padrão e o vincula a esse programa. O CICS fornece um manipulador de aplicativo chamado DFHPITP que executa a conversão. Em vez de usar DFHPITP para converter o XML em uma estrutura COMMAREA ou um CHANNEL com CONTAINERS, crie um manipulador de aplicativo denominado PUREXML (A ou B) para inserir os dados no DB2. O manipulador de aplicativo pode, em seguida, vincular à lógica de negócios, que pode executar consultas e atualizações nos dados através de comandos SQL.

A Listagem 1 mostra um exemplo de arquivo de configuração de pipeline.

Listagem 1. Exemplo de arquivo de configuração de pipeline CICS
<?xml version="1.0" encoding="EBCDIC-CP-US"?>
  <provider_pipeline xmlns="http://www.ibm.com/software/htp/cics/pipeline">
    <service>
      <terminal_handler>
        <cics_soap_1.1_handler/>
      </terminal_handler>
    </service>
    <apphandler>PUREXMLA</apphandler>
</provider_pipeline>

Cenário 1A: Armazene dados de negócios de XML de entrada no DB2 pureXML

A tabela do DB2 para armazenar o XML é definida como mostra a Listagem 2.

Listagem 2. Definição de tabela do DB2 para armazenar XML
CREATE TABLE REDBOOK.SOAPBODY (
  ID   ROWID NOT NULL GENERATED ALWAYS,
  BODY XML)
CCSID EBCDIC
IN DATABASE REDBOOK;

O conteúdo do corpo SOAP que está incluído na mensagem de entrada, como os dados de negócios, é armazenado em formato XML na coluna do DB2 pureXML chamada BODY. Um campo ID de tipo ROWID também é incluído. Quando os dados XML forem armazenados, pode ser útil ter uma chave para os dados, de modo que se a lógica de negócios precisar acessar mais tarde o XML recebido, há uma maneira fácil de localizá-lo. O ROWID ativa esse recurso.

Quando a solicitação chegar no manipulador de aplicativo CICS, o envelope SOAP inteiro é lido do contêiner DFHREQUEST para uma variável chamada XMLDATA. Quando a mensagem SOAP estiver na memória, o SQL é usado para extrair o conteúdo do corpo da mensagem (os dados de negócios) e armazená-lo na tabela REDBOOK.SOAPBODY na coluna BODY, como mostrado na Listagem 3.

Listagem 3. SQL para armazenar dados de negócios da mensagem XML de entrada como XML (sem o cabeçalho SOAP)
EXEC SQL
  SELECT ID INTO :WS-ROWID
    FROM FINAL TABLE(
    INSERT INTO REDBOOK.SOAPBODY ( BODY )
       SELECT XMLDOCUMENT ( X.BODY )
         FROM XMLTABLE(
         XMLNAMESPACES
       ('http://www.SWITCHI.com/schemas/SWITCHIInterface' AS "datans",
        'http://schemas.xmlsoap.org/soap/envelope/' AS "soapns"),
        '$i/soapns:Envelope/soapns:Body'
        PASSING
         XMLPARSE(DOCUMENT :XMLDATA STRIP WHITESPACE) AS "i"
         COLUMNS
           "BODY" XML PATH 'datans:SWITCHOperation' ) AS X)
END-EXEC.

O DB2 gera o conteúdo da coluna ROWID quando o corpo SOAP estiver inserido na tabela. A instrução SQL seleciona o ROWID e o armazena em uma variável chamada WS-ROWID. Essa variável pode depois ser passada para qualquer lógica de negócios que precisar acessar o corpo SOAP armazenado. Poderá ser necessário aplicar a correção no APAR PM25203 para usar o ROWID dessa maneira.

Nota: O exemplo deste artigo funciona com a mensagem inteira no contêiner DFHREQUEST. Embora o CICS tenha extraído o corpo da mensagem e o fornecido em um contêiner chamado DFHWS-BODY, o DB2 não entende sozinho os dados no contêiner como XML válido. Isso porque o CICS passa através de qualquer namespace declarado no envelope SOAP da solicitação de entrada em outro contêiner chamado DFHWS-NAMESPACES. Se os dados no DFHWS-BODY se referirem a esses namespaces, é provável que um analisador XML suponha que eles estão ausentes. No caso do DB2, um erro SQL é produzido e os dados não podem ser analisados.


Variação do cenário 1A: Acessar o XML armazenado como relacional

Embora os dados armazenados no Cenário 1A possam ser acessados diretamente como XML, é possível criar também visualizações relacionais dos dados. Para isso, crie uma VIEW e mapeie as colunas da VIEW para os componentes da mensagem XML que são requeridos. No exemplo, a mensagem de solicitação SOAP de entrada contém dados associados a uma conta de cliente. Três informações são tomadas da mensagem SOAP e disponibilizadas através de uma VIEW chamada ACCVIEW: o número da conta, o tipo da conta e o saldo da conta. O administrador DB2 cria a VIEW enquanto configura o serviço da Web CICS. A Listagem 4 mostra como criar a visualização.

Listagem 4. Definição de visualização do DB2 para dados relacionais (derivada da mensagem XML de entrada)
CREATE VIEW ACCVIEW(ACCOUNTNUM, ACCOUNTTYPE, BALANCE) AS
   SELECT X.* FROM REDBOOK.SOAPBODY RED, XMLTABLE(
    XMLNAMESPACES('http://www.SWITCHI.com/schemas/SWITCHIInterface' AS "datans"),
    '$acc/datans:SWITCHOperation/datans:account_details'
    PASSING RED.BODY as "acc"
    COLUMNS
            "ACCOUNTNUM"  CHAR(8) PATH 'datans:account_number',
            "ACCOUNTTYPE" CHAR(1) PATH 'datans:account_type',
            "BALANCE"    CHAR(8) PATH 'datans:balance') AS X;

Em tempo de execução, forneça um manipulador de aplicativos que seja impulsionado do manipulador SOAP fornecido pelo CICS. O manipulador de aplicativo insere a mensagem SOAP no DB2. Em seguida, os dados podem ser acessados através da VIEW usando uma consulta SQL típica, como mostrado na Listagem 5.

Listagem 5. SQL para acessar dados XML como relacionais através da visualização
EXEC SQL
  SELECT BALANCE FROM ACCVIEW WHERE ACCOUNTNUM = '12345678'
END-EXEC.

Cenário 1B: Armazene o XML recebido como relacional no DB2 pureXML

A tabela DB2 usada no cenário 1B é mostrada na Listagem 6.

Listagem 6. Definição de tabela do DB2 para dados relacionais (derivada da mensagem XML de entrada)
CREATE TABLE REDBOOK.ACCOUNT (
  ID   ROWID NOT NULL GENERATED ALWAYS,
  ACCOUNTNUM  CHAR(8),
  ACCOUNTTYPE CHAR(1),
  BALANCE     CHAR(8))
IN DATABASE REDBOOK;

O DB2 analisa a mensagem de solicitação de entrada e determinados componentes da mensagem são extraídos e armazenados em colunas dentro da tabela. Como no Cenário 1A, quando a solicitação chegar no manipulador de aplicativo CICS, o envelope SOAP inteiro é lido do contêiner DFHREQUEST para uma variável chamada XMLDATA.

Em seguida, a chamada SQL extrai campos específicos da mensagem de entrada e os armazena na tabela REDBOOK.ACCOUNT, como mostrado na Listagem 7.

Listagem 7. SQL para armazenar mensagens XML como relacionais
EXEC SQL
  SELECT ID INTO :WS-ROWID
  FROM FINAL TABLE(
    INSERT INTO REDBOOK.ACCOUNT
         (ACCOUNTNUM, ACCOUNTTYPE, BALANCE)
       SELECT X.ACCOUNTNUM, X.ACCOUNTTYPE, X.BALANCE
         FROM XMLTABLE(
          XMLNAMESPACES
           ('http://www.SWITCHI.com/schemas/SWITCHIInterface' AS "D",
            'http://schemas.xmlsoap.org/soap/envelope/' AS "S"),
          '$i/S:Envelope/S:Body/D:SWITCHOperation/D:account_details'
          PASSING
           XMLPARSE(DOCUMENT :XMLDATA STRIP WHITESPACE) AS "i"
          COLUMNS
            "ACCOUNTNUM"  CHAR(8) PATH 'D:account_number',
            "ACCOUNTTYPE" CHAR(1) PATH 'D:account_type',
            "BALANCE"     CHAR(8) PATH 'D:balance') AS X)
END-EXEC.

Como parte da mesma chamada SQL, o valor ROWID da ROW inserida é retornado em uma variável chamada WS-ROWID. Quando a chamada SQL for executada, o valor ROWID armazenado na variável WS-ROWID é colocado em um contêiner CICS e uma chamada EXEC CICS LINK é feita para o programa que contém a lógica de negócios. O programa de lógica de negócios pode acessar os dados recém-inseridos do DB2 selecionando-os com o valor ROWID transmitido, como mostrado na Listagem 8.

Listagem 8. SQL para selecionar dados relacionais armazenados
EXEC SQL
  SELECT ACCOUNTNUM, ACCOUNTTYPE, BALANCE
  INTO :WS-ACCNUM, :WS-ACCTYPE, :WS-BALANCE
  FROM REDBOOK.ACCOUNT
  WHERE ID = :WS-ROWID
END-EXEC.

Cenário 2A: Recupere e modifique XML armazenado

No DB2 10 para z/OS é possível modificar XML diretamente usando o SQL. É possível incluir, modificar ou excluir nós XML diretamente especificando o XPath apropriado na palavra-chave XMLMODIFY. A Listagem 9 mostra como modificar o valor do account_balance.

Listagem 9. SQL para modificar dados XML armazenados
EXEC SQL
UPDATE REDBOOK.ACCOUNT set info = XMLMODIFY('
  REPLACE VALUE OF NODE /account_details/account_balance
 WITH "1000000.00"')
 WHERE ID = :WS-ROWID
END-EXEC

Com a palavra-chave XMLMODIFY é possível fazer mudanças no XML armazenado para reformatar os dados armazenados a fim de adequar a estrutura da mensagem de saída requerida.


Cenário 2B: Recupere e publique dados relacionais armazenados

O Cenário 2B mostra como criar XML que inclui dados relacionais. Para os propósitos do exemplo, crie a mesma mensagem de resposta de serviço da Web usada no Cenário 1B. O WSDL que descreve o serviço da Web é o mesmo WSDL usado no primeiro artigo sobre CICS e DB2 pureXML. O WSDL é bem simples. A mensagem de resposta contém os mesmos elementos que a mensagem de solicitação.

No exemplo do cenário 1B, a mensagem de solicitação foi fragmentada em dados relacionais e armazenada no DB2 antes de um programa de lógica de negócios ser chamado. A lógica de negócios acessou os dados relacionais armazenados da mensagem de solicitação por meio de um valor ROWID que recebeu. A lógica de negócios modificou o saldo da conta.

De volta no manipulador de aplicativo, crie um XML que inclua o saldo atualizado junto com os outros valores requeridos para a mensagem de resposta. Use o ROWID novamente para localizar os dados que serão retornados. Ao gravar um manipulador de aplicativo, o CICS espera que o contêiner DFHWS-BODY contenha o corpo da mensagem de resposta SOAP quando o manipulador de aplicativo concluir seu processamento. Portanto, é necessário gravar uma chamada SQL que crie um elemento de corpo SOAP e, dentro desse elemento, é necessário criar os dados de negócios que serão retornados.

A Listagem 10 mostra o SQL para criar o corpo SOAP de exemplo. O XML criado é colocado em uma variável chamada XMLREPLY.

Listagem 10. SQL para publicar dados relacionais como XML
EXEC SQL
  SELECT
    XMLELEMENT( NAME "soapenv:Body",
        XMLNAMESPACES
          ('http://www.SWITCHI.com/schemas/SWITCHIInterface' AS "p0",
           'http://schemas.xmlsoap.org/soap/envelope/' AS "soapenv"),
      XMLELEMENT( NAME "p0:SWITCHOperationResponse",
        XMLELEMENT( NAME "p0:account_details",
          XMLELEMENT( NAME "p0:account_number", ACC.ACCOUNTNUM),
          XMLELEMENT( NAME "p0:account_type", ACC.ACCOUNTTYPE),
          XMLELEMENT( NAME "p0:balance", ACC.BALANCE)
        )
      )
    )
    INTO :XMLREPLY
    FROM REDBOOK.ACCOUNT ACC
    WHERE ID = :WS-ROWID
END-EXEC.

Nota: Ao testar esse cenário, pode-se observar que o XML que o DB2 cria começa com uma instrução de comunicação semelhante a esta: <?xml version="1.0" encoding="IBM285"?>. O CICS não espera uma instrução de codificação no contêiner DFHWS-BODY. Portanto, quando a chamada EXEC CICS PUT CONTAINER é feita no programa COBOL PUREXMLB, para colocar o corpo SOAP da resposta no contêiner DFHWS-BODY, o código coloca os dados depois da instrução de codificação.


Testando os novos cenários

O primeiro artigo fornece instruções claras para testar um serviço da Web CICS. Quando apropriado, consulte este artigo para obter informações sobre como testar os serviços da Web criados neste artigo. Caso contrário, execute as etapas a seguir para testar os novos cenários.

Etapa 1 — Crie os arquivos de configuração de pipeline CICS

Para criar os arquivos de configuração de pipeline CICS, execute as seguintes etapas:

  1. Copie os arquivos de configuração de pipeline mostrados na Listagem 11 para o UNIX System Services (USS) como /u/user/config/AdvancedScenario1A_pipeline.xml.
Listagem 11. Arquivo de configuração de pipeline CICS para Cenário 1A
<?xml version="1.0" encoding="EBCDIC-CP-US"?>
  <provider_pipeline xmlns="http://www.ibm.com/software/htp/cics/pipeline">
    <service>
      <terminal_handler>
        <cics_soap_1.1_handler/>
      </terminal_handler>
    </service>
    <apphandler>PUREXMLA</apphandler>
</provider_pipeline>
  1. Copie os arquivos de configuração de pipeline mostrados na Listagem 12 para o UNIX System Services (USS) como /u/user/config/AdvancedScenario1B_pipeline.xml.
Listagem 12. Arquivo de configuração de pipeline CICS para Cenário 1B e Cenário 2B
<?xml version="1.0" encoding="EBCDIC-CP-US"?>
  <provider_pipeline xmlns="http://www.ibm.com/software/htp/cics/pipeline">
    <service>
      <terminal_handler>
        <cics_soap_1.1_handler/>
      </terminal_handler>
    </service>
    <apphandler>PUREXMLB</apphandler>
</provider_pipeline>

Etapa 2 — Crie e instale recursos CICS

O arquivo zip fornecido na seção Download contém o código de origem COBOL dos manipuladores de aplicativo usados neste artigo. O arquivo zip contém os manipuladores PUREXMLA e PUREXMLB. Os dois manipuladores vinculam-se a programas de lógica de negócios COBOL chamados PUREBUSA e PUREBUSB, respectivamente. Execute as seguintes etapas para criar e instalar os recursos CICS:

  1. Compile e vincule todos os quatro programas usando o compilador DB2/CICS/COBOL integrado. A JCL para compilar os programas está incluída no arquivo zip. Dica: Examine as opções de compilador e pré-compilador especificadas na JCL fornecida para garantir que as opções fornecidas sejam compatíveis com as opções que normalmente são usadas.
  2. Ligue os planos do DB2 criando e instalando os seguintes recursos CICS na sua região:
    • PIPELINE(PUREXMLA) CONFIGFILE(/u/user/config/AdvancedScenario1A_pipeline.xml) SHELF(/u/user/shelf)
    • URIMAP(PUREXMLA) USAGE(PIPELINE) PIPELINE(PUREXMLA) HOST( * ) PATH(/pureXML/AdvancedScenario1A)
    • PROGRAM(PUREXMLA) DATALOCATION(ANY)
    • PROGRAM(PUREBUSA) DATALOCATION(ANY)

    Os seguintes recursos CICS são requeridos para os Cenários 1B e 2B:

    • PIPELINE(PUREXMLB) CONFIGFILE(/u/user/config/AdvancedScenario1B_pipeline.xml) SHELF(/u/user/shelf)
    • URIMAP(PUREXMLB) USAGE(PIPELINE) PIPELINE(PUREXMLB) HOST( * ) PATH(/pureXML/AdvancedScenario1B)
    • PROGRAM(PUREXMLB) DATALOCATION(ANY)
    • PROGRAM(PUREBUSB) DATALOCATION(ANY)

    O recurso CICS TCPIPSERVICE(PUREXML) PORT(xxxxx) PROTOCOL(HTTP) é requerido para todos os novos cenários.

    O DB2 requer os seguintes recursos CICS para todos os novos cenários:

    • DB2ENTRY(PUREXML) ACCOUNTREC(TXid) AUTHTYPE(Userid) DRollback(Yes) PLAN(PUREXML)
    • DB2TRAN(PUREXML) ENTRY(PUREXML) TRANSID(CPIH)

Etapa 3 — Teste os serviços da Web

O WSDL de amostra para os serviços da Web é fornecido no arquivo zip.

  • AdvancedScenario1A.wsdl é para o Cenário 1A.
  • AdvancedScenario1B.wsdl é para os Cenários 1B e 2B.

Consulte a seção intitulada "Step 3 -- Test the Web service from Rational Developer for System z" no primeiro artigo para obter um exemplo de uso do WSDL para testar o serviço da Web, mas use os seguintes terminais:

  • http://<CICS hostname>:<CICS port>/pureXML/AdvancedScenario1A para o Cenário 1A
  • http://<CICS hostname>:<CICS port>/pureXML/AdvancedScenario1B para os Cenários 1B e 2B

Explorando outros cenários

As mensagens XML de entrada podem ser armazenadas em formatos híbridos como XML e relacional ao mesmo tempo. Também é possível construir mensagens XML de saída a partir de dados híbridos. Em outras palavras, todos os quatro novos cenários deste artigo podem ser combinados e correspondidos. Por exemplo, é possível mostrar como os formulários podem ser usados com serviços da Web CICS e DB2 pureXML. Consulte os detalhes em Recursos para saber mais sobre como usar os formulários Lotus® e pureXML.

Além disso, é possível usar o recurso DB2 pureXML juntamente com os aplicativos CICS fora do contexto dos serviços da Web CICS. Por exemplo, é possível construir XML ou transformar XML usando SQL/XML. Também é possível colocar XML em CICS COMMAREAs ou em contêineres.


Conclusão

Este artigo mostra como é possível armazenar dados XML recebidos usando um serviço da Web CICS diretamente no DB2. Esse recurso está disponível no DB2 9 para z/OS. Usando manipuladores CICS customizados é possível analisar o XML usando SQL para armazenar o XML (os dados de negócios) sem o cabeçalho SOAP, como XML ou em formulário relacional. Também é possível armazenar os dados em formato híbrido, como dados relacionais ou XML.

O artigo também mostrou como é possível publicar dados relacionais armazenados como XML e retorná-los como uma resposta a uma serviço da Web CICS. Esse recurso está disponível no DB2 8 para z/OS. É possível publicar dados híbridos (XML e relacionais) como XML. Esse recurso está disponível no DB2 9 para z/OS. O artigo também explica como é possível modificar diretamente dados XML armazenados (esse recurso está disponível no DB2 10 para z/OS) e retorná-los como uma resposta a um serviço da Web CICS.

Os benefícios gerados pelo DB2 quando este executa as manipulações XML incluem desempenho melhorado (modelo de análise única) e recursos mais amplos de manipulação de XML por meio de XPath e SQL/XML. A criação de um log consultável de mensagens de entrada é um bônus útil.

São fornecidas amostras em um arquivo complementar que pode ser transferido por download, configurado e executado, para ilustrar e recriar os cenários descritos.

Reconhecimentos

Desejamos agradecer Mengchu Cai, Arndt Eade, Ian J Mitchell e Marcus Paradies pelo suporte e contribuições.


Download

DescriçãoNomeTamanho
MVSFilesMVSFilesPart2.zip10KB

Recursos

Aprender

Obter produtos e tecnologias

  • Construa seu próximo projeto de desenvolvimento com o software de teste da IBM , disponível para download diretamente no developerWorks.

Discutir

Comentários

developerWorks: Conecte-se

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


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

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

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management
ArticleID=600627
ArticleTitle=Usando CICS com DB2 pureXML, Parte 2: Execute armazenamento e recuperação avançados de XML por meio dos serviços da Web CICS
publish-date=12132010