Está en la página 1de 15

SERVIDORES DE COLAS DE MENSAJES

FUNDAMENTOS TEÓRICOS

 La mensajería es un método de comunicación entre componentes software o aplicaciones.


 Los mensajes permiten una comunicación distribuida débilmente acoplada.
 Un componente envía un mensaje a un destino y el receptor lo recoge del mismo.
 Ni el emisor ni el receptor tienen que estar disponibles al mismo tiempo para comunicarse.
 No es necesario que la comunicación entre clientes sea simultánea o sincrónica
 El emisor no tiene porqué saber nada del receptor y viceversa.
 Ambos sólo deben saber el formato del mensaje y cuál es el destino del mensaje.
 Un cliente puede enviar mensajes y recibir desde otros clientes.
 Una aplicación utilizará la mensajería cuando queramos que:

 Ciertos componentes no dependan del interfaz de otros componentes.


 La aplicación funcione independientemente de si todos los componentes se
están ejecutando de forma simultánea.
 El modelo de negocio de la aplicación permita a un componente enviar
información a otro componente y que continúe su procesamiento sin esperar a
una respuesta inmediata.

JMS

 Java Message Service.


 Es la solución de mensajería de la plataforma Java.

TIPOS MENSAJERIA

Punto a punto
Publicación y subscripción

MESSAGE DRIVEN BEAN

 Es un bean que permite procesar mensajes de forma asincrónica.


 Actúa como un listener de mensajes (JMS).
 Recibe mensajes del tipo JMS
 Los mensajes pueden ser enviados por:

Una aplicación cliente.

Otro EJB.

Un componente WEB.

Una aplicación tipo JMS.

Sistemas que no usan la tecnología de Java.

 Pueden procesar mensajes del tipo JMS u otro tipo de mensajes.


 No mantiene datos o estado conversacional del cliente.
 Los clientes no acceden mediante interfaces a diferencia de los session beans.
 El contenedor permite la formación de un pool para los mensajes.
 Un message driven bean puede procesar mensajes de varios clientes.
 Los métodos no son invocados directamente. En su lugar se envían mensajes.
 La invocación es asincrónica.
 No representan a información directa de la base de datos. Sin embargo, pueden acceder a
base de datos.
 No poseen estado (stateless).
 No manejan un estado conversacional.

TIPOS DE ACCESO LOCAL Y REMOTO

LOCAL

 Cuando los beans están estrechamente ligados. Ej: una confirmación por mail luego de una
ejecución.
 Cuando bean llama a otro.
 Cuando se requiere un mejor rendimiento.

REMOTO

 Cuando los clientes no se encuentran en el mismo equipo del servidor.


 Cuando son llamados desde aplicaciones diferentes.
 Cuando no importa mucho el tiempo de respuesta.
 Si no se conoce como implementar, es mejor colocar como Remote.

MESSAGE DRIVEN BEANS

CREACION DEL JMS (Java Message Service)


*Click en services/click derecho en Glassfish server/view admin console

*Click en recursos JMS/fábricas de conexión/nuevo. Ingresar Nombre del conjunto, tipo de recurso
y aceptar.
*Click en recursos de destino/nuevo. Ingresar nombre Jndi, nombre del destino físico, tipo de
recurso y aceptar
CREACION DEL PROYECTO

*Click en file new Project/Java ee/Enterprise application

*Ingresar el nombre del proyecto y ubicación


*Dejar por defecto las siguientes opciones

*Se creará el árbol con sigue a continuación:


PUBLICACION DE MENSAJES (CREACION DEL MESSAGE DRIVEN BEAN )

*Click derecho sobre el proyecto ejb/new/message driven bean. Ingresar el nombre del Ejb,
paquete y servidor destino
*El código quedaría como sigue a continuación:

package pkg_ejb_message;

import javax.ejb.ActivationConfigProperty;

import javax.ejb.MessageDriven;

import javax.jms.MapMessage;

import javax.jms.Message;

import javax.jms.MessageListener;

@MessageDriven(mappedName = "destino_jms", activationConfig = {

@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-


acknowledge"),

@ActivationConfigProperty(propertyName = "destinationType", propertyValue =


"javax.jms.Queue")

})

public class ejb_MessageBean implements MessageListener {

public ejb_MessageBean() {

@Override

public void onMessage(Message message)


{ try

System.out.println("hello from message driven bean");

MapMessage msg=(MapMessage ) message;

System.out.print("Cédula:"+msg.getString("cedula"));

System.out.print("Nombre:"+msg.getString("nombre"));

System.out.print("Dirección:"+msg.getString("direccion"));

catch (Exception ex)

ex.printStackTrace();

CONSUMO DE MENSAJES (CREACION DEL CLIENTE TIPO SERVLET)

*Click sobre el proyecto web y seleccionar file/new/new file/web/servlet


*Ingresar nombre de la clase y paquete

*Dejar por defecto los datos que siguen a continuación:


*El código quedaría como sigue a continuación:

package pkg_cliente;

import java.io.IOException;

import java.io.PrintWriter;

import javax.annotation.Resource;

import javax.jms.Connection;

import javax.jms.MapMessage;

import javax.jms.MessageProducer;

import javax.jms.Session;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "servlet_cliente", urlPatterns = {"/servlet_cliente"})

public class servlet_cliente extends HttpServlet {

@Resource(mappedName="conexion_jms")

javax.jms.QueueConnectionFactory queueConnection;

@Resource(mappedName="destino_jms")

javax.jms.Queue queue;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

try {

Connection connection =queueConnection.createConnection();

Session session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

MessageProducer producer=session.createProducer(queue);

MapMessage message=session.createMapMessage();

message.setString("cedula","12233322");

message.setString("nombre","Juan");

message.setString("direccion","10 agosto");

producer.send(message);

producer.close();

session.close();

connection.close(); }

catch(Exception ex){
ex.printStackTrace();

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

@Override

public String getServletInfo() {

return "Short description";

}// </editor-fold>

*Hacer un click derecho sobre el proyecto entreprise/deploy

CORRER LA APLICACIÓN

*Click derecho sobre el archivo cliente (serlvet) y run file

También podría gustarte