Tópicos

Introdução To top of page

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.

Diagrama descrito no texto de acompanhamento.

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 To top of page

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.

Diagrama descrito no texto de acompanhamento.

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.

Diagrama descrito no texto de acompanhamento.

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.

Diagrama descrito no texto de acompanhamento.

Destinos To top of page

O JMS define o conceito de um destino. As mensagens são enviadas para e recebidas dos destinos. Os destinos aparecem de duas maneiras:

  • Filas
  • Tópicos

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 To top of page

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 To top of page

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.

Diagrama descrito no texto de acompanhamento.

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.

Diagrama descrito no texto de acompanhamento.

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.

Diagrama descrito no texto de acompanhamento.

Provedores JMS To top of page

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 To top of page

Para obter informações adicionais sobre o JMS, visite http://java.sun.com/products/jms/.




Conteúdo desenvolvido ou parcialmente desenvolvido por Inferdata Corporation.

Rational Unified Process   2003.06.15