Uma abordagem prática à integração de JMS e IBM Business Process Manager

Neste artigo, aprenderemos a implementar um Agente Oculto (UCA) iniciado por um Serviço de Mensagens Java™ (JMS) com o IBM Business Process Manager V7.5 para permitir o envio de mensagens JMS diretamente para o Business Process Manager Event Manager sem configuração customizada. Essa abordagem fornece um modo elegante de implementar um método assíncrono de chamar um processo de negócios no Process Center.

Sharad Chandra, Senior WebSphere Consultant, IBM

Author photoSharad Chandra é consultor senior no IBM PartnerWorld para WebSphere no laboratório de software da IBM Índia. Ele tem conhecimento na área de desenvolvimento de soluções com o WebSphere Process Server, WebSphere Lombardi e o conjunto SOA de produtos. Em seu cargo atual, Sharad esteve envolvido em vários trabalhos críticos que incluíram a implementação de infraestrutura de WebSphere escalável e altamente disponível, desenvolvimento de solução, migração, ajuste de desempenho e resolução de problemas.



Sateesh Balakrishnan, IT Specialist, IBM

Photo of Sateesh BalakrishnanSateesh Balakrishnan é IT Specialist do IBM Software Services for WebSphere (ISSW). Ele tem mais de 10 anos de experiência e atualmente trabalha com BPM e BRMS, com especialização em WebSphere Lombardi e WebSphere ILOG. Em sua designação anterior no ISSW, ele trabalhou com infraestrutura de aplicativos, com foco aprofundado em WebSphere Application Server, migrações de aplicativo J2EE e resolução de problemas e ajuste de desempenho do WebSphere Application Server. Ele trabalhou em vários cargos na IBM, incluindo design e desenvolvimento de soluções J2EE. Seus atuais interesses são sistemas BPM e BRMS.



26/Jul/2012

Introdução

O Serviço de Mensagens Java™ (JMS) é um sistema de mensagens que permite estilos de programação assíncrona para aplicativos Java e também pode ser usado para integrar plataformas heterogêneas. Por exemplo, para integrar um aplicativo de terceiro com o IBM Business Process Manager V7.5, a metodologia de implementação normal seria criar um provedor JMS (barramento de integração de serviços, factory de conexão da fila JMS, fila, e assim por diante) no servidor de aplicativos e depois criar um serviço de integração JMS no Business Process Manager para se conectar ao provedor configurado para enviar ou recuperar a mensagem. Este artigo apresenta um cenário de integração com o Business Process Manager V7.5 usando JMS ao explorar a infraestrutura do sistema de mensagens existente e o gerenciador de eventos do servidor de processos. Embora esse seja um padrão de implementação relativamente simples, ele fornece a base para o desenvolvimento de soluções mais complexas.

O gerenciador de eventos do servidor de processos responde a eventos externos. O gerenciador de eventos envia para filas as mensagens recebidas e aciona o UCA apropriado. A Figura 1 mostra como o gerenciador de eventos recebe e processa as solicitações recebidas. O gerenciador de eventos usa o UCA para localizar o serviço que está associado ao evento. Assim, se você quiser chamar um serviço quando um evento de mensagem recebida for recebido ou em resultado de um evento que ocorre em base regular, crie um UCA.

Figura 1. Execução do gerenciador de eventos
Execução do gerenciador de eventos

A função do UCA

O UCA cria uma ponte entre os sistemas externos e as definições de processo de negócios (BPDs). É possível gerenciar comunicação de entrada e de saída com os sistemas externos usando UCAs. O UCA monitora eventos de sistemas externos por meio de uma mensagem ou planejamento específico. Se quiser postar uma mensagem para o listener JMS, o gerenciador de eventos tem uma estrutura da mensagem XML definida que ele deve receber de um sistema externo. O UCA é responsável por disparar um evento de mensagem de início ou um evento de mensagem intermediário contido em uma BPD.

As seguintes filas estão associadas a um UCA:

  • Fila assíncrona: Permite que tarefas do gerenciador de eventos sejam executadas ao mesmo tempo.
  • SYNC_QUEUE_1: Força uma tarefa a terminar antes que a próxima possa iniciar. Por padrão, três filas síncronas estão disponíveis.
  • SYNC_QUEUE_2: Força uma tarefa a terminar antes que a próxima possa iniciar. Por padrão, três filas síncronas estão disponíveis.
  • SYNC_QUEUE_3: Força uma tarefa a terminar antes que a próxima possa iniciar.

