Conceitos: JMS (Java Messaging Service)
Tópicos
Introdução
O Java Messaging System, JMS, fornece um padrão de plataforma cruzada para comunicação
assíncrona dos dados de negócios e eventos na empresa. A comunicação é normalmente
em processos e máquinas. Os objetos nos aplicativos, normalmente em execução em
máquinas diferentes, se comunicam acessando os serviços de MOM (Message-Oriented Middleware) por meio de um padrão definido de interfaces definidas pelo JMS.

O JMS fornece um conjunto de interfaces que isolam o programador Java (implementando
os produtores e consumidores de mensagem) a partir dos provedores MOM.
Esta página de conteúdo descreve os conceitos principais e a típica utilização de JMS.
Mensagens
Uma mensagem é um pacote independente de dados de negócios. Ela tem três compartimentos:
- Cabeçalho: Contém informações de roteamento de rede e identificadores de mensagens.
- Propriedades: Contém metadados para a mensagem. O JMS dita algumas das propriedades,
mas programadores de aplicativos também podem incluir suas próprias propriedades.
- Carga útil: Contém os verdadeiros dados do negócio. A carga útil é totalmente
controlada pelo programador de aplicativos.

No JMS, a mensagem é encapsulada em um objeto que implementa a interface
javax.jms.Message. Um programa Java pode acessar os compartimentos por meio desta
interface, conforme mostrado no seguinte diagrama. A carga útil aparece de muitas maneiras,
discutidas posteriormente.

O cabeçalho contém propriedades da mensagem que devem estar sempre lá.
As seguintes propriedades estão disponíveis a partir do cabeçalho:
- ID de Mensagem
- Timestamp
- ID de Correlação
- Responder Para
- Destino
- Modo de Entrega
- Reentregue
- Tipo
- Expiração
- Prioridade
As propriedades podem ser utilizadas pelo programador de aplicativo para fornecer
metadados para a mensagem. As propriedades consistem em um conjunto arbitrário de nome-valor-pares.
Há seis tipos de cargas úteis suportadas pelo JMS:
- Mensagens de texto
- Mensagens de objeto
- Mensagens de byte
- Mensagens de mapa
- Mensagens de fluxo
- Mensagem (nenhum corpo presente)
Os tipos de cargas úteis são refletidos na hierarquia de classe em que as interfaces estendem o javax.jms.Message. No seguinte diagrama de classe, mostramos o texto, o objeto e as mensagens de bytes utilizados freqüentemente. As mensagens de texto são normalmente os transportadores de dados XML.

Destinos
O JMS define o conceito de um destino. As mensagens são enviadas para e recebidas
dos destinos. Os destinos aparecem de duas maneiras:
As filas são destinos de mensagem utilizados quando as mensagens são manipuladas por somente um receptor.
Imaginando que as mensagens são semelhantes ao envio de correio caracol, as filas são caixas postais de um destinatário específico.
A comunicação utilizando filas é chamada de comunicação ponto a ponto.
Os tópicos são destinos de mensagens utilizados quando as mensagens precisam ser recebidas
por múltiplos receptores, em que cada um expressa um interesse em receber um tipo específico de
mensagem. Utilizando a analogia com correio caracol novamente, as pessoas podem achar parecido
como escrever um artigo em um jornal; uma mensagem é lida por qualquer número de receptores.
Freqüentemente, consulte este tipo de design como o modelo de publicação-e-assinatura.
Entrega de Mensagem
A entrega de mensagens pode ser feita de duas maneiras:
- Persistente
- Não-persistente
A entrega persistente inclui o armazenamento da mensagem em um arquivo ou um banco de dados
que ativa a entrega garantida. A entrega não-persistente aprimora o desempenho e
reduz o código extra de armazenamento, mas não há garantia de que a mensagem será
entregue. Para a maioria dos aplicativos que utilizam JMS, a entrega persistente é
a maneira normalmente escolhida.
Clientes JMS
Os clientes JMS são objetos Java que utilizam JMS. Há duas funções definidas:
- Produtores de mensagem: Programas Java que criam e enviam mensagens.
- Consumidores de mensagens: Programas Java que recebem mensagens.
O seguinte diagrama é uma visão geral de como o produtor, os consumidores e provedores JMS colaboram.

Um produtor de mensagens pode ser qualquer classe Java que tenha acesso a uma implementação JMS. Os produtores de mensagem criam e enviam mensagens.
Um consumidor de mensagem pode ser de qualquer classe Java que tenha acesso a uma implementação JMS.
Os consumidores de mensagem recebem e manipulam mensagens.
Um cliente JMS utiliza um conjunto de interfaces para acessar JMS. Os objetos que implementam
as interfaces JMS são criados por meio de um conjunto de depósitos de informações do provedor. O depósito de informações do provedor inicial é o ConnectionFactory. O connection factory é consultado por meio de
JNDI. O cliente JMS utiliza o connection factory para criar o objeto da conexão.
O objeto da conexão é utilizado para criar um objeto de sessão que é utilizado como um depósito de informações do provedor para os outros objetos JMS. A seguinte figura ilustra os principais relacionamentos conceituais
entre os depósitos de informações do provedores, resumindo a partir dos detalhes de filas e tópicos.

Connection factories, conexões e sessões aparecem de duas maneiras: uma para filas e a outra para tópicos.
O diagrama de classe a seguir mostra a hierarquia de interface para os principais conceitos JMS.

Provedores JMS
Um Provedor JMS é uma implementação que satisfaz a especificação JMS.
O provedor JMS é responsável pelo recebimento, pela persistência e entrega de mensagens.
Informações Adicionais
Para obter informações adicionais sobre o JMS, visite http://java.sun.com/products/jms/.
|