Message Driven Beans - Tensho97/Aprende-a-Aprender GitHub Wiki

Introducción

Un Message-Driven Bean o MDB (EJB dirigido por mensajes) es un oyente de mensajes que puede consumir mensajes de una cola o de una durable subscription. Dichos mensajes pueden ser enviados por cualquier componente JavaEE (cliente, otro EJB o una componente Web como un servlet). Incluso desde una aplicación o sistema que no use tecnología JavaEE.

Conceptualmente se diseñaron para que el servidor de aplicaciones proporcionase facilidades de multi-threading, esto es que múltiples consumidores procesen mensajes concurrentemente sin necesidad de desarrollar código adicional. Así, los MDBs proporcionan dicha facilidad al manejar los mensajes entrantes mediante múltiples instancias de beans alojados en el pool del servidor de aplicaciones.

Al igual que en el caso de los clientes JMS standalone que se basan en el método onMessage(), un MDB también contiene este método que se invoca automáticamente a la llegada de un mensaje. Sin embargo, los MDBs difieren de estos clientes en que el contenedor EJB realiza automáticamente varias tareas de inicialización que implementamos a mano en el cliente, como:

  • Crear un consumidor asíncrono (MessageConsumer/QueueReceiver/TopicSubscriber) para recibir el mensaje.
  • Registrar el listener de mensajes.
  • Especificar el modo de acuse de recibo.

Para ello el MDB usa la anotación @MessageDriven para especificar las propiedades del bean o de la factoría de conexión, tales como el tipo de destino, la subscripción duradera, el selector de mensajes, o el modo de acuse de recibo.

Puntos Favorables


Multihilo

Las aplicaciones de negocio pueden necesitar consumidores de mensajes multihilo que puedan procesar los mensajes de modo concurrente. Los MDBs evitan esta complejidad ya que soporta el multihilo sin necesidad de código adicional. Los MDBs gestionan los mensajes entrantes mediante múltiples instancias de beans (dentro de un pool), y tan pronto como un nuevo mensaje llega al destino, una instancia MDB sale del pool para manejar el mensaje.

Código de mensajería simplificado

Los MDBs evitan la necesidad de codificar los aspectos mecánicos asociados al procesamiento de mensajes (como buscar las factorías de conexiones o los destinos, crear las conexiones, abrir sesiones, crear consumidores y adjuntar listeners). Mediante EJB 3, el uso de situaciones por defecto para las circunstancias más comunes elimina gran parte de la configuración. En el peor caso, tendremos que ofrecer la información de configuración via anotaciones o mediante el descriptor de despliegue.

Inicio de consumo de mensajes

Para comenzar a recoger mensajes de la cola de peticiones, alguien necesita invocar el método apropiado dentro del código. En un entorno de producción, no queda claro quien y dónde recae esta responsabilidad. El inicio de consumo de mensajes mediante un proceso manual claramente no es deseable. En un entorno de servidor, casi cualquier manera de ejecutar el método al inicio del servidor es altamente dependiente del sistema; del mismo modo ocurre para detener la recepción de mensajes de manera manual.

Mediante los MDBs registrados, podremos iniciar o detener estos componentes de una manera sencilla cuando se arranque o detenga el servidor.



Autor: Miguel