Desenvolvendo um Fluxo de Serviço Meet-in-the-Middle (MIM)

Usando o IBM Rational Developer para System z para criar um serviço da Web com um fluxo de serviço CICS

Os projetos de fluxo de serviço oferecem a capacidade de agregar várias transações em um único serviço. A abordagem meet-in-the-middle (MIM) — ou seja, mapear um programa existente a uma interface de serviço existente — é fácil usando projetos de serviço único. Com o ambiente do IBM® Rational® Developer para System z®, você aprenderá a mapear uma interface de serviço existente a um fluxo de serviço CICS® de modo que seja possível criar um serviço da Web usando uma abordagem meet-in-the-middle.

Jonathan C. Gellin, Advisory Software Engineer, IBM

Author photoJonathan Gellin é um engenheiro de software que dá suporte aos produtos corporativos IBM Rational. Trabalha no desenvolvimento do IBM Rational Developer para System z desde 2004.



14/Dez/2009

Introdução

Os recursos das ferramentas de serviços corporativos no IBM® Rational® Developer para System z® são usados para criar aplicativos orientados a serviço a partir de artefatos corporativos. O enfoque dos projetos de serviço único é a capacidade de criar serviços da Web que chamem uma única transação. Tais projetos permitem que os usuários modelem um fluxo que agregue várias transações em um único serviço.

Os principais cenários típicos de ativação dos serviços da Web para service-oriented architecture (SOA) são:

  • Desenvolvimento "ascendente" (que permite aplicativos corporativos existentes como serviços da Web)
  • Desenvolvimento "meet-in-the-middle" (que mapeia a uma interface de serviço existente)
  • Desenvolvimento "descendente" (que cria uma implementação para um serviço da Web)

Os projetos de fluxo de serviço oferecem a capacidade de agregar várias transações em um único serviço, provendo um recurso sofisticado para desenvolvedores que usam essa abordagem. No entanto, os projetos de fluxo de serviço sempre usam uma abordagem "descendente" para gerarem uma interface de serviço da Web. Mesmo se você usar uma interface de serviço existente para descrever a interface de serviço de um fluxo, um projeto de fluxo de serviço não gerará essa interface com exatidão. Isso se dá porque o fluxo de serviço executa no tempo de execução de fluxo de serviço IBM CICS®, que requer determinados metadados para chamar um fluxo de serviço. Assim, quando um projeto de fluxo de serviço gera uma interface de serviço da Web, a interface contém:

  • Dados de negócios, que são enviados como entrada para o fluxo e recebidos como saída do fluxo.
  • Metadados, que o tempo de execução do fluxo de serviço CICS usa para chamar o fluxo.

Por motivos de arquitetura ou política, talvez não seja possível alterar uma interface de serviço existente. Nesse caso, é necessária a abordagem meet-in-the-middle (MIM) — ou seja, quando uma interface de serviço existente (que não contém os metadados do tempo de execução do fluxo de serviço) é mapeada ao fluxo de serviço. Com tal abordagem, é possível criar uma interface de serviço da Web para um fluxo de serviço.

Pré-requisitos

Antes de tentar os métodos descritos neste artigo, o desenvolvedor deve estar familiarizado com: o IBM Rational Developer for System z, as ferramentas de serviço corporativo, o recurso fluxo de serviço CICS, os conceitos de serviços da Web e a linguagem COBOL. Para obter conhecimento nessas áreas, consulte a seção relacionada em Recursos.

Os projetos neste artigo foram desenvolvidos e testados usando o IBM Rational Developer for System z versão 7.6 em uma estação de trabalho Microsoft® Windows® XP Professional. É possível que as capturas de telas neste artigo reflitam configurações particulares do ambiente em que o artigo foi desenvolvido, o que pode ser diferente de suas próprias configurações.


Visão geral e abordagem

Neste artigo, a abordagem "meet-in-the-middle" de desenvolvimento de serviço da Web será usada para mapear o XML de uma definição de interface de serviço existente às estruturas de dados na saída COBOL gerada a partir de um projeto de fluxo de serviço. Essa abordagem pode ser útil em qualquer situação em que um fluxo de serviço tenha de ser usado com uma interface de serviço que não possa ser alterada, por exemplo, quando um fluxo que agrega vários aplicativos de terminal e não-terminal é necessário para processar um documento XML descrito por um esquema que se origina de um terceiro (um comitê de padrões ou outra ferramenta).

