Diferencia entre revisiones de «Message Driven POJO»

De Dos Ideas.
Saltar a: navegación, buscar
(Propiedades de la clase DefaultMessageListenerContainer)
(Propiedades de la clase DefaultMessageListenerContainer)
Línea 66: Línea 66:
 
== Propiedades de la clase DefaultMessageListenerContainer ==
 
== Propiedades de la clase DefaultMessageListenerContainer ==
  
Si el mensaje a consumir tiene un JMSType específico, es necesario definirlo. Entonces, a la configuración anterior, se agrega:
+
Si el mensaje a consumir tiene un '''JMSType''' específico, es necesario definirlo, con la siguiente propiedad:
  
 +
<code xml>
 
<property name="messageSelector" value="JMSType = 'jmsTypeSaludoA'"/>
 
<property name="messageSelector" value="JMSType = 'jmsTypeSaludoA'"/>
 +
</code>
  
 
== Ver también ==
 
== Ver también ==

Revisión del 12:05 27 oct 2009

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.

Creación del POJO

La clase que consumirá los mensajes que lleguen al destino JMS será un bean cualquier declarado en Spring, el cual deberá implementar la interfaz javax.jms.MessageListener. Por lo tanto, un MDB es un MDP; es decir, un MDP implementa la misma interfaz que implementan los MDB. Por lo tanto, podemos usar a un MDB existente como si fuera un MDP.

Un ejemplo de este bean podría ser:

package com.dosideas.mdp;

import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage;

public class HolaMundoMdp implements MessageListener {

   public void onMessage(Message message) {
       TextMessage textMessage = (TextMessage) message;
       //procesar mensaje...
   }

}

Configuración básica de Spring

Lo siguiente es realizar la configuración correspondiente en los archivos de configuración de Spring. La clase clave de esta configuración es org.springframework.jms.listener.DefaultMessageListenerContainer, el cual declara al bean que se encargará de conectarse al destino JMS para consumir los mensajes y delegar su procesamiento a nuestro MDP. Esta clase permite configurar la cantidad de consumidores concurrentes, transaccionalidad, selectores y mucho más.

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

   <bean id="mdp.HolaMundoMdbp" class="com.dosideas.mdp.HolaMundoMdp"/>
   <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" />
   <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name="jndiTemplate">
           <ref bean="jndiTemplate" />
       </property>
       <property name="jndiName">
           <value>jms/ConnectionFactory</value>
       </property>
   </bean>
   <bean id="queue" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name="jndiTemplate">
           <ref bean="jndiTemplate" />
       </property>
       <property name="jndiName">
           <value>jms/EjemploQueue</value>
       </property>
   </bean>
   <bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
       <property name="concurrentConsumers" value="5" />
       <property name="connectionFactory" ref="connectionFactory" />
       <property name="destination" ref="queue" />
       <property name="messageListener" ref="mdp.HolaMundoMdbp" />        
   </bean>

</beans>

Propiedades de la clase DefaultMessageListenerContainer

Si el mensaje a consumir tiene un JMSType específico, es necesario definirlo, con la siguiente propiedad:

<property name="messageSelector" value="JMSType = 'jmsTypeSaludoA'"/>

Ver también