Download Modelos de mensajería

Document related concepts
no text concepts found
Transcript
DEPARTAMENTO DE SISTEMAS
JMS
Arquitectura de Software
1
Agenda
DEPARTAMENTO DE SISTEMAS
• 
• 
• 
• 
• 
• 
Introducción
Message-oriented middleware (MOM)
Modelos de mensajería
o  Point to point
o  Publish-subscribe (pub-sub)
Java Message Service (JMS)
o  Arquitectura JMS
o  Modelo de mensajes JMS
Message-Driven Bean (MDB)
o  Características MDB
o  Proceso MDB
o  Ciclo de vida MDB
o  Desarrollo MDB
Patrones de integración y Apache ActiveMQ
2
Introducción
DEPARTAMENTO DE SISTEMAS
Mensajería
o 
En JEE el término mensajería se refiere a la comunicación
con bajo acoplamiento entre un emisor y un receptor, de
forma asíncrona.
o 
Su comportamiento se puede asimilar a un buzón de voz,
donde un emisor (producer) deja un mensaje en un
destino específico, para que un receptor (consumer) lo
recoja cuando pueda.
3
Introducción
DEPARTAMENTO DE SISTEMAS
•  Comunicación síncrona
o 
Invocación de métodos
 
o 
o 
o 
Java RMI
Quien invoca y quien es invocado deben estar
presentes para que la comunicación se realice.
El emisor debe esperar respuesta del receptor, para
realizar otra petición.
Ejemplo: llamada telefónica
Tomado de: Enterprise Integration Patterns, Gregor Hohpe, Bobby Woolf
4
Introducción
DEPARTAMENTO DE SISTEMAS
•  Comunicación asíncrona
o 
o 
o 
o 
No se necesita la presencia del emisor y el receptor
para realizar la comunicación
El receptor responde en el momento que pueda
Se requiere de un Sistema de mensajería
(Message-oriented middleware - MOM)
Ejemplo: Buzón de voz, en este se almacenan los
mensajes y el receptor puede recibir los mensajes y
revisarlos en otro momento.
Tomado de: Enterprise Integration Patterns, Gregor Hohpe, Bobby Woolf
5
Agenda
DEPARTAMENTO DE SISTEMAS
• 
• 
• 
• 
• 
• 
Introducción
Message-oriented middleware (MOM)
Modelos de mensajería
o  Point to point
o  Publish-subscribe (pub-sub)
Java Message Service (JMS)
o  Arquitectura JMS
o  Modelo de mensajes JMS
Message-Driven Bean (MDB)
o  Características MDB
o  Proceso MDB
o  Ciclo de vida MDB
o  Desarrollo MDB
Patrones de integración y Apache ActiveMQ
6
Message-oriented middleware (MOM)
DEPARTAMENTO DE SISTEMAS
•  Este sistema de mensajería coordina y administra el
envío y recepción de mensajes. Su principal propósito
es mover los mensajes del computador de un emisor al
computador del receptor. Transmisión esencial de envío
de mensajes:
El receiver
procesa el
mensaje
El sender
crea el
mensaje
El sender
adiciona el
mensaje
al canal
El sistema de
mensajería
mueve los
mensajes del
computador del
sender al receiver
Tomado de: Enterprise Integration Patterns, Gregor Hohpe, Bobby Woolf
El receiver
lee el
mensaje
del canal
7
Message-oriented middleware (MOM)
DEPARTAMENTO DE SISTEMAS
• 
Es un software
componentes.
• 
Cuando un mensaje es enviado, el MOM lo almacena en una ubicación
especificada por el emisor y reconoce lo recibido.
• 
El MOM permite implementar soluciones en las que se requiere un bajo
acoplamiento y garantizar confiabilidad en la entrega de información
• 
Existen diferentes productos libres y comerciales
o 
o 
o 
o 
o 
o 
que
permite
la
comunicación
asíncrona
entre
IBM WebSphere MQ
TIBCO Rendezvous
SonicMQ
ActiveMQ
Oracle Advanced Queuing
etc
8
Message-oriented middleware (MOM)
DEPARTAMENTO DE SISTEMAS
Tomado de: EJB 3 in action
9
Agenda
DEPARTAMENTO DE SISTEMAS
• 
• 
• 
• 
• 
• 
Introducción
Message-oriented middleware (MOM)
Modelos de mensajería
o  Point to point
o  Publish-subscribe (pub-sub)
Java Message Service (JMS)
o  Arquitectura JMS
o  Modelo de mensajes JMS
Message-Driven Bean (MDB)
o  Características MDB
o  Proceso MDB
o  Ciclo de vida MDB
o  Desarrollo MDB
Patrones de integración y Apache ActiveMQ
10
Modelos de mensajería
DEPARTAMENTO DE SISTEMAS
•  Un modelo de mensajería es un camino de
mensajería utilizado, en el cual se involucra un
número de emisores (senders) y receptores
(consumers).
o 
o 
Point to point
Publish- suscribe
11
Point to point
DEPARTAMENTO DE SISTEMAS
Tomado de: EJB 3 in action
• 
• 
• 
• 
• 
• 
El mensaje va de un emisor A a un receptor B
El mensaje queda almacenado en una cola
La cola no garantiza el orden de entrega de los mensajes
Las colas conservan todos los mensajes, hasta que son
consumidos o expiran
Si existe más de un receptor potencial se elige uno de forma
aleatoria.
Una vez entregado el mensaje desaparece de la cola
12
Publish-subscribe
DEPARTAMENTO DE SISTEMAS
Tomado de: EJB 3 in action
•  El mensaje enviado es recibido por todos los
consumidores suscritos
•  Una vez enviado el mensaje no se guarda copia
•  Utilizado en sistemas de broadcast
13
Publish-subscribe
DEPARTAMENTO DE SISTEMAS
•  Los mensajes se tratan como un Topic, que
funciona como una cola pero puede tener muchos
consumidores.
•  Los Topics conservan los mensajes solamente
mientras se recogen para ser distribuidos a los
suscriptores
14
Agenda
DEPARTAMENTO DE SISTEMAS
• 
• 
• 
• 
• 
• 
Introducción
Message-oriented middleware (MOM)
Modelos de mensajería
o  Point to point
o  Publish-subscribe (pub-sub)
Java Message Service (JMS)
o  Arquitectura JMS
o  Modelo de mensajes JMS
Message-Driven Bean (MDB)
o  Características MDB
o  Proceso MDB
o  Ciclo de vida MDB
o  Desarrollo MDB
Patrones de integración y Apache ActiveMQ
15
Java Message Service (JMS)
DEPARTAMENTO DE SISTEMAS
•  JMS es un estándar de mensajería (Java)
•  Diseñado para aplicaciones basadas en componentes
J2EE / JEE
• 
Provee un API para manipular mensajes
o  Crear
o  Enviar
o  Recibir
o  Leer
16
Características
DEPARTAMENTO DE SISTEMAS
•  Permite comunicación distribuida
acoplamiento, confiable y asíncrona.
con
bajo
•  Provee un modelo estándar en Java para acceder a
MOM.
•  Permite crear aplicaciones de mensajería portables.
•  Los clientes JMS pueden usar el API JDBC
17
Características
DEPARTAMENTO DE SISTEMAS
•  El API JMS no incluye:
o 
Balanceo de carga y tolerancia a fallos
o 
Administración, JMS no especifica un API para
administración de mensajería
o 
Seguridad, JMS no especifica un API para controlar
la privacidad y la integridad de los mensajes
18
Arquitectura JMS
DEPARTAMENTO DE SISTEMAS
•  Partes de una aplicación JMS
o 
JMS Clients: Programas en Java que envían y reciben mensajes.
o 
Non-JMS Clients: Clientes que utilizan un sistema de mensajes
nativo, en lugar de API de JMS.
o 
Messages: conjunto de mensajes definidos en cada aplicación para
comunicar información entre sus clientes.
o 
JMS Provider: Sistema de mensajería que implementa un producto de
mensajería.
o 
Administered Objects : Objetos JMS, pre-configurados, creados por
un administrador para el uso de sus clientes.
19
Arquitectura JMS
DEPARTAMENTO DE SISTEMAS
JMS tiene dos tipos de objetos administrados:
• 
ConnectionFactory: Este objeto lo usa un cliente para crear una conexión
con un proveedor. (javax.jms.ConnectionFactory)
• 
Destination: Este es el objeto que un cliente usa para especificar el destino
y el origen de los mensajes (javax.jms.Destination)
Estos objetos son guardados en un namespace de JNDI
Tomado de: Java Message Service API —Version 1.1
20
Arquitectura JMS
DEPARTAMENTO DE SISTEMAS
•  Interfaz JMS
Tomado de: Java Message Service API —Version 1.1
21
Arquitectura JMS
DEPARTAMENTO DE SISTEMAS
Tomado de JavaEE Tutorial
o 
o 
o 
o 
o 
ConnectionFactory: es un objeto administrado usado por un cliente para
crear una conexión.
Connection: es una conexión activa a un proveedor JMS.
Destination: es un objeto administrado que encapsula la identidad del
destino del mensaje
Session: un contexto único para enviar y recibir mensajes
MessageProducer: un objeto creado por un Session que es usado para
enviar mensajes a un destino.
22
Arquitectura JMS
DEPARTAMENTO DE SISTEMAS
Un cliente JMS ejecuta las siguientes actividades:
1. 
Usa JNDI para localizar un objeto ConnectionFactory
2. 
Usa JNDI para encontrar uno o más objetos Destination
3. 
Usa el ConnectionFactory para crear una Connection
4. 
Usa el Connection para crear una o más Sessions
5. 
Usa un Session y los Destinations para crear un
MessageProducers y los MessageConsumers necesarios
6. 
Usa el Connection para iniciar la entrega de mensajes
23
Arquitectura JMS
DEPARTAMENTO DE SISTEMAS
Crea objeto de conexión. Conexión origen
Transaccional. Las solicitudes para
enviar mensajes no serán realizadas
hasta que se llame el método commit
o la sesión sea cerrada. Si no es
transaccional el mensaje se envía
cuando se invoca el método send.
Crea objeto de
conexión.
Conexión de
destino (cola)
Crea sesión JMS.
Contexto orientado a
tareas para enviar y
recibir mensajes
Crea conexión a
MOM
Emisor
Modo acknowledge
Mensaje que se
envía
Envío de
mensaje y cierre
de conexión
24
Tomado de: EJB 3 in action
Arquitectura JMS
DEPARTAMENTO DE SISTEMAS
• 
Envío de mensajes
• 
Recepción de mensajes (síncrono).
Recibir mensajes
en la cola. Llama
bloques indefinidos
Limitar la cantidad
de tiempo de
recepción, en
milisegundos
• 
Recepción de mensajes (asíncrono).
El cliente debe
crear un message
listener que
implementa la
interfaz
MessageListener
25
El código fué tomado de: Java Message Service API —Version 1.1
Arquitectura JMS
DEPARTAMENTO DE SISTEMAS
El programa cliente registra
el objeto MessageListener
con el objeto
MessageConsumer
•  La conexión debe empezar para el envío de mensajes
•  El MessageListener es notificado asíncronamente cuando un mensaje es publicado en la
cola
•  Esto se hace a través del método onMessage de la interfaz MessageListener
26
El código fué tomado de: Java Message Service API —Version 1.1
Modelo de mensajes JMS
DEPARTAMENTO DE SISTEMAS
•  Estructura modelo de mensajes JMS
Cabecera: contiene
información para
identificar y enrutar el
mensaje
Propiedades
Cuerpo: datos que
deben ser enviados
en el mensaje
Tomado de: EJB 3 in action
27
Modelo de mensajes JMS
DEPARTAMENTO DE SISTEMAS
•  Header: todos los mensajes soportan el conjunto de
campos de cabecera. Los campos de cabecera
contienen valores usados por el cliente y el proveedor
•  Properties: se utiliza para información adicional a los
campos de la cabecera
o 
Application-specific properties
o 
Standard properties
o 
Provider-specific properties
•  Body: Define varios tipos de mensajes
28
Modelo de mensajes JMS
DEPARTAMENTO DE SISTEMAS
Header Fields
JMSDestination Send Method
JMSDeliveryMode Send Method
JMSExpiration Send Method
JMSPriority Send Method
JMSMessageID Send Method
JMSTimestamp Send Method
JMSCorrelationID Client
JMSReplyTo Client
JMSType Client
JMSRedelivered Provider
Para mayor información revisar la especificación JMS Versión 1.1
29
Modelo de mensajes JMS
DEPARTAMENTO DE SISTEMAS
Propiedades definidas en JMS
30
Para mayor información revisar la especificación JMS Versión 1.1
Modelo de mensajes JMS
DEPARTAMENTO DE SISTEMAS
JMS provee 5 formas para el cuerpo de un mensaje, cada
una definida por una interfaz de mensaje
Forma de mensaje
Descripción
StreamMessage
Un mensaje que contiene un conjunto de
valores primitivos de Java. Se llena y lee
secuencialmente
MapMessage
Contiene un conjunto de pares nombrevalor, los nombres son String y los valores
tipos primitivos Java. Las entradas
pueden ser accedidos secuencialmente o
aleatoriamente por el nombre
TextMessage
Contiene String
ObjectMessage
Contiene un objeto serializable Java.
BytesMessage
Contiene un flujo de bytes sin interpretar
No son muy usados porque la inserción
de propiedades puede afectar el formato.
31
Modelo de mensajes JMS
DEPARTAMENTO DE SISTEMAS
•  Ejemplos de definición de tipos de mensaje:
o 
TextMessage
o 
BytesMessage
El código fué tomado de: Java Message Service API —Version 1.1
32
Modelo de mensajes JMS
DEPARTAMENTO DE SISTEMAS
o 
MapMessage
El código fué tomado de: Java Message Service API —Version 1.1
33
Agenda
DEPARTAMENTO DE SISTEMAS
• 
• 
• 
• 
• 
• 
Introducción
Message-oriented middleware (MOM)
Modelos de mensajería
o  Point to point
o  Publish-subscribe (pub-sub)
Java Message Service (JMS)
o  Arquitectura JMS
o  Modelo de mensajes JMS
Message-Driven Bean (MDB)
o  Características MDB
o  Proceso MDB
o  Ciclo de vida MDB
o  Desarrollo MDB
Patrones de integración y Apache ActiveMQ
34
Message-Driven Bean (MDB)
DEPARTAMENTO DE SISTEMAS
Es un enterprise bean que permite a las aplicaciones JEE
procesar mensajes de forma asíncrona
Tomado de: EJB 3 in action
35
Características MDB
DEPARTAMENTO DE SISTEMAS
• 
Actúa como un listener de mensajes JMS
• 
Los mensajes pueden ser enviados por cualquier componente
JEE (aplicación cliente, otro enterprise bean) o por una
aplicación JMS o un sistema que no utilice la tecnología JEE
• 
Puede procesar mensajes de JMS u otro tipo de mensajes
• 
Comúnmente son implementados con tecnología JMS.
• 
Las conversaciones no mantienen el estado conversacional
de las instancias de un cliente específico.
36
Características MDB
DEPARTAMENTO DE SISTEMAS
• 
Todas las instancias de un message-driven bean son equivalentes
o 
El contenedor EJB permite asignar un mensaje a alguna instancia
message-driven bean
de un
o 
El contenedor puede tener un pool de estas instancias y permitir el flujo de
mensajes para ser procesados concurrentemente
• 
Los Message-driven beans son anónimos, no son identificados por el
cliente
• 
Los componentes cliente no localiza los message-driven beans ni
invocan directamente los métodos del mismo
• 
Son invocados de forma asíncrona
• 
Un message-driven bean puede procesar mensajes de múltiples
clientes.
37
Beneficios MDB
DEPARTAMENTO DE SISTEMAS
•  Maneja un sistema de pooling que facilita el proceso
de mensajes en paralelo al usar múltiples instancias
de MDB
•  Gestionan el proceso de lectura de mensajes
•  Automatizan el proceso de conectarse al almacén de
mensajes y leer los pendientes
38
Proceso MDB
DEPARTAMENTO DE SISTEMAS
• 
• 
• 
Un message-driven bean es invocado por el contenedor cuando un
mensaje llega al endpoint que es expuesto por el message-driven bean.
Un message-driven bean es definido de acuerdo a la interfaz message
listener utilizada.
Para un cliente un message-driven bean es simplemente un consumidor
de mensajes que maneja el procesamiento de mensajes.
Mensaje
endpoint
Contenedor
MDB
MDB
MDB
MDB
Tomado de: JSR 220 - Enterprise JavaBeansTM,Version 3.0.
39
Ciclo de vida MDB
DEPARTAMENTO DE SISTEMAS
• 
El contenedor EJB usualmente crea un pool de instancias de
message-driven bean. Para cada instancia el contenedor ejecuta
las siguientes tareas:
1. 
2. 
3. 
4. 
5. 
Si el MDS usa inyección de dependencia, el contenedor inyecta esta referencia
antes de la instanciarlo
El contenedor llama al método anotado @PostConstruct, si lo hay.
El MDS nunca es pasado a estado passivated. Solamente tiene dos estados:
nonexistent and ready para recibir mensajes.
Al final del ciclo de vida, el contenedor llama el método anotado @PreDestroy,
si lo hay.
La instancia del bean es procesada por el garbage collection.
40
Tomado de Java EE Tutorial
Ejemplo: Bean que envía mensaje
DEPARTAMENTO DE SISTEMAS
41
Tomado de: EJB 3 in action
Ej: Procesador de mensaje MDB
DEPARTAMENTO DE SISTEMAS
Provee información
de configuración de
un sistema
específico de
mensajería
Recibe el mensaje
enviado
42
El código fue tomado de: EJB 3 in action
Desarrollo MDB
DEPARTAMENTO DE SISTEMAS
• 
La clase MDB debe implementar una interfaz message listener.
o 
o 
Directamente: usando la palabra implements en la declaración de la clase
Indirectamente: A través de anotaciones o descriptores
• 
No puede ser una clase abstracta o final
• 
Debe ser un POJO y no una subclase de otro MDB
• 
Debe ser una clase pública
• 
Debe tener un constructor sin argumentos
• 
No se pueden definir métodos final en la clase
• 
Debe implementar todos los métodos de la interfaz y estos deben
ser públicos
• 
No debe generar excepciones javax.rmi.RemoteException o alguna
excepción de tiempo de ejecución, si se genera la instancia del
MDB es terminada
43
Ejemplo 2
DEPARTAMENTO DE SISTEMAS
44
El código fue tomado de: EJB 3 in action
Desarrollo MDB
DEPARTAMENTO DE SISTEMAS
•  Anotaciones
o 
o 
@MessageDriven
@ActivationConfigProperty
Definición de @MessageDriven
@Target(TYPE)
@Retention(RUNTIME)
public @interface MessageDriven {
String name() default "";
Class messageListenerInterface default Object.class;
ActivationConfigProperty[] activationConfig() default {};
String mappedName();
String description();
}
El código fue tomado de: EJB 3 in action
45
Desarrollo MDB
DEPARTAMENTO DE SISTEMAS
Un MDB implementa una interfaz message listener de JMS.
El contenedor usa la interfaz listener para registrar el MDB con el
proveedor de mensajes y transmitir los mensajes invocando los
métodos implementados
Usando messageListenerInterface como parámetro de la anotación
@MessageDriven :
@MessageDriven(
name="ShippingRequestJMSProcessor",
messageListenerInterface="javax.jms.MessageListener")
public class ShippingRequestProcessorMDB {
Realizando la implementación directamente:
public class ShippingRequestProcessorMDB implements MessageListener {
El código fue tomado de: EJB 3 in action
46
Desarrollo MDB
DEPARTAMENTO DE SISTEMAS
• 
Uso de ActivationConfigProperty
Provee información para la configuración de un sistema de
mensaje específico a través de un arreglo de instancias de
ActivationConfigProperty.
Comunica al
contenedor que
este MDB está
escuchando por
una cola. Si
escucha un Topic el
valor puede ser
javax.jms.Topic
Especifica el JNDI
name de la fábrica
de conexión que
debe ser usada
para crear las
conexiones JMS
para el MDB.
Estamos
escuchando los
mensajes que
llegan al destino
con el
Nombre JNDI jms /
ShippingRequestQ
ueue
El código fue tomado de: EJB 3 in action
47
Desarrollo MDB
DEPARTAMENTO DE SISTEMAS
•  Acknowledge Mode
o 
Hay muchos “modos” para hacer acuse de recibido de los mensajes.
Por defecto para una sesión JMS se usa el modo
AUTO_ACKNOWLEDGE.
Tomado de: EJB 3 in action
o 
Se implementa a través de un @ActivationConfigProperty
48
Desarrollo MDB
DEPARTAMENTO DE SISTEMAS
Enviando mensaje de
confirmación al cliente
49
El código fue tomado de: EJB 3 Developer Guide
Desarrollo MDB
DEPARTAMENTO DE SISTEMAS
•  subscriptionDurability
o 
o 
o 
o 
Sólo aplica para PUB/SUB
Se puede definir si el Topic de subscripción es durable o no
Una vez que el consumidor obtiene una suscripción duradera
sobre un Topic, se garantiza que todos los mensajes
enviados al Topic se entregarán a los consumidores.
Si un consumidor no está conectado al Topic cuando se
recibe el mensaje, el MDB mantiene una copia del mensaje
hasta que el consumidor se conecte y se entrega el mensaje.
Todos los mensajes
del Topic serán
durables para el
suscriptor ID
JoeOgler
50
Remover suscripción
El código fue tomado de: EJB 3 in action
Desarrollo MDB
DEPARTAMENTO DE SISTEMAS
•  Suscripción Durable con ActivationConfigProperty
Para suscripciones no durables el valor de la propiedad
subscriptionDurability = NonDurable
El código fue tomado de: EJB 3 in action
51
Desarrollo MDB
DEPARTAMENTO DE SISTEMAS
•  MessageSelector
• 
• 
• 
La propiedad messageSelector es un selector que MDB aplica a un
consumidor JMS. Por defecto se reciben todos los mensajes sin
filtro. El criterio es aplicado a las cabeceras y las propiedades
específicas de los mensajes que el consumidor quiere recibir
Ej: si se quiere recibir mensajes de solicitud con la propiedad
Fragile = True
Se pueden incluir literales, identificadores, expresiones, operadores
lógicos, aritméticos y de comparación
El código fue tomado de: EJB 3 in action
52
Buenas Prácticas MDB
DEPARTAMENTO DE SISTEMAS
•  Escoja su modelo de mensajería cuidadosamente: PTP
o PUB/SUS
•  Recuerde modularizar: es necesario modularizar y
desacoplar teniendo presente el concern de mensajería
•  Escoja los tipos de mensajes cuidadosamente
•  Configure el tamaño del pool de MDB
53
Agenda
DEPARTAMENTO DE SISTEMAS
• 
• 
• 
• 
• 
• 
Introducción
Message-oriented middleware (MOM)
Modelos de mensajería
o  Point to point
o  Publish-subscribe (pub-sub)
Java Message Service (JMS)
o  Arquitectura JMS
o  Modelo de mensajes JMS
Message-Driven Bean (MDB)
o  Características MDB
o  Proceso MDB
o  Ciclo de vida MDB
o  Desarrollo MDB
Patrones de integración y Apache ActiveMQ
54
Patrones de integración
DEPARTAMENTO DE SISTEMAS
•  Desafíos de la comunicación Asíncrona
o 
Modelo complejo de programación
 
o 
Requiere un modelo de programación orientado por eventos.
Sensible al orden de ocurrencia de los eventos
 
Los canales garantizan el envío de mensajes
 
No garantizan cuando el mensaje será entrega
 
Esto puede causar envío de mensajes con o sin secuencia
 
Se debe revisar el re-establecimiento de secuencia de mensajes
o 
Desempeño
o 
Soporte limitado a algunas plataformas
55
Patrones de integración
DEPARTAMENTO DE SISTEMAS
Patrón
Caso
Pipes and Se requeire
procesar mensajes
Filters
complejos
manteniendo
independencia y
flexibilidad
Solución
Ventajas
1.  Una primera solución podría ser
definir un módulo de mensajería
con las funciones requeridas, pero
esto puede ser inflexible y difícil de
probar. Además al crear todo en
solo
módulo
se
presentan
problemas para reutilizarlo.
2.  La solución está en implementar
todas las funciones distribuidas en
distintos
componentes.
Estos
componentes
deben
ofrecer
interfaces genéricas y permitir el
intercambio de información.
1.  Componentes desacoplados
2.  El Pipe permite a un
componente enviar un mensaje
por medio de él, que puede ser
consumido después por otro
componente.
3.  El pipe se comporta como un
canal de mensajes.
4.  Provee independencia entre los
filtros de lenguaje, plataforma y
localización.
5.  Manejo de múltiples canales
6.  Permite realizar pruebas
El uso del estilo arquitectural de Pipes and Filters divide la tarea de procesamiento en una
secuencia de pasos pequeños e independientes (Filters) que son conectados por canales (Pipes).
56
Tomado de: Enterprise Integration Patterns
Patrones de integración
DEPARTAMENTO DE SISTEMAS
•  Procesamiento de Pipeline
Tomado de: Enterprise Integration Patterns
•  Cuando un unidad (Filtro) completa el procesamiento del mensaje, puede enviar el
mensaje al canal de salida e inmediatamente empezar el procesamiento de otro
mensaje
•  No tiene que esperar que se complete la secuencia para procesar el mensaje
•  Esto permite el procesamiento múltiple
57
Patrones de integración
DEPARTAMENTO DE SISTEMAS
Patrón
Caso
Solución
Ventajas
Message
Translator
Se requiere
comunicar diferentes
sistemas que
manipulan datos en
diferentes formatos
1.  Se podrían modificar las aplicaciones
existentes con el riesgo de generar
fallas en las funcionalidades actuales.
2.  Incorporar transformación directamente
en el endpoint de cada mensaje, esto
requiere acceso al código del
endpoint ,lo cual no es fácil en
aplicaciones terminadas.
3.  Implementar un filtro especial Message
Translator, entre otros filtros o
aplicaciones que traduzcan de un
formato a otro.
1.  Componentes
desacoplados
Esto se presenta en
sistemas de
integración, p.e.
comuniación con
sistemas Legado
Message Translator
Tomado de: Enterprise Integration Patterns
58
Patrones de integración
DEPARTAMENTO DE SISTEMAS
Patrón
Caso
Solución
Message
Translator
Muchas aplicaciones deben
usar notificación de eventos
para coordinar sus
acciones.
1.  Utilizar Remote Procedure Invocation, para notificar
a las aplicaciones de los eventos, pero requiere que
el receiver acepte el evento inmediatamente.
2.  Utilizar un Mensaje de Evento. Cuando un sujeto
tiene un evento, creará un objeto de evento y lo
empaqueta en un mensaje y lo envía por un canal. El
observer*, recibirá el mensaje de enveto, tomará el
evento y lo procesará. El sistema de mensajería no
envía mensaje de notificación, sólo asegura que la
notificación llega al observador . En Java, un evento
puede ser un objeto como un XML, esto puede ser
transmitido a través de un ObjectMessage de JMS.
59
Tomado de: Enterprise Integration Patterns
• El patrón Observer [GoF], describe como diseñar un sujeto que anuncie eventos y los observadores que consumen eventos.
Patrones de integración
DEPARTAMENTO DE SISTEMAS
Patrón
Caso
Solución
Message
Expiration
Si los datos de un mensaje o
solicitud no es recibida por cierto
tiempo, esta debería ser ignorada.
1.  Modificar la expiración del mensaje para especificar
cuanto tiempo el mensaje es valido. Si el mensaje es
enviado y el tiempo ha pasado, el mensaje será
marcado como expirado
Los datos de un mensaje son útiles
en cierto tiempo, se puede
garantizar la entrega del mensaje,
pero no el tiempo límite de entrega.
P.e. En la consulta de una cotización
si la respuesta dura mas de un
minuto, pueda que los datos no sean
fiables.
El Message Expiration es un timestamp que
especifica cuanto el mensaje vivirá o cuando
expirará
Si el mensaje es enviado por varios canales, se
puede dar el caso de recibirlo en unos receptores y
no en otros.
How can a sender indicate when a
message should be considered stale
and thus shouldn’t be
processed?
60
Patrones de integración
DEPARTAMENTO DE SISTEMAS
Si el sistema de
mensajería
detecta que el
mensaje expiró lo
envía por el Dead
Letter Channel.
Tomado de: Enterprise Integration Patterns
En JMS el parámetro Time-To-Live es utilizado, para especificar cuanto tiempo después de
enviado el mensaje expira.
MessageProducer.setTimeToLive(long) -> Modifica el tiempo de todos los mensajes enviados.
Un emisor puede también modificar el time-to-live de un sólo mensaje usando el método:
MessageProducer.send(Message message, int deliveryMode, int priority, long timeToLive) .
61
Apache ActiveMQ
DEPARTAMENTO DE SISTEMAS
•  Apache ActiveMQ
es una aplicación open source
(Apache 2.0 licensed) de mensajería empresarial, la
cual implementa JMS version 1.1
•  Provee
las
características
como
almacenamiento de multiples mensajes.
•  Está integrado
empresarial
con
los
patrones
de
clustering,
integración
62
Apache ActiveMQ
DEPARTAMENTO DE SISTEMAS
• 
• 
• 
• 
• 
Soporta diferentes protocolos como: Ajax, REST,
OpenWire, XMPP
Soporta características avanzadas como:
o  Mensajes a grupos
o  Consumidores exclusivos
o  Composición de destinos
o  Mensajes Advisory
Soporta conexiones con reconexión automática
Soporte a Spring
Soporta destinos distribuídos a través de la red
63
Bibliografía
DEPARTAMENTO DE SISTEMAS
• 
EJB 3 in action. Panda Debu, Rahman Reza, Lane Derek.
Manning. 2007.
• 
JSR
220:
Enterprise
Microsystems.
• 
The Java™ EE 5 Tutorial Third Edition. For Sun Java System
Application Server Platform Edition 9. Eric Jendrock. 2006.
• 
JMS API Version 1.1 April 12, 2002
• 
Enterprise Integration Patterns. Designing, Building and Deploying
Messaging Solutions. Gregor Hohpe, Bobby Woolf. Addison
Wesley. 2004
• 
EJB 3 Developer Guide. Michael Sikora. Packt Publishing.
BIRMINGHAM – MUMBAI. 2008
64
JavaBeansTM,Version
3.0.
Sun