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.
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.
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.
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.
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:
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.
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.
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.
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.
|