Spring Framework provee soporte para crear consumidores JMS usando POJOs. De esta manera, Spring brinda los llamados Message Driven POJO (MDP), que resulta ser una alternativa liviana a los Message Driven Bean que forman parte de la especificación Java EE. Con los MDP podemos obtener un comportamiento similar a los MDB, pero sin la necesidad de contar con un Servidor de Aplicaciones.
A continuación veremos un ejemplo para descargar donde creamos un MDP que consume mensajes de texto dentro de una aplicación web.
Configuración inicial
El proyecto para descargar contiene una aplicación web con Spring, con un MDP configurado. Este MDP se conecta a una cola para consumir mensajes de allí. Cada vez que llegue un mensaje se ejecuta el método "onMessage()" del MDP, recibiendo el mensaje por parámetro.
Para esto deberemos configurar a nuestro servidor de aplicaciones con los siguientes elementos:
- Un Connection Factory, con el nombre JNDI jms/ConnectionFactory
- Una Queue, con el nombre JNDI jms/PruebaMdpQueue
Configurar GlassFish v2
El proyecto de ejemplo está configurado para levantarse directamente con NetBeans 6.5 y ejecutarse dentro de GlassFish v2. Para configurar estos recursos en GlassFish, debemos:
- Ir a la consola de administración de GlassFish (http://localhost:4848)
- En el menú de la izquierda, seleccionar Recursos > Recursos JMS > Fábricas de conexión
- Click en Nuevo...
- Completar los datos del Connection Factory:
- Nombre JNDI: jms/ConnectionFactory
- Tipo de recurso: javax.jms.ConnectionFactory
- Click en Aceptar
- En el menú de la izquierda, seleccionar Recursos > Recursos JMS > Recursos de destino
- Click en Nuevo...
- Completar los datos del destino:
- Nombre JNDI: jms/PruebaMdpQueue
- Nombre de destino físico: PruebaMdpQueue
- Tipo de recurso: javax.jms.Queue
- Click en Aceptar
- Listo!
El proyecto de ejemplo
El proyecto de ejemplo contiene una aplicación web configurada con Spring, en donde se declara un MDP que consume mensajes de la cola jms/PruebaMdpQueue. La aplicación web tiene una página que se encarga de publicar mensajes a pedido a dicha cola; el MDP escribe por la consola del servidor de aplicaciones el contenido del mensaje recibido.
Los archivos principales de la demo son:
- WEB-INF/applicationContext.xml : es la configuración de Spring. Aquí está declarado el MDP. En particular, el bean llamado listenerContainer se encarga de conectarse a la cola, obtener los mensajes y disparar varios consumidores concurrentes.
- Clase HolaMundoMdp : es el MDP en cuestión. Como vemos, implementa la interfaz MessageListener, la misma que implementan los MDB tradicionales.
Para ejecutar el proyecto, basta deplegar el WAR en el servidor de aplicaciones. Si usan NetBeans, hagan click derecho en el proyecto > Run.
Pueden consultar más detalles del código en la wiki de Message Driven POJO.
Descargar el proyecto de ejemplo
Pueden descargar el proyecto de ejemplo de MDP con Spring, el cual incluye todos los fuentes y librerías necesarias para abrir el proyecto en NetBeans 6.5 y desplegar en GlassFish v2.