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
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.
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
A Figura 3 mostra os dados de entrada que o processo recebe e publica no Coach.
Figura 3. 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:
- 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
- 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
- Acrescente um script de servidor e conecte-o à entrada e saída. Chame o script
Input -OutputMappinge mapeie os dados de entrada de forma explícita com a variável de saída na propriedadeImplementationdo componente, conforme mostrado na Figura 6.
Figura 6. Mapeamento de entrada/saída para o serviço do 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:
- 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
- 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
-
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
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:
- 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
- Associe o evento de mensagem com o UCA complexBOUCA definido anteriormente, conforme mostrado na Figura 11.
Figura 11. 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
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
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
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
(Veja uma versão maior da Figura 15.)
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.
Os autores desejam agradecer Scott Simmons e Harsha Bhushana pela revisão deste artigo.
| Descrição | Nome | Tamanho | Método de download |
|---|---|---|---|
| Sample scenario | JMSUCATEST.zip | 9KB | HTTP |
Informações sobre métodos de download
-
Centro de informações do IBM Business Process Manager V7.5
-
Understanding message structure (no Centro de Informações do IBM Business Process Manager V7.5)
-
Área developerWorks BPM: Obtenha os recursos técnicos mais recentes sobre as soluções IBM BPM, incluindo downloads, demos, artigos, tutoriais,
eventos, webcasts e muito mais.
-
IBM BPM Journal: Obtenha os artigos e colunas mais recentes sobre soluções da BPM neste
journal trimestral, disponível também nas versões Kindle e PDF.

Sharad 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 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.