Como os serviços da Web gerados pelos projetos de fluxo de serviço requerem dados de negócios e metadados do tempo de execução do fluxo de serviço, um projeto de fluxo de serviço não pode usar automaticamente uma definição de interface de serviço preexistente. Este artigo mostra como usar os projetos de fluxo de serviço para gerar um programa solicitante de cliente que chame o tempo de execução do fluxo de serviço com os metadados necessários, usando os dados dos negócios informados a partir de um serviço da Web. Esta etapa requer uma quantidade pequena de codificação COBOL. A partir dessa etapa, será possível usar um projeto Web Services for CICS para concluir o mapeamento da definição de interface existente e o programa solicitante de cliente. No final, você terá uma implementação de serviço da Web retratando uma interface de serviço existente, não modificada, mapeada a um fluxo de serviço.


Fazendo download das amostras de descrição de serviço da Web e de projeto de fluxo de serviço

Na seção Downloads deste artigo, você encontrará um archive (SFFMIM.zip) contendo um projeto genérico do Eclipse, com um arquivo Web Services Description Language (WSDL) que descreve um serviço da Web que incrementa um número de entrada (SFFMIM.wsdl), e um projeto de fluxo de serviço, com um fluxo que implementa o incremento de um número de entrada.

Comece fazendo o download do archive SFFMIM.zip. Abra a perspectiva Enterprise Service Tools, no IBM Rational Developer for System z, e importe o SFFMIM.zip como um arquivo de troca de projetos (File > Import > Project Interchange).

Figura 1. O projeto de fluxo de serviço SFFMIM depois da importação do SFFMIM.zip
The SFFMIM project in the EST project explorer.

Examine a descrição do serviço da Web de amostra

Na visualização Navigator, expanda GenericProject e abra o arquivo SFFMIM.wsdl. Observe que o serviço descreve uma operação denominada IncrementOperation que usa a mensagem IncrementRequest como uma entrada e a mensagem IncrementResponse como saída. A mensagem IncrementRequest é composta de um único elemento inteiro denominado requestNumber e a mensagem IncrementResponse consiste em um único elemento inteiro denominado responseNumber.

Examine o projeto de fluxo de serviço de amostra

Na pasta Flows do projeto SFFMIM, na visualização EST Project Explorer, abra o arquivo SFFMIM.seqflow no Flow Editor. O fluxo é trivial, contendo apenas um nó de recepção, um nó de designação e um nó de resposta. A interface para o fluxo foi criada pela importação do arquivo SFFMIM.wsdl e ela é refletida pelas mensagens de entrada e de saída que são correspondentes aos nomes dos nós de recepção (IncrementOperationRequestMsg) e de resposta (IncrementOperationResponseMsg). Normalmente, um fluxo é muito mais complexo e contém vários nós de chamada de transação, além de nós de decisão. Neste exemplo, o fluxo é o mais simples possível, para que você possa se concentrar na ativação do serviço da Web MIM do fluxo. Para obter informações adicionais sobre a modelagem de fluxos, consulte a seção relacionada em Recursos.

Figura 2. SFFMIM.seqflow no editor de fluxo
A receive node, assign node, and reply node.

Ampliar Figura 2.

Clique duas vezes no nó de designação para abrir a rotina de mapeamento associada a ele. Observe que essa rotina tem uma transformação de mapeamento única que define o responseNumber da mensagem de saída como o requestNumber da mensagem de entrada + 1. Esse fluxo incrementa o requestNumber e o retorna como o responseNumber.

Figura 3. A rotina de mapeamento do nó de designação
The responseNumber is set to requestNumber + 1.

Ampliar Figura 3.

Feche o Mapping Editor e o Flow Editor. Expanda a pasta Generation do projeto de fluxo de serviço. Observe que o fluxo já foi gerado para o CICS Service Flow Runtime Level 2.0. Há um arquivo de propriedades da geração (SFFMIM_generation_props.sfgen), um programa COBOL gerado (SFFMIMP.cbl) e um arquivo de propriedades do fluxo de serviço (SFFMIMR.sfp). O programa COBOL e o arquivo de propriedades do fluxo de serviço estão prontos para a implementação no CICS. A implementação envolve a compilação do programa COBOL, a definição dos recursos CICS, a colocação do arquivo de propriedades do fluxo de serviço no diretório de recebimento de fluxo de serviço e a varredura de tal diretório. O enfoque deste artigo será o desenvolvimento do serviço da Web MIM para esse fluxo e não em etapas de implementação. Para obter informações adicionais sobre a implementação de fluxos de serviço, consulte a seção relacionada em Recursos.