Por padrão, três filas síncronas estão disponíveis. Todas essas filas são inicializadas no momento da inicialização do servidor.

Etapa 1. Criar um processo

O aplicativo de processo usado neste artigo é um serviço humano simples implementado como Coach, conforme mostrado na Figura 2, que exibe os dados recebidos por meio de um evento de mensagem configurado para interagir com o UCA.

Figura 2. Coach para exibir os dados recebidos
Coach para exibir os dados recebidos

A Figura 3 mostra os dados de entrada que o processo recebe e publica no Coach.

Figura 3. Dados de entrada para o processo
Dados de entrada para o processo

Etapa 2. Criar um serviço de manipulador de eventos

Um serviço manipulador de eventos nada mais é que um serviço do sistema geral, que é o coração de um UCA. Esse serviço recebe dados de um estímulo externo e os envia para um processo BPD por meio do UCA. É necessário definir e mapear os dados de saída para os dados de entrada de forma explícita para esse serviço, caso contrário, os dados de saída serão nulos. Os dados definidos para esse serviço devem ser idênticos aos dados de entrada exigidos pelo processo BPD. Para definir o serviço, execute as seguintes etapas:

  1. Selecione General System Service, como mostrado na Figura 4, e dê ao serviço o nome de ComplexUCAService.
    Figura 4. Criar um serviço de UCA
    Criar um serviço de UCA
  2. Defina os dados de entrada e os dados de saída exigidos pelo processo BPD usando a guia Variável , como mostrado na Figura 5.
    Figura 5. Criar parâmetros de entrada e de saída para o serviço do UCA
    Criar parâmetros de entrada e de saída para o serviço do UCA
  3. Acrescente um script de servidor e conecte-o à entrada e saída. Chame o script Input -OutputMapping e mapeie os dados de entrada de forma explícita com a variável de saída na propriedade Implementation do componente, conforme mostrado na Figura 6.
    Figura 6. Mapeamento de entrada/saída para o serviço do UCA
    Mapeamento de entrada/saída para o serviço do UCA

Etapa 3. Criar o UCA

É preciso criar o UCA antes que ele possa ser referenciado. Para criar um UCA e associá-lo com o serviço do sistema geral, execute as etapas a seguir:

  1. Na visualização Designer, selecione o sinal de mais (+) ao lado de Implementatione, em seguida, selecione Undercover Agent, conforme mostrado na Figura 7.
    Figura 7. Criar um UCA
    Criar um UCA
  2. Na caixa de diálogo New Undercover Agent, especifique as seguintes informações, conforme mostradas na Figura 6, e clique em Finish.
    • Name: Especifique um nome para o novo UCA.
    • Schedule Type: Selecione On Event na lista.
    • Attached Service: Clique em Select para selecionar o serviço a chamar quando o evento é recebido. Para esse caso, selecione ComplexUCAService.
    Figura 8. Configurar o UCA
    Configurar o UCA
  3. Depois que o UCA é criado, aparece uma caixa de diálogo onde é possível configurar as propriedades do UCA, conforme mostrado na Figura 9. Ali, é necessário associar o UCA ao novo serviço que acabou de ser criado. Não deixe de marcar Enabled para ativar a execução do serviço quando chegar um evento. Se a caixa de seleção não for marcada, o gerenciador de eventos não executa o UCA quando uma mensagem externa é recebida. Note que o monitor do gerenciador de eventos pode mostrar que o gerenciador de eventos executou o UCA, mas se Enabled não estiver marcado, a execução não ocorre.

    Na seção Parameter Mapping , marque Use Default para usar o valor padrão da variável de entrada no serviço anexado. Se a variável de entrada do serviço anexado não tiver um valor padrão, essa caixa de seleção será desativada. Na maioria dos casos, os valores obrigatórios são incluídos no evento de mensagem recebida e não é necessária ação aqui.

    Figura 9. Associar o serviço do UCA ao UCA
    Associar o serviço do UCA ao UCA

Etapa 4. Enviar uma mensagem para o gerenciador de eventos

Para chamar um processo BPD enviando dados do aplicativo por meio do UCA, é necessário conter os dados em uma estrutura XML predefinida com eventmsg com raiz, conforme mostrado na listagem a seguir:

String data="<eventmsg><event processApp="JMSTA" snapshot="JMSTASNAPSHOT" 
ucaname="complexBOUCA">complexBOUCA</event>
<parameters>
   <parameter>
      <key>ucacomplexInput</key>
      <value>
         <customerID>"+customerID+"</customerID>
         <name>"+name+"</name>
         <address>"+address+"</address>
         <surname>"+surname+"</surname>
         <city>"+city+"</city>
         <state>"+state+"</state>
         <country>"+country+"</country>
      </value>
    </parameter>
  </parameters>
</eventmsg>"

Note que as seguintes informações precisam estar disponíveis para incluir no cabeçalho XML:

  • snapshot: O nome da captura instantânea do processo; criado por meio do Process Center.
  • ucaname: O nome do UCA; disponível no editor do UCA, o Process Center.
  • processApp: O nome do processo; esse acrônimo é fornecido ao criar um novo aplicativo de processo.
  • event: O nome do evento; nesse caso, complexBOUCA.
  • key : O nome do objeto de entrada definido no serviço do UCA.

No nosso cenário, um cliente de servlet é usado para enviar uma mensagem para o gerenciador de eventos. O servlet formata dinamicamente a mensagem com o formato prescrito. Para que a mensagem chegue ao serviço do UCA, é necessário procurar a fila de eventos no WebSphere Application Server subjacente. O JNDI que se refere a essa fila de eventos é jms/eventqueue, como mostrado no exemplo a seguir:
Queue ucaqueue=(Queue)ctx.lookup("jms/eventqueue");

Para obter mais informações sobre a estrutura da mensagem, consulte Understanding message structure no Centro de Informações do Business Process Manager.


Etapa 5. Definir o evento de mensagem e associá-lo ao UCA

Uma mensagem é o componente real que colaborar com o UCA para receber o estímulo externo para chamar o processo BPD. É necessário conectar esse evento a uma tarefa de processo fazendo o seguinte:

  1. Crie um processo BPD no designer de processo. Arraste e solte o evento de conectar inicial e conecte-o à atividade Submit Request usando uma linha de sequência, conforme mostrado na Figura 10.
    Figura 10. Criar um evento de mensagem
    Criar um evento de mensagem
  2. Associe o evento de mensagem com o UCA complexBOUCA definido anteriormente, conforme mostrado na Figura 11.
    Figura 11. Configurar o evento de mensagem
    Configurar o evento de mensagem

Etapa 6. Testar a solução de integração

Antes de poder testar a solução, é necessário expor o processo ao grupo AllUsers, conforme mostrado na Figura 12. Caso contrário, o processo não será chamado nem ficará visível no Portal do processo.

Figura 12. Expor o processo a AllUsers
Expor o processo a AllUsers

Para testar a solução geral, criamos um aplicativo cliente simples baseado em JSP que é implementado no WebSphere Application Server. Usando esse cliente JSP, fornecido para download com este artigo e mostrado na Figura 13, é possível criar uma solicitação que é enviada ao servlet. O servlet posta a mensagem na fila onde é consumido pelo gerenciador de eventos.

Figura 13. Chamar um cliente JSP
Chamar um cliente JSP

Depois de ter enviado a mensagem via cliente JSP, é possível efetuar login no Portal de processo como administrador. Na caixa de entrada deve aparecer a nova instância de processo criada em resultado da mensagem, conforme mostrado na Figura 14. Se clicar no ícone "Executar" verde na instância de processo e executar o processo, verá os dados recebidos do cliente, também mostrados na Figura 14.

Figura 14. Resultados no Portal de processo
Resultados no Portal de processo

Etapa 7. Verificar os resultados no log JVM

Depois que o UCA é acionado com sucesso, é possível verificar o sucesso da chamada por meio do log JVM do Business Process Manager, conforme mostrado na Figura 15.

Figura 15. Mensagem em systemout.log
Mensagem em systemout.log

(Veja uma versão maior da Figura 15.)


Conclusão

Este artigo descreveu como iniciar um processo enviando uma mensagem JMS para o gerenciador de eventos do IBM Business Process Manager V7.5. Ele apresentou as etapas para implementar o gerenciador de eventos e o UCA e descreveu relacionamentos de tempo de execução entre eles. Aprendemos a integrar o JMS ao Business Process Manager usando um BPD associado e a infraestrutura padrão do sistema de mensagens do Process Center.

Agradecimentos

Os autores desejam agradecer Scott Simmons e Harsha Bhushana pela revisão deste artigo.


Download

DescriçãoNomeTamanho
Sample scenarioJMSUCATEST.zip9KB

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=WebSphere
ArticleID=827442
ArticleTitle=Uma abordagem prática à integração de JMS e IBM Business Process Manager
publish-date=07262012