Seleccionar página

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;

        // ...

    }

    ....

}