Crie um programa solicitante de cliente para o fluxo de serviço

Quando um fluxo de serviço é chamado, o programa gerado pelo projeto de fluxo de serviço não é chamado diretamente. Em vez disso, o programa da interface do tempo de execução do fluxo de serviço CICS (DFHMADPL) é chamado e esse, por sua vez, assume como entrada os dados de negócios de entrada e os metadados específicos do tempo de execução do fluxo de serviço. O DFHMADPL usa os metadados para chamar o programa COBOL gerado. Para obter detalhes adicionais sobre esse processo, consulte a seção relacionada em Recursos.

Como o tempo de execução do fluxo de serviço requer metadados e dados de negócios, é necessário implementar uma etapa intermediária entre a interface do serviço da Web (que trata apenas dos dados de negócios) e a chamada do tempo de execução. Esta seção descreve a criação de um programa solicitante de cliente para o fluxo de serviço. Tal programa aceitará apenas dados de negócios como entrada e chamará o tempo de execução do fluxo de serviço com os metadados necessários estaticamente definidos. Isso elimina a necessidade de que metadados sejam incluídos em uma definição de interface de serviço da Web, ajudando a ativar a definição de interface de serviço a ser usada para chamar o fluxo de serviço.

Para criar o programa solicitante de cliente, execute as seguintes etapas:

  1. Clique com o botão direito do mouse no arquivo de propriedades da geração (SFFMIM_generation_props.sfgen) e selecione Generate > Client Requester. A ação ativará um assistente que gera um programa COBOL que chama o Service Flow Runtime para o fluxo selecionado.
Figura 4. O assistente Generate Client Requester
The wizard will create SFFMIMR.cbl.
  1. Preserve os valores padrão e pressione Finish. Isso cria o programa COBOL na pasta Generation, denominado SFFMIMR.cbl, e abre o novo programa em um editor.

Nota: O assistente gera o programa solicitante de cliente com base nos modelos customizáveis definidos nas preferências (Window > Preferences > Enterprise Service Tools > Service Flow Projects > COBOL Requester Templates). Talvez convenha customizar tais modelos.

  1. Examine o novo programa COBOL. Ele contém as estruturas de dados de pedido e reposta correspondentes aos dados de negócios do fluxo. Ele preenche um cabeçalho Service Flow Runtime com os metadados sobre o fluxo que está sendo chamado. Invoca o programa da interface DFHMADPL Service Flow Runtime que, eventualmente, invocará o programa de fluxo de serviço gerado e definirá alguma lógica de tratamento de erros depois da invocação do fluxo. Tenha cuidado aqui, pois o programa gerado não especifica como os dados de entrada são preenchidos e como os dados de saída são retornados. Estes passos devem ser codificados.
  2. Modifique o SFFMIMR.cbl para que leia os dados de entrada e grave os dados de saída em COMMAREA. Primeiro, insira a seguinte definição de dados na seção de vinculação do programa:
    01 DFHCOMMAREA.
    05 INOUTDATA PIC S9(9) COMP-5 SYNC.
    Isto define a estrutura de dados COMMAREA, que será usada para vincular os dados de entrada e saída entre o programa cliente solicitante e o mundo exterior.

    Agora substitua a linha que diz "*---->* code is required to get test input data from a source" com a seguinte declaração de movimentação:
    MOVE DFHCOMMAREA TO CSFR-REQUEST.
    Isto coloca os dados que foram enviados para COMMAREA na estrutura de dados usada para os dados de entrada do negócio.

    Finalmente, na seção que verifica por um código de retorno normal, depois da linha que contém "MOVE CSFR-DATA TO CSFR-RESPONSE", insira o seguinte código:
    MOVE CSFR-RESPONSE TO DFHCOMMAREA
    Isto coloca os dados de saída do negócio em COMMAREA, onde podem ser lidos por um programa externo.

