Concepto: Java Messaging Service (JMS)
En esta directriz se proporciona una visión general sobre JMS (Java Messaging System).
Relaciones
Elementos relacionados
Descripción principal

Introducción

JMS (Java Messaging System), el sistema de mensajería de Java, proporciona un estándar entre plataformas para la comunicación asíncrona de sucesos y de datos empresariales en toda la empresa. Habitualmente, la comunicación se realiza entre procesos y máquinas. Los objetos de aplicaciones que normalmente se ejecutan en máquinas distintas se comunican accediendo a los servicios del middleware orientado a mensajes (MOM) mediante un conjunto estándar de interfaces que JMS define.

Diagrama descrito en el texto adjunto.

JMS proporciona un conjunto de interfaces que aíslan al programador de Java (aumentando los productores y consumidores de mensajes) de los proveedores de MOM.

Esta página de contenido describe los conceptos más importantes y la utilización típica de JMS.

Mensajes

Un mensaje es un paquete autosuficiente de datos empresariales. Se divide en tres partes:

  • Cabecera: contiene información de direccionamiento de red e identificadores de mensaje.
  • Propiedades: contiene metadatos del mensaje. JMS indica cuales han de ser algunas de estas propiedades, sin embargo, los programadores de aplicaciones pueden añadir sus propias propiedades.
  • Carga: contiene los verdaderos datos empresariales. El programador de aplicaciones es quien controla en su totalidad la carga.

Diagrama descrito en el texto adjunto.

En JMS, el mensaje se encapsula en un objeto que implementa la interfaz javax.jms.Message. Un programa Java puede acceder a los compartimentos a través de esta interfaz, tal como se muestra en el diagrama que aparece a continuación. La carga puede presentarse de varias maneras, que se tratarán más adelante.

Diagrama descrito en el texto adjunto.

La cabecera contiene propiedades del mensaje que siempre deben existir. En la cabecera hay disponibles las siguientes propiedades:

  • MessageID
  • Timestamp
  • CorrelationID
  • ReplyTo
  • Destination
  • DeliveryMode
  • Redelivered
  • Type
  • Expiration
  • Priority

El programador de aplicaciones puede utilizar las propiedades para proporcionar metadatos para el mensaje. Las propiedades están formadas por un conjunto arbitrario de parejas nombre/valor.

JMS da soporte a seis tipos de cargas:

  • Mensajes de texto
  • Mensajes de objetos
  • Mensajes de bytes
  • Mensajes de correlación
  • Mensajes de corriente de datos
  • Mensaje (sin que haya un cuerpo de mensaje)

Los tipos de carga se ven reflejados en la jerarquía de clases donde las interfaces amplían javax.jms.Message. En el siguiente diagrama de clases, se muestran los mensajes de bytes, objetos y texto habitualmente utilizados. Los mensajes de texto son los portadores habituales de datos XML.

Diagrama descrito en el texto adjunto.

Destinos

JMS define el concepto de un destino. Los mensajes se envían a los destinos y de allí se reciben. Hay dos formatos de destinos:

  • Colas
  • Temas

Las colas son destinos de mensajes que se utilizan cuando los mensajes únicamente los maneja un receptor. Si imaginamos una semejanza entre los mensajes y el correo ordinario, las colas son buzones de correos que posee un destinatario en particular. La comunicación con colas se denomina comunicación de punto a punto.

Los temas son destinos de mensajes que se utilizan cuando varios destinatarios necesitan recibir los mensajes, cada uno de ellos expresando un interés en recibir un tipo concreto de mensaje. Siguiendo de nuevo con la analogía del correo ordinario, podríamos imaginar en este caso la publicación de un artículo en un periódico en el que un único mensaje es leído por varios receptores. A menudo se hace referencia a este tipo de diseño como un modelo de publicación y suscripción.

Entrega de mensajes

La entrega de mensajes se puede realizar de dos formas:

  • Persistente
  • No persistente

En la entrega persistente se almacena el mensaje en un archivo o base de datos, lo que garantiza la entrega. En la entrega no persistente se mejora el rendimiento y se reduce la sobrecarga por el almacenamiento, sin embargo, no se garantiza la entrega del mensaje. En la mayoría de aplicaciones que utilizan JMS, la elección habitual es la entrega persistente.

Clientes JMS

Los clientes JMS son los objetos Java que utilizan JMS. Hay definidos dos roles:

  • Productores de mensajes: programas Java que crean y envían mensajes.
  • Consumidores de mensajes: programas Java que reciben mensajes.

En el siguiente diagrama se proporciona una visión general de la forma en que colaboran productores, consumidores y proveedores JMS.

Diagrama descrito en el texto adjunto.

Un productor de mensajes puede ser cualquier clase Java que tenga acceso a la implementación JMS. Los productores de mensajes crean y envían mensajes.

Un consumidor de mensajes puede ser cualquier clase Java que tenga acceso a la implementación JMS. Los consumidores de mensajes reciben y manejan mensajes.

Un cliente JMS utiliza un conjunto de interfaces para acceder a JMS. Los objetos que implementan las interfaces JMS se crean mediante un conjunto de fábricas. La fábrica inicial es ConnectionFactory. La fábrica de conexiones se busca mediante JNDI. El cliente JMS utiliza la fábrica de conexiones para crear un objeto de conexión. El objeto de conexión sirve para crear un objeto de sesión, que se utiliza como una fábrica para otros objetos JMS. La siguiente figura ilustra las relaciones conceptuales clave entre las fábricas, prescindiendo los detalles de colas y temas.

Diagrama descrito en el texto adjunto.

Las fábricas de conexiones, las conexiones y las sesiones se presentan en dos formatos: uno para las colas y otro para los temas. En el diagrama de clases que aparece a continuación se muestra la jerarquía de interfaces para los conceptos JMS más importantes.

Diagrama descrito en el texto adjunto.

Proveedores JMS

Un proveedor JMS es una implementación que cumple la especificación JMS. El proveedor JMS es el responsable de recibir y enviar mensajes además de encargarse de su persistencia.

Información adicional

Visite la página http://java.sun.com/products/jms/ para obtener más información sobre JMS.