sábado, marzo 07, 2015

Integracion de ActiveMQ y TomeePluMe

Explicaremo brevemente la incorporacion del ActiveMq y TomEE.

Para ésta configuración usaré las siguientes versiones de ActiveMQ y Tomcat:

Librerías necesarias:
1.- INSTALACION TOMEE.
Para el caso vamos a instalar el TOMEE en la siguiente carpeta: c:\TomeePluMe.
Seguidamente asignamos a la variable de ambiente TOMCAT_HOME=c:/Tomee

2.- INSTALACION ACTIVEMQ. 
Lo instalamos en c:\apache-activemq
 ACTIVEMQ_HOME:c:/apache-activemq

Seguidamente copiamos las siguiente librerias a
TOMCAT_HOME/common/lib

  • activemq-all-X.X.X.jar (ACTIVEMQ_HOME)
  • slf4j-log4j12-X.X.X.jar (ACTIVEMQ_HOME/lib/optional)
  • log4j-X.X.XX.jar (ACTIVEMQ_HOME/lib/optional)
Reemplazar las librerias de existir.

Configuración del archivo server.xml

Procederemos modificar el archivo server.xml que se encuentra en TOMCAT_HOME/conf para incluir lo siguiente dentro del elemento GlobalNamingResources:



















<GlobalNamingResources>
 <Resource name="jms/ConnectionFactory"
  auth="Container"
  type="org.apache.activemq.ActiveMQConnectionFactory"
  description="JMS Connection Factory"
        factory="org.apache.activemq.jndi.JNDIReferenceFactory"
  brokerURL="tcp://127.0.0.1:61616"
  brokerName="activeMQBroker"/>
     
 <Resource auth="Container"
          name="jms/MiCola"
          type="org.apache.activemq.command.ActiveMQQueue"
          description="Cola de mensajes"
          factory="org.apache.activemq.jndi.JNDIReferenceFactory"
          physicalName="laCola.queue"/>    
</GlobalNamingResources>
Cabe resaltar que el brokerURL se especifica el servidor en dónde está corriendo Apache ActiveMQ, en este caso se encuentra en la misma máquina. Además, es necesario especificar todas las colas y tópicos a los cuáles se va a conectar, en este caso voy a conectarme a la cola laCola.queue

Configuración del archivo context.xml

En el archivo context.xml que se encuentra en TOMCAT_HOME/conf incluir lo siguiente:







<Context>    
 <ResourceLink global="jms/ConnectionFactory" name="jms/ConnectionFactory" type="javax.jms.ConnectionFactory"/>
 <ResourceLink global="jms/MiCola" name="jms/MiCola" type="javax.jms.Queue"/> 
</Context>

Configuración del archivo web.xml

En el descriptor de despliegue web.xml que se encuentra en TOMCAT_HOME/conf incluir lo siguiente:



<resource-ref>
        <description>JMS Connection</description>
        <res-ref-name>jms/ConnectionFactory</res-ref-name>
        <res-type>javax.jms.ConnectionFactory</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
    <resource-ref>
        <res-ref-name>jms/MiCola</res-ref-name>
        <res-type>javax.jms.Queue</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>


Laa configuración, la conexión a ActiveMQ será visible para cualquier aplicación web desplegada sobre Tomcat.

Ejemplo Java para conexión a ActiveMQ y envió de un mensaje

Se deatlla un ejemplo en código Java para conectarnos al bróker de mensajería y envíar un mensaje de texto.


//...
Context initContext = new InitialContext();
Context jndiContext = (Context) initContext.lookup("java:comp/env");
ActiveMQConnectionFactory qFactory = (ActiveMQConnectionFactory)jndiContext.lookup("jms/ConnectionFactory");
QueueConnection qConnect = qFactory.createQueueConnection();
qConnect.start();
             
QueueSession qSession = qConnect.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue requestQ = (Queue) jndiContext.lookup("jms/MiCola");
             
QueueSender qSender = qSession.createSender(requestQ);
ObjectMessage msg = qSession.createObjectMessage(new String("Hola, ActiveMQ"));
qSender.send(msg);
qConnect.stop();


ActiveMQ webconsole allows you to see broker information from a webapp. You can send and see messages for queues, topic…
Se tiene problemas con las nuevas versiones de TOMEE, de aquello resulta complicado la visualizacion de la consola.
 
Para ello se tiene un simple solucion:


Solo edite el archivo conf/system.properties y adicione estas lineas:

# to use local broker inside tomee
# but other config exist for remote broker
# see activemq webconsole doc
webconsole.type = invm
 
# workaround for conflicts between activemq webapp and tomee
# Note: it will be part of TomEE 1.6.1 out of the box
openejb.classloader.forced-skip = org.apache.activemq.broker.
openejb.classloader.forced-load = org.apache.xbean.spring.



No hay comentarios: