Usando CICS com DB2 pureXML

Cenários e casos de uso

Este artigo fornece uma introdução ao uso de DB2® pureXML® com aplicativos CICS® escritos em Common Business Oriented Language (COBOL). O XML está desempenhando um papel cada vez mais importante em aplicativos CICS. Por isso, a necessidade de armazenar e consultar XML em aplicativos CICS está aumentando. Este artigo descreve dois cenários para o uso de CICS com DB2 pureXML. O primeiro cenário mostra como armazenar mensagens XML de entrada do serviço da Web em DB2 pureXML sem primeiro analisar as mensagens em CICS. O segundo mostra como um aplicativo CICS pode recuperar dados XML do DB2 e transmiti-los por meio de um serviço da Web. O artigo oferece um código de origem de exemplo que pode ser baixado.

Scott Clee, CICS Test Architect, IBM

Scott Clee é o arquiteto de testes do CICS da IBM no Reino Unido. Ele arquiteta freneticamente a face de teste buscando novas formas para promover técnicas, processos e tecnologia de testes. Suas áreas de especialidade incluem CICS, Java, Common Business Oriented Language (COBOL), Linux e testes. Ele é formado em Matemática e Computação pela University of Bath, Reino Unido.



Susan Malaika, Senior Technical Staff Member, IBM

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.



06/Mai/2010

Introdução ao CICS e pureXML

O suporte aos serviços da Web do CICS foi disponibilizado no CICS TS V3.1. Esse recurso possibilita que aplicativos CICS sejam solicitantes de serviços, provedores de serviços ou ambos, usando um transporte HTTP ou um transporte WebSphere® MQ. As mensagens dos serviços da Web são geralmente em XML e frequentemente incorporam cabeçalhos SOAP, de forma que este artigo refere-se a elas como mensagens SOAP. Para obter mais informações sobre o suporte aos serviços da Web CICS, consulte os links apropriados na seção Recursos ao final deste artigo.

O

DB2 9.1 para z/OS® acrescentou um suporte, chamado pureXML, ao tipo de dados XML. Esse suporte permite que dados XML sejam armazenados e indexados nativamente. O suporte nativo ao XML significa que o XML é analisado uma vez quando é armazenado. Os índices XML são mantidos e fornecem acesso rápido ao XML armazenado por meio de consultas XPath e SQL/XML. Além disso, no DB2 10.1 (disponível em beta na época da publicação desse artigo), o XML armazenado também pode ser atualizado por XPath. Para obter mais informações sobre o DB2 pureXML, consulte os links apropriados na seção Recursos ao final deste artigo.

Este artigo mostra como usar o suporte aos serviços da Web CICS para armazenar e recuperar mensagens SOAP usando CICS e DB2 pureXML. Os cenários fornecem uma descrição básica da configuração e implementação necessárias para estabelecer uma conexão de ponta a ponta entre serviços da Web CICS e um backend DB2 pureXML. O código de exemplo é fornecido na seção Download. O código de origem de exemplo é escrito em COBOL, mas é muito simples convertê-lo para as linguagens de programação PL/I ou C.

Introdução aos dois cenários

Os dois cenários compartilham a mesma região CICS, que está executando o CICS TS 4.1. Os dados XML são armazenados em uma tabela DB2 9.1 que contém uma única coluna do tipo XML. A Listagem 1 contém o código SQL para criar essa tabela.

Listagem 1. Criar tabela com uma única coluna do tipo XML
CREATE TABLE REDBOOK.PUREXML (SOAP XML) CCSID EBCDIC IN DATABASE REDBOOK;

O código de exemplo na seção Download contém o SQL completo usado para criar o banco de dados STOGROUP, TABLESPACE e TABLE.

O primeiro cenário mostra como um programa CICS, escrito em COBOL, chamado WEBINST (um manipulador do pipeline e um provedor de serviços) insere uma mensagem XML recebida de um serviço da Web em uma coluna DB2 pureXML. O segundo cenário mostra como um programa CICS, escrito em COBOL, chamado WEBSLCT (também um manipulador do pipeline e um provedor de serviços) recupera o XML de uma coluna DB2 pureXML e o retorna como resposta a uma chamada do serviço da Web.

Cenário 1: Armazenando dados de entrada por meio de serviços da Web CICS

As etapas deste cenário mostram como configurar sua região CICS para aceitar um pedido de entrada do serviço da Web e armazenar a carga útil SOAP em DB2. A fim de simplificar o exemplo e manter o foco na mecânica da configuração do serviço da Web, a mensagem de entrada é retornada como mensagem de saída do serviço da Web.

Em vez de usar o manipulador de pipeline fornecido pelo CICS (DFHWS2LS0), que converte os dados SOAP (o XML) em estruturas de linguagem binária, este cenário usa um programa de manipulador de pipeline customizado (chamado WEBINST) para receber a mensagem SOAP e inseri-la diretamente no DB2. Isso aprimora o desempenho eliminando a necessidade de o CICS analisar o XML.

Etapa 1 — Criar um arquivo de configuração do pipeline CICS

Copie o arquivo de configuração do pipeline mostrado na Listagem 2 para UNIX® System Services (USS) como /u/user/config/insert_pipeline.xml. Esse arquivo de configuração notifica o CICS de que o programa de manipulador de pipeline customizado, chamado WEBINST, será usado para manipular pedidos do serviço da Web.

Listagem 2. Arquivo de configuração de pipeline do CICS
<?xml version="1.0" encoding="EBCDIC-CP-US"?>
<provider_pipeline xmlns="http://www.ibm.com/software/htp/cics/pipeline">
  <service>
    <terminal_handler>
      <handler>
        <program>WEBINST</program>
        <handler_parameter_list/>
      </handler>
    </terminal_handler>
  </service>
</provider_pipeline>

Etapa 2 — Criar e instalar recursos do CICS

Crie e instale os seguintes recursos do CICS na sua região:

  • PIPELINE(WEBINST) CONFIGFILE(/u/user/config/insert_pipeline.xml) SHELF(/u/user/shelf)
  • URIMAP(WEBINST) USAGE(PIPELINE) PIPELINE(WEBINST) HOST( * ) PATH(/pureXML/insert)
  • PROGRAM(WEBINST) DATALOCATION(ANY)
  • TCPIPSERVICE(PUREXML) PORT(xxxxx) PROTOCOL(HTTP)

Os recursos a seguir são exigidos pelo DB2 e também podem ser compartilhados pelo programa WEBSLCT descrito no Cenário 2 deste artigo.

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

Copie o programa em COBOL mostrado na Listagem 3 para z/OS e compile-o usando o compilador integrado DB2/CICS/COBOL. O código de exemplo na seção Download contém uma tarefa de compilação de exemplo.

Listagem 3. Programa em COBOL
******************************************************************
 IDENTIFICATION DIVISION.
 PROGRAM-ID. WEBINST.
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
*
 DATA DIVISION.
*
 WORKING-STORAGE SECTION.
*
 01  WSRESP    PIC S9(8)   COMP VALUE 0.
 01  WSRESP2   PIC S9(8)   COMP VALUE 0.
 01  WSFLENGTH PIC S9(8)   COMP VALUE 1024.
 01  XMLDATA   PIC X(1024) VALUE SPACES.

     EXEC SQL INCLUDE SQLCA END-EXEC.

 LINKAGE SECTION.

 PROCEDURE DIVISION.

 MAINLINE SECTION.

* Get the SOAP data

     EXEC CICS GET CONTAINER('DFHREQUEST')
         INTO(XMLDATA)
         FLENGTH(WSFLENGTH)
         RESP(WSRESP)
         RESP2(WSRESP2)
         END-EXEC.

     EXEC SQL
         INSERT INTO REDBOOK.PUREXML
                   ( SOAP )
            VALUES ( :XMLDATA )
     END-EXEC

* Respond with the original XML data by deleting DFHREQUEST
* container and returning DFHRESPONSE container

     EXEC CICS DELETE CONTAINER('DFHREQUEST') END-EXEC.

     EXEC CICS PUT CONTAINER('DFHRESPONSE')
         FROM(XMLDATA)
         RESP(WSRESP)
         RESP2(WSRESP2)
         END-EXEC.

* Exit program

     EXEC CICS RETURN END-EXEC.

 MAINLINE-EXIT.
     EXIT.
*----------------------------------------------------------------*

Etapa 3 — Teste o serviço da Web do Rational Developer para System z

Crie um projeto em um IDE baseado em Eclipse (por exemplo, Rational® Developer para System z®) e importe o arquivo SWITCH.wsdl do código de exemplo para o seu projeto.

Clique com o botão direito do mouse no arquivo WSDL de exemplo e selecione Web Services > Test with Web Services Explorer, como mostra a Figura 1.

Figura 1. Opção Test with Web Services Explorer
Screenshot with right-click on the WSDL and selection path of Web Services > Test with Web Services Explorer.

Na caixa de diálogo Endpoints (Figura 2), atualize o URI para que aponte para a sua imagem do z/OS usando o serviço de TCP/IP especificado no recurso TCPIPSERVICE do CICS e clique em Go.

Figura 2. Adicione um novo Terminal
Screenshot of Endpoints dialog with updated URI definition.

Insira dados de teste nos campos do formulário Invoke a WSDL Operation (Figura 3) e clique em Go.

Figura 3. Insira dados de teste para gerar uma mensagem SOAP
Input Message Details

O Eclipse gera uma mensagem SOAP com base nos dados inseridos no formulário e a envia para o CICS. O CICS transmite o SOAP para o manipulador de pipeline customizado WEBINST que você criou na Etapa 1. O WEBINST insere os dados na coluna XML da tabela DB2 chamada REDBOOK.PUREXML. O aplicativo WEBINST também retorna a mensagem SOAP original como resposta, conforme é mostrado na captura de tela do Web Services Explorer na Figura 4.

Figura 4. Mensagens SOAP de Pedido e Resposta
Screenshot of Status window showing the SOAP Request and Response messages, which are the same

Etapa 4 — Mostrar que os dados foram realmente armazenados no banco de dados

Esta etapa final comprova que os dados foram inseridos na tabela DB2. A partir de uma ferramenta como DB2 SPUFI, execute a instrução SQL mostrada na Listagem 4.

Listagem 4. Instrução SQL para mostrar os dados armazenados no banco de dados
SELECT * FROM REDBOOK.PUREXML

A Listagem 5 mostra os dados DB2 retornados pela instrução SQL acima.

Listagem 5. Dados retornados da instrução SQL
---------+---------+---------+---------+---------+---------+---------+---------+
          SELECT * FROM REDBOOK.PUREXML;                                00010000
---------+---------+---------+---------+---------+---------+---------+---------+
....
---------+---------+---------+---------+---------+---------+---------+---------+
<?xml version="1.0" encoding="IBM285"?><soapenv:Envelope xmlns:soapenv="http://s
DSNT400I SQLCODE = 000,  SUCCESSFUL EXECUTION
DSNT418I SQLSTATE   = 01004 SQLSTATE RETURN CODE
DSNT415I SQLERRP    = DSN SQL PROCEDURE DETECTING ERROR
DSNT416I SQLERRD    = 0 0  0  -1  0  0 SQL DIAGNOSTIC INFORMATION
DSNT416I SQLERRD    = X'00000000'  X'00000000'  X'00000000'  X'FFFFFFFF'
         X'00000000'  X'00000000' SQL DIAGNOSTIC INFORMATION
DSNT417I SQLWARN0-5 = W,W,,,, SQL WARNINGS
DSNT417I SQLWARN6-A = ,,,,   SQL WARNINGS
DSNE610I NUMBER OF ROWS DISPLAYED IS 1
DSNE612I DATA FOR COLUMN HEADER .... COLUMN NUMBER 1 WAS TRUNCATED
DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 100
---------+---------+---------+---------+---------+---------+---------+---------+
---------+---------+---------+---------+---------+---------+---------+---------+
DSNE617I COMMIT PERFORMED, SQLCODE IS 0
DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 0
---------+---------+---------+---------+---------+---------+---------+---------+
DSNE601I SQL STATEMENTS ASSUMED TO BE BETWEEN COLUMNS 1 AND 72
DSNE620I NUMBER OF SQL STATEMENTS PROCESSED IS 1
DSNE621I NUMBER OF INPUT RECORDS READ IS 1
DSNE622I NUMBER OF OUTPUT RECORDS WRITTEN IS 26
********************************************************** Bottom of Data ******

Observe a declaração XML no início dos dados. Ela afirma que o XML é do tipo codificação IBM285 (UK EBCDIC). A importância disso é descrita em mais detalhes no Cenário 2.

Cenário 2: Consultando dados pureXML e retornando serviços da Web CICS

As etapas desse cenário mostram como criar um programa CICS em COBOL que age como manipulador de pipeline e provedor de serviços a fim de recuperar o XML de uma coluna DB2 pureXML, e o retorna como resposta a uma chamada do serviço da Web.

Etapa 1 — Criar um arquivo de configuração do pipeline CICS

Copie o arquivo de configuração do pipeline CICS mostrado na Listagem 6 para Unix System Services (USS) como /u/user/config/select_pipeline.xml. Esse arquivo de configuração notifica o CICS de que o programa de manipulador de pipeline customizado, chamado WEBSLCT, será usado para manipular pedidos do serviço da Web.

Listagem 6. Arquivo de configuração de pipeline do CICS
<?xml version="1.0" encoding="EBCDIC-CP-US"?>
<provider_pipeline xmlns="http://www.ibm.com/software/htp/cics/pipeline">
  <service>
    <terminal_handler>
      <handler>
        <program>WEBSLCT</program>
        <handler_parameter_list/>
      </handler>
    </terminal_handler>
  </service>
</provider_pipeline>

Etapa 2 — Criar e instalar recursos do CICS

Crie e instale os seguintes recursos na sua região CICS:

  • PIPELINE(WEBSLCT) CONFIGFILE(/u/user/config/select_pipeline.xml) SHELF(/u/user/shelf)
  • URIMAP(WEBSLCT) USAGE(PIPELINE) PIPELINE(WEBSLCT) HOST(*) PATH(/pureXML/select)
  • PROGRAM(WEBSLCT) DATALOCATION(ANY)

Para esse cenário, é possível usar novamente os recursos TCPIPSERVICE, DB2ENTRY e DB2TRAN que você definiu para WEBINST no Cenário 1.

Copie o programa em COBOL mostrado na Listagem 7 para z/OS e compile-o usando o compilador integrado DB2/CICS/COBOL. O código de exemplo na seção Download contém uma tarefa de compilação de exemplo.

Listagem 7. Programa em COBOL
******************************************************************
 IDENTIFICATION DIVISION.
 PROGRAM-ID. WEBSLCT.
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
*
 DATA DIVISION.
*
 WORKING-STORAGE SECTION.
*
 01  WSRESP    PIC S9(8)   COMP VALUE 0.
 01  WSRESP2   PIC S9(8)   COMP VALUE 0.
 01  WSFLENGTH PIC S9(8)   COMP VALUE 1024.
 01  XMLDATA   PIC X(1024) VALUE SPACES.

     EXEC SQL INCLUDE SQLCA END-EXEC.

 LINKAGE SECTION.

 PROCEDURE DIVISION.

 MAINLINE SECTION.

* Get DB2 data

     EXEC SQL
         SELECT XMLSERIALIZE(SOAP AS CLOB)
         INTO :XMLDATA
         FROM REDBOOK.PUREXML
     END-EXEC.

* Respond with the XML data by deleting DFHREQUEST
* container and returning DFHRESPONSE container

     EXEC CICS DELETE CONTAINER('DFHREQUEST') END-EXEC.

     EXEC CICS PUT CONTAINER('DFHRESPONSE')
         FROM(XMLDATA)
         FLENGTH(WSFLENGTH)
         RESP(WSRESP)
         RESP2(WSRESP2)
     END-EXEC.

* Exit program

     EXEC CICS RETURN END-EXEC.

 MAINLINE-EXIT.
     EXIT.
*----------------------------------------------------------------*

Observe que a função XMLSERIALIZE é usada na instrução SQL para SELECT. Isso é feito para que a declaração XML não seja adicionada ao início da carga útil de XML que é retornada. Se você usar SELECT * ou SELECT SOAP sem XMLSERIALIZE, o XML retornado teria uma declaração XML no início. A declaração solicitaria que o XML fosse codificado na página de códigos local do sistema CICS. Essa página de códigos local geralmente seria umas das páginas de código EBCDIC. Em alguns casos, isso pode fazer com que o aplicativo que esteja recebendo o XML o rejeite porque ele não suporta a página de códigos EBCDIC.

Etapa 3 — Testar o serviço da Web a partir do seu navegador

Aponte seu navegador para a URL do serviço da Web WEBINST. Por exemplo, no caso usado para construir este cenário, a URL seria: http://winmvsa1.hursley.ibm.com:12345/pureXML/select.

A mensagem SOAP inserida pelo programa WEBINST no Cenário 1 é recuperada e exibida no seu navegador, como mostra a Figura 5.

Figura 5. Mensagem SOAP inserida pelo programa WEBINST
Screenshot of a Firefox browser displaying the XML SOAP message that was inserted by the WEBINST program

Outros cenários

Existem muitas variações possíveis para os exemplos ilustrados pelos dois cenários descritos neste artigo. Exemplos incluem:

  • Modificar o XML armazenado em DB2 usando a atualização SQL XML em resposta a uma solicitação; por exemplo, uma alteração de endereço
  • Remover uma porção do XML usando SQL XMLTABLE antes de armazená-lo; por exemplo, por razões de segurança
  • Converter o XML em colunas relacionais usando SQL XMLTABLE, além de armazenar os dados como XML ou como uma alternativa

Esses cenários podem suportar diversos aplicativos e serviços, como log de aplicativos ou aplicativos baseados em formulários (por exemplo, Formulários XHTML, XFORMS ou Lotus).

Também é possível proteger os serviços da Web CICS. A seção Recursos ao final deste artigo fornece um link para obter detalhes sobre este tópico.

Conclusões e panorama

Este artigo demonstrou as etapas básicas envolvidas na inserção e recuperação de conteúdo XML no DB2 pureXML a partir de um aplicativo CICS em COBOL que é chamado por meio de serviços da Web CICS. A inserção e recuperação são realizadas sem que seja necessário analisar ou construir os dados XML no aplicativo CICS. A mensagem XML de entrada é armazenada diretamente no DB2. A mensagem XML de saída é criada na consulta dos dados XML em DB2. Um serviço da Web CICS que usa DB2 pureXML para seu armazenamento pode facilmente torna-se parte de um aplicativo distribuído maior, por exemplo, um aplicativo de formulário XML ou aplicativo para transmissão de mensagens. O banco de dados pureXML também pode formar uma auditora consultável ou log de aplicativo para mensagens XML de entrada e de saída dos Serviços da Web CICS.

Agradecimentos

Agradecemos a Maj-Britt Risager (e a seus colegas) e a Lars Andersen Hylleberg (e a seus colegas) por revisar este artigo e fornecer seu feedback.


Download

DescriçãoNomeTamanho
Sample codeMVSFiles.zip11KB

Recursos

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=487861
ArticleTitle=Usando CICS com DB2 pureXML
publish-date=05062010