Nesta seção, você criou um programa cliente solicitante para o fluxo chamado SFFMIMR. Este programa tem uma interface COMMAREA. Ele aceita os dados de entrada de negócio do serviço como entrada, preenche os metadados em tempo de execução do fluxo de serviço necessário, invoca o fluxo de serviço de exemplo, e retorna os dados de saída do negócio do serviço como saída. O programa cliente solicitante está agora pronto para compilação e implementação no CICS. Para sua conveniência, o código fonte do programa cliente solicitante completo (SFFMIMR.cbl) está disponível na seção Downloads. Usando este programa cliente solicitante, é possível agora completar o desenvolvimento de um serviço Web para este fluxo de serviço.


Desenvolver um serviço Web MIM para o fluxo de serviço

Nesta seção, você criará um projeto de serviço único que gerará artefatos de serviço Web para o CICS, bem como um programa conversor que mapeia dados entre a carga útil do serviço Web XML e as estruturas de dados de entrada e saída do COBOL no programa cliente solicitante que foi gerado na seção anterior.

Para habilitar o serviço Web, execute as seguintes etapas:

  1. Na perspectiva Enterprise Service Tools, crie um novo Web Services for CICS Project (File > New > Web Services for CICS Project). Na primeira página do assistente, escolha um nome do projeto de SFFMIM_CICSWS, um cenário de desenvolvimento de Map an Existing Service Interface (meet-in-middle), um modo de aplicação de Service Provider e um tipo de conversão de Compiled XML Conversion. Pressione Avançar.
Figura 5. Assistente New Web services for CICS project
The wizard will create the SFFMIM_CICSWS project.

Na segunda página do assistente, selecione o arquivo de definição da interface externa (SFFMIM.wsdl) e o programa cliente solicitante (SFFMIMR.cbl) para serem importados como arquivos de origem. Pressione Concluir.

Figura 6. Assistente New Web services for CICS project, segunda parte
The wizard imports SFFMIM.wsdl and SFFMIMR.cbl.
  1. Selecione o novo projeto, clique nele com o botão direito do mouse e selecione Create mappings.
Figura 7. Iniciar o assistente Create mappings
The create mappings context menu item.

Na primeira página do assistente, selecione um tipo de operação de Request-response. Pressione Avançar.

Figura 8. Assistente Create mappings
The operation type is request-response.

Na segunda página do assistente, selecione SFFMIM.wsdl como o XML fonte e o SFFMIMR.cbl como o alvo de linguagem para a solicitação da operação de serviço Web. Pressione Avançar.

Figura 9. Assistente Create mappings - solicitação
SFFMIM.wsdl is source and SFFMIMR.cbl is target.

Na terceira página do assistente, escolha a mensagem e a estrutura de dados correspondente para a solicitação da operação de serviço Web. Escolha IncrementRequest como o elemento XML fonte para a definição do serviço Web e CSFR-REQUEST como a estrutura de linguagem alvo. Pressione Avançar.

Figura 10. Assistente Create mappings – solicitação, parte dois
The source element and target structure.

Na quarta página do assistente, aceite os padrões e pressione Avançar.

Figura 11. Assistente Create mappings – solicitação, parte três
The request mapping file.

Na quinta página do assistente, selecione SFFMIMR.cbl como fonte da linguagem e SFFMIM.wsdl como o XML alvo para a resposta da operação do serviço Web. Pressione Avançar.

Figura 12. Assistente Create mappings – resposta
The SFFMIMR.cbl is source and SFFMIM.wsdl is target.

Na sexta página do assistente, escolha a estrutura de dados e mensagem correspondente para a resposta da operação de serviço Web. Escolha CSFR-RESPONSE como a estrutura de linguagem fonte e IncrementResponse como o elemento XLM alvo da definição de serviço Web. Pressione Avançar.

Figura 13. Assistente Create mappings – resposta, parte dois
The source structure and target element.

Na sétima página do assistente, aceite os padrões e pressione Concluir.

Figura 14. Assistente Create mappings – resposta, parte três
The response mapping file.

Os arquivos chamados request.mapping e response.mapping que contêm fontes e alvos especificados que serão criados e abertos no Editor de mapeamento.

  1. Agora, o mapeamento de solicitação será definido. Em request.mapping, arraste o elemento requestNumber do código fonte IncrementRequest para o elemento REQUESTNUMBER do código alvo CSFR-REQUEST. Isto mapeia a fonte da solicitação XML para a estrutura de dados COBOL alvo. Salve e feche o arquivo.
