Mostrando entradas con la etiqueta TOMEE. Mostrar todas las entradas
Mostrando entradas con la etiqueta TOMEE. Mostrar todas las entradas

sábado, marzo 14, 2015

Apuntes de TOMEE

1.- Configurar ActiveMQ como componente externo.
    <tomee>
        <Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
            # Esto indica que el ActiveMQ broker no inicia cuando arranca el TOMEE
            BrokerXmlConfig  =
            ServerUrl = tcp://someHostName:61616
        </Resource>

        <Resource id="MyJmsConnectionFactory" type="javax.jms.ConnectionFactory">
            ResourceAdapter = MyJmsResourceAdapter
        </Resource>

        <Container id="MyJmsMdbContainer" ctype="MESSAGE">
            ResourceAdapter = MyJmsResourceAdapter
        </Container>

        <Resource id="FooQueue" type="javax.jms.Queue"/>
        <Resource id="BarTopic" type="javax.jms.Topic"/>
    </tomee>
 
El "ServerUrl" debe ser modificado para que comtemple el host y el puerto que el 
Proceso ActiveMQ. Los diferentes formatos de URL que ActiveMQ.
 
 
2.- Configurar ActiveMQ como componente interno
 
   
    <tomee>
        <Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
            BrokerXmlConfig =  broker:(tcp://someHostName:61616)
            ServerUrl       =  tcp://someHostName:61616
        </Resource>

        <Resource id="MyJmsConnectionFactory" type="javax.jms.ConnectionFactory">
            ResourceAdapter = MyJmsResourceAdapter
        </Resource>

        <Container id="MyJmsMdbContainer" ctype="MESSAGE">
            ResourceAdapter = MyJmsResourceAdapter
        </Container>

        <Resource id="FooQueue" type="javax.jms.Queue"/>
        <Resource id="BarTopic" type="javax.jms.Topic"/>
    </tomee>

La propiedad "BrokerXmlConfig" invoca a ActiveMQ para que inicie 
en conjunto cuando arranca el TOMEE con su host y puerto asignado 
en este caso `someHostName` and `61616` 
 
3.- Estructura de los archivos 

  • aplicacion.war
    • pages
      • *.jsp
    • images
      • *.jpg
    • META-INF
      • ejb-jar.xml
      • MANIFEST.MF
      • openejb-jar.xml ( Opcional )
    • stylesheet
      • *.css
    • WEB-INF
      • classes
        • de
          • Directorio con las clases
        • log4j.xml
        • hibernate.cfg.xml
      • lib
        • *.jar
      • web.xml
    • index.jsp
 4.- Configurar Propiedades del MDB.
 
En esta URL: CONFIGURACION DEL EJB-JAR.XML 
Aqui un ejemplo: Un Ejemplo
 
5.- Configurar Persistencia de activemq con Mysql.
 
Tomado desde esta url: Persistencia Activemq y Mysql 
 
Revisar el archivo activemq.xml que esta ubicado en la carpeta donde esta instalado 
el activemq/conf 


<broker xmlns="http://activemq.apache.org/schema/core" brokerName="mibroker" persistent="true"
    useShutdownHook="false" >
    ...
    <persistenceAdapter>
        <jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#mysql-ds"/>
    </persistenceAdapter>
    ...
</broker>
<!-- Fuera del tag 'broker' -->
<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
    <property name="username" value="usuario"/>
    <property name="password" value="passwordBBDD"/>
    <property name="poolPreparedStatements" value="true"/>
</bean>
Se tiene que copiar el driver de Mysql a la carpeta lib del activemq.


Tambien es posible utilizar una base de datos que es muy eficiente para este tipo de cosas, aqui un pequeño ejemplo de como hacerlo:



<broker xmlns="http://activemq.apache.org/schema/core" brokerName="mibroker" persistent="true"
    useShutdownHook="false" destroyApplicationContextOnStop="false">
    ...
    <persistenceAdapter>
        <kahaPersistenceAdapter directory="${activemq.base}/activemq-data" maxDataFileLength="33554432"/>
    </persistenceAdapter>
    ...
</broker>

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.