Alguns autores consideram como quinto elemento os clientes nativos, que utilizavam as APIs de mensagens nativas e depois passaram a usar também a JMS API.

O JMS Provider é uma aplicação que fornece controle e administração aos serviços oferecidos pela tecnologia JMS. Compare o JMS Provider com o Container EJB, ou Servlet Container. É ele que gerencia o envio e o recebimento das mensagens pelos clientes. Funciona como um Daemon (processo) rodando em background, escutando solicitações em uma porta. Como exemplo de suas funções, podemos citar que é ele o responsável pelo armazenamento de uma mensagem que não puder ser entregue. Entre as aplicações comerciais podemos citar: SonicMQ (www.progress.com) distribuído em conjunto com o JBuilder da Borland, e o MQSeries (www.ibm.com) da IBM. Entre as ferramentas open source temos o provider OpenJms (www.openjms.org), Joram (www.objectweb.org) e o JbossQM, distribuído junto com o Jboss(www.jboss.org). Vale lembrar que a comunidade open source e as grandes empresas privadas estão aceitando cada vez mais a API JMS e, assim, fornecendo ferramentas cada vez mais compatíveis.

De uma forma simples, podemos descrever o fluxo de uma aplicação JMS assim: o cliente JMS produtor cria uma mensagem e a envia para um destino no Provider. O Provider avisa aos clientes consumidores que possui mensagens para serem lidas ou as armazena até serem consumidas. Diferente dos clientes os Providers podem se comunicar diretamente. Mas como existem Providers pertencentes a diferentes fornecedores, pode haver problemas de incompatibilidade. Para resolver isso, diversos fornecedores já implementam os chamados bridge: componentes que atuam como uma ponte entre os Service Providers.
A especificação atual da JMS possibilita as duas seguintes formas, chamadas de domínio, para trabalhar:

• Point-to-Point (figura 2)
• Publish/Subscribe (figura 3)

No domínio Point-to-Point (também chamado, PTP) existe basicamente a presença de três elementos: uma fila (Queue), um produtor e um consumidor. Cada mensagem é enviada para uma Queue, de onde é consumida. O Provider, de acordo com os parâmetros passados pela mensagem, pode armazená-la até que sejam consumidas ou seu tempo expire. Como características desse domínio podemos citar:

• Cada mensagem tem apenas um consumidor
• O produtor e o consumidor não mantêm relação de tempo entre eles
• O consumidor reconhece quando a mensagem é processada corretamente

No modelo Publish/Subscribe (também chamado pub/sub) as mensagens são direcionadas para um tópico (Topic) e então entregues para os vários clientes inscritos naquele tópico. Por default as mensagens só são entregues aos clientes que estão ativos naquele instante. Para resolver esse problema devemos criar as mensagens do tipo "Durable". Veja mais informações no quadro "Aplicações Robustas" e no exemplo ao final.

A leitura dessas mensagens pode ser feita de duas formas: síncrona e assíncrona. Na primeira há a chamada ao método receive, onde a aplicação espera pela mensagem ou então que acabe o tempo de espera. Na segunda maneira, registramos um listener (ouvinte) que está associado ao consumidor. Quando a mensagem chega, o listener é avisado e então ativa o processo de busca.
A partir daqui, ao tratar os objetos usados pela JMS API devemos fazer a distinção de qual domínio usar. Para cada domínio teremos objetos administrativos diferentes. A forma mais simples de diferenciar tais objetos é por sua nomenclatura. Para o modelo PTP, teremos a presença de uma Queue (fila) e, por isso, os objetos levam essa terminologia agregada ao seu nome. Pelo mesmo motivo, o domínio pub/sub utiliza-se do Topic. Exemplificando: o objeto ConnectionFactory para o domínio PTP chama-se QueueConnectionFactory e para o domínio pub/sub, TopicConnectionFactory.
Conhecendo a arquitetura podemos agora partir para a API de programação.

Leia na revista MundoJava o restante do artigo...





 
© 2003 - MundoJava - Todos os direitos reservados <design: www.id-art.com.br >