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