Neste quick tip, irei mostrar um passo a passo de como criar um endpoint do tipo E-mail/POP3 no JBoss ESB para realizar a leitura de um e-mail, e realizar o processamento do conteúdo deste e-mail usando um processo de negócio do jBPM. O exemplo, é uma adaptação de um projeto que precisei fazer para auxiliar o desenvolvimento de uma solução para um cliente de governo.
1) Criando um endpoint customizado para o JBoss ESB
O JBoss ESB possui uma grande gama de gateways para os mais comuns tipos de acesso e exposição de serviços que um arquiteto de integração deva precisar. Entre eles, constam endpoints para EJB, File, SOAP, HTTP, JMS, SQL, Hibernate e FTP. A proposta do JBoss ESB para endpoints que porventura ele não suporte, é uma arquitetura simples e plugável para criação de novos endpoints usando JCA (Java Connector Architecture).
A idéia por trás desta solução, é usar um adaptador JCA que esteja disponivel no servidor e criar um endpoint customizado que será disparado pelo adaptador e que irá gerar a mensagem enviada a lista de ações de um dado serviço. Em verdade, um endpoint no JBoss ESB nada mais é do que um tipo de componente que "escuta" um dado evento externo e dispara uma mensagem contendo os dados deste evento.
No JBossESB, para que você possa criar um endpoint personalizado, basta implementar a interface InflowGateway. A listagem abaixo mostra a implementação de um endpoint que é um ouvinte de uma caixa de mensagens POP3.
2) Configurando o Endpoint JCA no arquivo jboss-esb.xml
Feita a implementação do endpoint usando a API do JBoss ESB, é hora de configurar o endpoint JCA no arquivo de configuração do módulo ESB. Edite seu arquivo META-INF/jboss-esb.xml conforme mostrado na listagem abaixo.
Conforme mostrado na listagem acima, a configuração é baseada no uso de um tipo especial de listener chamado de 'jca-gateway'. Neste listener, você deverá informar qual é o arquivo que define seu adaptador JCA. Neste caso, usamos o arquivo 'mail-ra.rar' que é o conector JCA para e-mail do JBoss ESB. A declaração é feita através da propriedade 'adapter'. É necessário informar também qual é a classe que será usada como endpoint para disparar o envio inicial da mensagem para a cadeia de ações. Neste caso, através do atributo 'endpointClass' definimos que a classe usada seria a classe implementada na listagem anterior.
3) Efetuando o processamento das mensagens usando Pipes and Filters
Uma vez que o endpoint tenha feito a escuta do evento externo, e disparado a mensagem inicial para o ESB, é hora de efetuar o processamento da mensagem (agora, uma mensagem do ESB) usando a lista de ações do pipeline do JBoss ESB. A listagem anterior mostra como esta lista foi fundamentada. Primeiro, é feito o recebimento de um arquivo em anexo usando uma classe personalizada chamada 'DownloadListAction' que faz o download de um arquivo texto enviado em anexo ao e-mail.
O arquivo, é nada mais do que um arquivo contendo várias linhas que representam os produtos de um loja virtual, enviados pelos fornecedores a um e-mail especifico da loja. Os campos do produto, são separados por vírgula, formando portanto um arquivo CSV. Para ler este arquivo, usamos o recurso de Smooks do JBoss ESB para realizar o parse do arquivo sem maiores esforços. A listagem abaixo mostra a configuração de Smooks usada.
Depois que o arquivo fora processado via Smooks, é feita o disparo de um processo de negócio chamado de 'recebimento-produtos'. Este processo é um cenário onde é feito um conjunto de tarefas e ações relacionadas principalmente a validação dos produtos enviados pelos fornecedores (feito por um analista especifico) e a atualização de estoque e re-catalogo dos produtos na loja on-line caso os produtos estejam todos corretos, ou, caso exista algum problema, a notificação de retorno aos fornecedores sobre inconcistências nos produtos enviados. A figura abaixo mostra o esboço destes processo de negócio usando jBPM.
Boas Integrações ;)




