Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la...
Transcript of Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la...
![Page 1: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/1.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)1
Especialista Universitario Java Enterprise
Servicios de Mensajes en JEE
Sesión1: JMS: Java MessageService (1)
![Page 2: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/2.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)2
Especialista Universitario Java Enterprise
• Motivación: Interacción con JMS• Arquitectura JMS• Dominios de mensajes: PTP y Pub/sub• Creando un cliente PTP Creando un
cliente Pub/sub
Indice
![Page 3: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/3.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)3
Especialista Universitario Java Enterprise
• Motivación: Interacción con JMS• Arquitectura JMS• Dominios de mensajes: PTP y Pub/sub• Creando un cliente PTP • Creando un cliente Pub/sub
Indice
![Page 4: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/4.jpg)
Especialista Universitario Java Enterprise
Titulo Módulo © 2006-2007 Depto. Ciencia de la Computación e IA Titulo sesión-4
Motivación
RetailerRetailer VendorVendor
OrderQOrderQ
RComfQRComfQ
Supplier#1Supplier#1S1OrderQS1OrderQ
S2OrderQS2OrderQ
VComfQVComfQ
Supplier#2Supplier#2
1 2a 2b
2c
3a
3b
4b
4a
5
67
SendingReceivingListening
![Page 5: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/5.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)5
Especialista Universitario Java Enterprise
• Motivación: Interacción con JMS• Arquitectura JMS• Dominios de mensajes: PTP y Pub/sub• Creando un cliente PTP • Creando un cliente Pub/sub
Indice
![Page 6: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/6.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)6
Especialista Universitario Java Enterprise
• Objetivo e implementación: • Comunicación entre componentes software:
• Independencia de componentes (facilita reemplazamiento).• No es necesario que todas estén simultáneamente en
ejecución.• Permitir comunicación sin que se acuse el recibo.
• Solución aportada por JMS:• Comunicación síncrona y asíncrona, y segura (garantías).• Integración en servicios transaccionales.
• Conceptos básicos de JMS:• Arquitectura del API • Dominios de mensajes• Consumo de mensajes
Arquitectura JMS
![Page 7: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/7.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)7
Especialista Universitario Java Enterprise
• Elementos de la arquitectura JMS: 1. Proveedor JMS:
• Sistema de mensajes que implementa las interfaces de JMS.
• Proporciona administración de recursos y control. • Incluido en implementaciones de J2EE (p.e. Bea
WebLogic)
2. Clientes JMS:• Programas o componentes Java que producen y/o
consumen mensajes.
3. Mensajes:• Objetos que comunican clientes JMS.• Estructura: cabecera + propiedades + cuerpo.
Arquitectura JMS
![Page 8: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/8.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)8
Especialista Universitario Java Enterprise
• Elementos de la arquitectura JMS: 4. Objetos administrados:
• Objetos pre-configurados creados por el administrador.• Hay dos tipos: destinos y factorías de conexión. • Destinations: Objetos usados por los clientes JMS para
especificar el destino de los mensajes que producen o el origen de los mensajes que consumen.
• Connection factories: Objetos usados por los clientes JMS para conectar con un proveedor. Encapsulan parámetros definidos por el administrador.
5. Clientes nativos:• Programas que usan un API nativo en lugar de JMS.
Arquitectura JMS
![Page 9: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/9.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)9
Especialista Universitario Java Enterprise
Arquitectura JMS
Sends to
Creates
ConnectionConnectionFactoryFactory
Proveedor JMSProveedor JMS
ConnectionConnection
SessionSession
Creates
MessageMessageConsumerConsumer
MessageMessageProducerProducer
Creates
DestinationDestination
Creates
Creates
MsgMsg
DestinationDestination
Rec. from
![Page 10: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/10.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)10
Especialista Universitario Java Enterprise
• Interacción: • Administración - JNDI:
• Las herramientas de administración permiten vincular destinos y factorías de conexión a través de un espacio de nombres JNDI.
• Clientes JMS – JNDI – Proveedor JMS:• Entonces, un cliente JMS puede consultar los objetos
administrados en dicho espacio y establecer conexiones lógicas con ellos a través del proveedor JMS.
• Estas conexiones le permiten enviar o recibir mensajes de acuerdo con el modelo definido por JMS.
Arquitectura JMS
![Page 11: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/11.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)11
Especialista Universitario Java Enterprise
• Interacción: (esquema)
Arquitectura JMS
Herramienta Herramienta de de
AdministraciAdministracióónn
Cliente JMSCliente JMS
Espacio JNDIEspacio JNDI
CFCF DD
Proveedor JMSProveedor JMS
vínculo
consulta
Conexión lógica
![Page 12: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/12.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)12
Especialista Universitario Java Enterprise
• Motivación: Interacción con JMS• Arquitectura JMS• Dominios de mensajes: PTP y Pub/sub• Creando un cliente PTP • Creando un cliente Pub/sub
Indice
![Page 13: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/13.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)13
Especialista Universitario Java Enterprise
• JMS = comunicación sinc{asín}crona + segura: • PTP (punto a punto):
• Un cliente produce y envía mensajes a la cola de un cliente receptor que los va leyendo (consume) secuencialmente.
• Mecanismo 1-a-1: un mensaje solamente tiene un consumidor que puede recoger el mensaje cuando quiera (indicándolo).
• Pub/sub (Publicar/subscribir):• Una aplicación cliente publica sus mensajes en tópicos o
apartados a los que otros clientes, interesados en dichos tópicos, se han subscrito.
• Estas conexiones le permiten enviar o recibir mensajes de acuerdo con el modelo definido por JMS.
Dominios de mensajes: PTP y Pub/sub
![Page 14: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/14.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)14
Especialista Universitario Java Enterprise
• PTP y Pub/sub: (esquemas)
Cliente JMSCliente JMS ColaColaEnvía
Cliente JMSCliente JMSConsume
Acusa recibo
Cliente#1Cliente#1Publica TTóópicopico
Cliente#2Cliente#2
Cliente#3Cliente#3
Subscribe
Subscribe
Recoge
Recoge
![Page 15: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/15.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)15
Especialista Universitario Java Enterprise
• Motivación: Interacción con JMS• Arquitectura JMS• Dominios de mensajes: PTP y Pub/sub• Creando un cliente PTP • Creando un cliente Pub/sub
Indice
![Page 16: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/16.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)16
Especialista Universitario Java Enterprise
• Ejemplo: QueueSend.java1. Establecer un contexto JNDI2. Configuración de la comunicación:
1. Localizar una ConnectionFactory2. Crear una Connection3. Crear una Session4. Localizar/crear un Destination5. Crear Producers{Consumers}6. Crear el objeto Message7. Iniciar la conexión
3. Enviar mensajes4. Cerrar la comunicación
Creando un cliente PTP
![Page 17: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/17.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)17
Especialista Universitario Java Enterprise
• Ejemplo: QueueSend.java1. Establecer contexto JNDI:
• Una ConnectionFactory es un objeto administrado por WebLogic cuya implementación proporciona una por defecto.
• Para poder localizar una factoría se precisa establecer el contexto JNDI: javax.naming.NamingManager.InitialContext()
Creando un cliente PTP
private static InitialContext getInitialContext(String url)throws NamingException
{Hashtable env = new Hashtable();env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);env.put(Context.PROVIDER_URL, url);return new InitialContext(env);
}
![Page 18: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/18.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)18
Especialista Universitario Java Enterprise
• Ejemplo: QueueSend.java2. Configuración: Paso-1:Localizar ConnectionFactory
• Encapsula información sobre la configuración de la conexión.• Para localizarla llamaremos a: Context.lookup()• Este método nos devolvera, en este caso un objeto
QueueConnectionFactory
2. Configuración: Paso-2:Crear Connection• Canal abierto de comunicación entre cliente – sistema de
mensajes. Se usa para crear sesiones. Gestiona trasiego.
Creando un cliente PTP
QueueConnectionFactory qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
QueueConnection qcon = qconFactory.createQueueConnection();
![Page 19: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/19.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)19
Especialista Universitario Java Enterprise
• Ejemplo: QueueSend.java2. Configuración: Paso-3:Crear Session
• Define el orden en que los mensajes se producen y consumen.• Puede crear múltiples productores y consumidores.• Tipos: transaccionales y no-transaccionales.• Transaccionales: Protocolo Commit/Rollback (ver módulo de
Servicios Transaccionales)y no es necesario realizar acuses. • No-transaccionales: El tipo Session.AUTO_ACKNOWLEDGE
indica que la sesión acusa recibo una vez el receptor ha recogido el mensaje. QueueConnectionFactor
Creando un cliente PTP
QueueSession qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
![Page 20: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/20.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)20
Especialista Universitario Java Enterprise
• Ejemplo: QueueSend.java2. Configuración: Paso-4:Localizar/crear Destination
• Los objetos Queue son sub-clase de Destination.• Son objetos administrados por WebLogic.• Se obtienen a partir del contexto JNDI y del “destination name”
o nombre de la cola en la configuración de WebLogic:
QUEUE="weblogic.examples.jms.exampleQueue";
• O alternativamente:
Creando un cliente PTP
Queue queue = (Queue) ctx.lookup(queueName);
Queue queue = (Queue) qsession.createQueue(queueName);
![Page 21: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/21.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)21
Especialista Universitario Java Enterprise
• Ejemplo: QueueSend.java2. Configuración: Paso-5:Crear Producers/Comsumers
• Instancias de sub-clases de MessageProducers{Consumers}.• Hay que pasarles el destino (p.e. la cola) al método
createSender() o createReceiver() según queramos enviar o recibir mensajes.
2. Configuración: Paso-6:Crear Message• También se crean a partir de objetos de sesión
Creando un cliente PTP
QueueSender qsender = qsession.createSender(queue);
TextMessage msg = qsession.createTextMessage();
![Page 22: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/22.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)22
Especialista Universitario Java Enterprise
• Ejemplo: QueueSend.java2. Configuración: Paso-6:Crear Message
• Estructura: cabecera + propiedades + cuerpo.• Cabecera: algunos para productores, otros para
consumidores…• JMSDeliveryMode: PERSISTEN,NOT_PERSISTENT
para forzar o no la persistencia de los mensajes.• JMSDestination indica el destino del mensaje
• Propiedades: son pares estándar (atributo, valor)• Cuerpo: es el contenido propiamente dicho que puede ser:
BytesMessage, ObjectMessage, MapMessage, XMLMessage, TextMessage
2. Configuración: Paso-7:Iniciar la conexión
Creando un cliente PTP
qcon.start();
![Page 23: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/23.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)23
Especialista Universitario Java Enterprise
• Ejemplo: QueueSend.java3. Enviar mensajes:
• Ver método readAndSend() del ejemplo, el cual lee de teclado para construir un mensaje de texto.
• Luego llama al método send() que acaba invocando al método send() del QueueSender
• En QueueSender.send() podemos indicar cosas como la persistencia, la prioridad (0-9) y el tiempo de vida (ms)
Creando un cliente PTP
qsender.send(msg, DeliveryMode.PERSISTENT, 4, 3600000);
public void send(String message) throws JMSException {msg.setText(message);qsender.send(msg);
}
![Page 24: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/24.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)24
Especialista Universitario Java Enterprise
• Ejemplo: QueueSend.java4. Cerrar la comunicación:
• Una vez que decidimos dejar de enviar mensajes, el cliente llama a su método close() que a su vez llama a los métodos:• QueueSender.close() que cierra el productor• QueueSession.close() que cierra la sesión• QueueConnection.close() que cierra la conexión
Creando un cliente PTP
public void close()throws JMSException {qsender.close();qsession.close();qcon.close();
}
![Page 25: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/25.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)25
Especialista Universitario Java Enterprise
• Ejemplo: QueueReceive.java1. Establecer un contexto JNDI (igual que antes)2. Configuración de la comunicación: según sea
asíncrona o síncrona. 3. Recepción de mensajes (asíncrona):
1. Implementar la interfaz javax.jms.MessageListener2. Declara como “listener”3. Implementar (opcional) un “listener de excepciones”
3. Recepción de mensajes (síncrona):• No usar “listeners” y llamar al método receive() de la clase
QueueReceiver
4. Cerrar la comunicación
Creando un cliente PTP
![Page 26: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/26.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)26
Especialista Universitario Java Enterprise
• Ejemplo: QueueReceive.java2. Configuración:
Creando un cliente PTP
public void init(Context ctx, String queueName)throws NamingException, JMSException
{qconFactory = (QueueConnectionFactory)
ctx.lookup(JMS_FACTORY);qcon = qconFactory.createQueueConnection();qsession = qcon.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);queue = (Queue) ctx.lookup(queueName);qreceiver = qsession.createReceiver(queue);qreceiver.setMessageListener(this); // o bien: receive()qcon.start();
}
![Page 27: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/27.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)27
Especialista Universitario Java Enterprise
• Ejemplo: QueueReceive.java3. Recepción asíncrona: onMessage()
• Manejador de eventos de mensaje.• Este método se activará cuando la cola reciba un mensaje • Puesto que el cliente debe implementar la interfaz
javax.jms.MessageListener. • Es imprescindible que el consumidor ya se haya registrado
como “MessageListener” y de hecho ha llamado al método setMessageListener() en init()
• Opcionalmente se puede implementar un “listener de excepciones de la sesión
Creando un cliente PTP
![Page 28: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/28.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)28
Especialista Universitario Java Enterprise
Creando un cliente PTPpublic void onMessage(Message msg)
{try {String msgText;if (msg instanceof TextMessage) {msgText = ((TextMessage)msg).getText();
} else {msgText = msg.toString();
}System.out.println("Message Received: "+ msgText );
if (msgText.equalsIgnoreCase("quit")) {synchronized(this) {quit = true;this.notifyAll(); // Notify main thread to quit
}}
} catch (JMSException jmse) {jmse.printStackTrace();
}}
![Page 29: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/29.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)29
Especialista Universitario Java Enterprise
• Ejemplo: QueueReceive.java3. Recepción síncrona:
• Una llamada al método QueueReceiver.receive() bloquea indefinidamente al cliente hasta que alguien produce un mensaje para dicha cola o se cierra la aplicación.
• Si queremos esperar solo un tiempo determinado hay que pasarle un long que indique el “timeout”.
• Si no queremos esperar nada entonces llamaremos al método receiveNoWait() sin argumentos que consume un mensaje, si hay alguno disponible, o bien devuelve null en caso contrario.
Creando un cliente PTP
![Page 30: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/30.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)30
Especialista Universitario Java Enterprise
• Motivación: Interacción con JMS• Arquitectura JMS• Dominios de mensajes: PTP y Pub/sub• Creando un cliente PTP • Creando un cliente Pub/sub
Indice
![Page 31: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/31.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)31
Especialista Universitario Java Enterprise
• Ejemplo: TopicSend.java1. Establecer contexto JNDI.2. Configurar comunicación:
Creando un cliente Pub/sub
public void init(Context ctx, String topicName)throws NamingException, JMSException
{tconFactory = (TopicConnectionFactory)
ctx.lookup(JMS_FACTORY);tcon = tconFactory.createTopicConnection();tsession = tcon.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);topic = (Topic) ctx.lookup(topicName);tpublisher = tsession.createPublisher(topic);msg = tsession.createTextMessage();tcon.start();
}
![Page 32: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/32.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)32
Especialista Universitario Java Enterprise
• Ejemplo: TopicSend.java3. Enviar mensajes:
Creando un cliente Pub/sub
public void send(String message)throws JMSException
{msg.setText(message);tpublisher.publish(msg);
}
tpublisher.publish(msg, DeliveryMode.PERSISTENT, 4, 3600000);
![Page 33: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/33.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)33
Especialista Universitario Java Enterprise
• Ejemplo: TopicReceive.java1. Establecer contexto JNDI.2. Configurar comunicación:
Creando un cliente Pub/sub
public void init(Context ctx, String topicName)throws NamingException, JMSException
{tconFactory = (TopicConnectionFactory)
ctx.lookup(JMS_FACTORY);tcon = tconFactory.createTopicConnection();tsession = tcon.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);topic = (Topic) ctx.lookup(topicName);tsubscriber = tsession.createSubscriber(topic);tsubscriber.setMessageListener(this);tcon.start();
}
![Page 34: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/34.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)34
Especialista Universitario Java Enterprise
• Lanzar ejemplos en WebLogic: • Directorio de ejemplos:
• $SAMPLES_HOME=$HOME/bea/weblogic92/samples• $SAMPLES_HOME/server/examples/src desde el que se
pueden ver los javadoc de todos los ejemplos de WebLogic. Del subdirectorio examples cuelga un subdirectorio por tema:jms.
1. “Setup” de variables de entorno: (abrir terminal)• > cd $SAMPLES_HOME/domains/examples• > setExamplesEnv.cmd• Comprobar que el $CLASSPATH contiene el acceso a los *.jar
de weblogic. Estas variables de entorno se necesitan para compilar y ejecutar correctamente los clientes JMS en esta misma terminal.
Ejercicios
![Page 35: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/35.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)35
Especialista Universitario Java Enterprise
• Lanzar ejemplos en WebLogic: 2. Compilar con “ant”:
• > cd $SAMPLES_HOME/server/examples/src/examples/jms/queue• > Invocar “ant build” que a su vez procesa el fichero build.xml del
directorio actual. El “deployment” de las clases suele consistir en ubicar los *.class en el subdirectorio correspondiente:$SAMPLES_HOME/server/examples/build/clientcasses/examples
3. Lanzar el servidor de ejemplos: (otro terminal)• > cd $SAMPLES_HOME/domains/wl_server• > setExamplesEnv.cmd• > startWebLogic.cmd
Ejercicios
![Page 36: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/36.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)36
Especialista Universitario Java Enterprise
• Lanzar ejemplos en WebLogic: • Cliente#1 (productor): (un terminal)
ant run.send
• Cliente#2 (consumidor): (desde otro terminal)ant run.receive
Ejercicios
![Page 37: Sesión1: JMS: Java Message Service (1) · Mensajes en JEE © 2006-2007Depto. Ciencia de la Computación e IA JMS (1)2 Especialista Universitario Java Enterprise • Motivación:](https://reader035.fdocumento.com/reader035/viewer/2022062607/604b0a5f1cd0e13b004c55ac/html5/thumbnails/37.jpg)
Mensajes en JEE © 2006-2007 Depto. Ciencia de la Computación e IA JMS (1)37
Especialista Universitario Java Enterprise
• Comunicación síncrona• Modificar TopicReceive.java para que trabaje de
forma síncrona. • Incorporar al package de WebLogic.
• Filtro de mensajes• Modificar QueueSend.java para que envíe mensajes
con una cierta prioridad. • Modificar Receive.java para que solo consuma
mensajes con una cierta prioridad mínima. • Incorporar al package de WebLogic.
Ejercicios