Figura 15. Definindo o mapeamento de solicitação no editor de mapeamento
The request number is mapped from XML to COBOL.

Visão maior da Figura 15.

  1. Novamente, você continuará a definir o mapeamento de resposta. Em Response.mapping, arraste o elemento RESPONSENUMBER do código fonte CSFR-RESPONSE para o elemento responseNumber do código alvo IncrementResponse. Isto mapeia a estrutura de dados COBOL fonte para a resposta XML alvo. Salve e feche o arquivo.
Figura 16. Definindo o mapeamento de resposta no editor de mapeamento
The response number is mapped from COBOL to XML.

Visão maior da Figura 16.

  1. Agora você está pronto para gerar os recursos dos serviços Web e o programa conversor em COBOL. Clique com o botão direito do mouse no projeto SFFMIM_CICSWS e selecione Generate Web Services for CICS resources. Isto iniciará outro assistente. Na primeira página do assistente, verifique se os arquivos de mapeamento de solicitação e de resposta estão corretos e pressione Avançar.
Figura 17. Assistente de geração de Web services for CICS
The request and response mapping files.

Na segunda página do assistente, selecione SFFMIM como prefixo do nome do programa conversor e SFFMIMR (o cliente solicitante) como o nome do programa de serviço. Pressione Avançar.

Figura 18. Assistente de geração de Web services for CICS, parte dois
The XML converters options.

Na terceira página do assistente, selecione SFFMIM como o nome do arquivo WSBind e SFFMIM como o nome do arquivo de log. Verifique se a interface do programa é COMMAREA, uma vez que SFFMIMR foi definido para ter uma interface COMMAREA. Aceite os valores padrão para o restante do assistente pressionandoConcluir.

Figura 19. Assistente de geração de Web services for CICS generation, parte três
The WSBind options.

Na pasta Targets, note que SFFMIM.wsbind e SFFMIMD.cbl, bem como um arquivo de log, foram criados. SFFMIM.wsbind é o artefato CICS associado ao serviço Web CICS, e SFFMIMD.cbl é o programa COBOL conversor que mapeia os dados entre a carga útil do serviço Web XLM e as estruturas de dados COBOL no programa SFFMIMR.

Nesta seção, foi usado um projeto de serviço único para habilitar um serviço Web de conexão intermediária que invoca um fluxo de serviço simples. O projeto de serviço único completo (SFFMIM_CICSWS.zip) está disponível na seção Downloads. Ao criar um projeto, criar mapeamentos e executar o assistente de geração, foram produzidos artefatos que habilitarão o acesso ao fluxo de serviço usando uma definição de interface de serviço existente. Só o que falta é compilar o programa conversor em COBOL, implementar o SFFMIM.wsbind para um pipeline CICS e definir os vários recursos do CICS. Estes passos de implementação não são abordados neste artigo. Para obter mais informações sobre a implementação de serviços Web, consulte a seção de recursos relacionada.


Conclusão

Seguindo a abordagem acima, é possível completar com sucesso a habilitação de serviço Web de um fluxo de serviço com uma definição de interface de serviço existente usando ferramentas de serviço empresariais no Rational Developer for System z. Uma vez que a geração existente de estilo "bottom-up" de artefatos de serviços Web em projetos de fluxo de serviço inclui alguns metadados em tempo de execução do fluxo de serviço, não é adequada para ser usada com uma definição de interface de serviço existente. Ao invés disso, foi criado um cliente solicitante que invoca o fluxo e trata estaticamente as necessidades de metadados da função em tempo de execução do fluxo de serviço, usando um projeto de serviço único de conexão intermediária para gerar artefatos de serviço Web, além de um programa que faz o mapeamento entre a carga útil XML do serviço web e as estruturas de linguagem do cliente solicitante.


Downloads

DescriçãoNomeTamanho
Service Flow Project and interface definitionSFFMIM.zip15KB
Client requester Program for Service FlowSFFMIMR.zip24KB
Web Services for CICS ProjectSFFMIM_CICSWS.zip2KB

Recursos

Aprender

Obter produtos e tecnologias

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=Rational
ArticleID=456349
ArticleTitle=Desenvolvendo um Fluxo de Serviço Meet-in-the-Middle (MIM)
publish-date=12142009