MDB con anotaciones POJO – EJB3 – @MessageDriven
Antaño (y sigue siendo válido) se configuraban las queues y las topics dejando un fichero .xml en el directorio deploy de JBoss AS.
En el siguiente ejemplo, tengo el fichero centralita-service.xml:
<!-- servicios requeridos por el servicio principal de neodoo centralita --> <server> <!-- topic jms de eventos y respuestas --> <mbean code="org.jboss.mq.server.jmx.Topic" name="Neodoo.centralita:service=Topic,name=CentralitaOutTopic"> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> <!-- queue jms para envio de comandos --> <mbean code="org.jboss.mq.server.jmx.Queue" name="Neodoo.centralita:service=Queue,name=CentralitaInQueue"> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> </server>
Con los EJB3 y las anotaciones POJO, este fichero no es necesario puesto que al instanciar el MDB si la queue/topic no existe, la crea según lo que hayamos puesto en @MessageDriven:
Ejemplo de Queue:
... import javax.annotation.Resource; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.ejb.MessageDrivenContext; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.Queue; import javax.jms.QueueConnectionFactory; import javax.jms.Topic; import javax.jms.TopicConnectionFactory; @MessageDriven(mappedName = "queue/CentralitaInQueue", activationConfig = { @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"), @ActivationConfigProperty(propertyName="destination", propertyValue="queue/CentralitaInQueue") } ) public class ConectorJBoss Conector implements MessageListener { /** Se ejecuta cuando se recibe un mensaje JMS */ public void onMessage(Message message) { ObjectMessage objMessage = (ObjectMessage) message; // ... } .... }
Ejemplo de Topic:
... import com.neodoo.centralita.client.ApduCentralita; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.ObjectMessage; @MessageDriven(mappedName = "topic/CentralitaOutTopic", activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/CentralitaOutTopic")//, //@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable")//, //@ActivationConfigProperty(propertyName = "clientId", propertyValue = "Topic1"), //@ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "Topic1") } ) public class CallCenterMessageListenerImpl implements MessageListener { /** Listener de la centralita */ private CallCenterMessageListener messageListener; /** Constructor */ public CallCenterMessageListenerImpl() { } /** Se ejecuta cuando se recibe un mensaje JMS */ public void onMessage(Message message) { ObjectMessage objMessage = (ObjectMessage) message; // ... } .... }
0 comentarios