miércoles, 14 de septiembre de 2016

Tareas programadas en WSO2 ESB. +Tips

Realizando el ejemplo “SimpleStockQuoteService” de WSO2-ESB 490 tuve algunos problemas, consulté algunos blog y di con la solución bastante rápido. Aquí les dejo el post completo más los tips con las soluciones de los errores para que lo logren a la primera.
La “tarea programada” es una de las muy útiles funcionalidades escondidas en WSO2 ESB 4.9.0. Ya esta versión está muy mejorada en comparación con las anteriores ya que son más estables y pueden ser utilizadas en ambientes clusterizados, etc. Así que manos a la obra.
1ro, Mi configuración: jdk1.7_25, WSO2-ESB 4.9.0, apache-ant 1.7.0 y notepad++. Todo esto bien configurado.
Lo siguiente será crear un servicio back-end, el ejemplo viene con un servicio Axis2 pre-configurado.
1. Cada servicio de ejemplo puede ser encontrado en carpetas separadas en el directorio <ESB_HOME>/samples/axis2Server/src. Estos pueden ser compilados y desplegados usando Ant desde cada directorio. Esto se hace tecleano el comando ant en una consola desde el direcprio requerido. Por ejemplo:
image
2. Lo siguiente, iniciaremos el servidor Axis2. Vallamos al directorio  <ESB_HOME>/samples/axis2Server aki viene el primer tip: abran el ejecutable “axis2server” (.sh para Linux o .bat para Windows) con el notepad++ y busquen este texto:
"%AXIS2_HOME%..\..\tmp\" y retiren el último \ salven y ejecuten usando una consola. Esto inicia el servidor Axis2 en HTTP Y HTTPS por los puertos 9000 y 9002 respectivamente.
3. Vamos al ESB (si no lo han iniciado, inicienlo y entren) y añadimos una secuencia.
i.Click en Sequences debajo de Service Bus en el menú de la izquierda.
ii.Click en Add Sequences.
iii.Luego click en "switch to source view".
image
iv.Eliminen todo lo que hay en el cuadro de texto y agreguen la secuencia siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="iterateSequence" xmlns="
http://ws.apache.org/ns/synapse">
    <iterate attachPath="//m0:getQuote"
        expression="//m0:getQuote/m0:request" preservePayload="true"
        xmlns:m0="
http://services.samples" xmlns:ns="http://org.apache.synapse/xsd">
        <target>
            <sequence>
                <call>
                    <endpoint>
                        <address uri="
http://localhost:9000/services/SimpleStockQuoteService"/>
                    </endpoint>
                </call>
                <log level="custom">
                    <property
                        expression="//m0:getQuoteResponse/m0:return/ax21:lastTradeTimestamp/child::text()"
                        name="Stock_Quote_on" xmlns:ax21="
http://services.samples/xsd"/>
                    <property
                        expression="//m0:getQuoteResponse/m0:return/ax21:name/child::text()"
                        name="For_the_organization" xmlns:ax21="
http://services.samples/xsd"/>
                    <property
                        expression="//m0:getQuoteResponse/m0:return/ax21:last/child::text()"
                        name="Last_Value" xmlns:ax21="
http://services.samples/xsd"/>
                </log>
            </sequence>
        </target>
    </iterate>
</sequence>

2do tip: fijense ke las expresiones xpath empiezan por: //m0:getQuoteResponse/m0:return/ en algunos blogs consultados la expresión es: //ns:return/ al parecer hubo algún cambio entre versiones, tanto en el namespace como en el arbol de respuesta. Esto causa que los logs en consola no muetren nada ya que el camino de la consulta es incorrecto.
Nota: Si los back-end se ejecutan en otro servidor, deben cambiar la direccion del endpoint.
v. Guarden y cierren la vista.
4. Ahora agreguemos la tarea programada:
Click en Scheduled Tasks bajo Service Bus en el menú de la izquierda seleccionen add task y llenen los campos como les comento a continuación.
image
i. Task Name – CheckQuote
ii. Task Group - synapse.simple.quartz
iii. Task Implementation - org.apache.synapse.startup.tasks.MessageInjector
iv. Set below properties 
sequenceName - Literal - iterateSequence
injectTo - Literal – sequence
message - XML - 
<m0:getQuote xmlns:m0="http://services.samples" xmlns:xsd="http://services.samples/xsd">
         <m0:request>
            <xsd:symbol>IBM</xsd:symbol>
         </m0:request>
         <m0:request>
            <xsd:symbol>MSTF</xsd:symbol>
         </m0:request>
         <m0:request>
            <xsd:symbol>WSO2</xsd:symbol>
         </m0:request>
      </m0:getQuote>

3er Tip: Algo parecido a lo anterior, se le agrega el namespace http://services.samples/xsd y se usa en “xsd:symbol” esto también tuvo cambios.
v. Trigger type - Single
vi. Count - 50 
Nota: Esto significa que la tarea se va a ejecutar 50 veces. Si quieren que se ejecute de forma indefinida, pongan el contador en –1.
vii. Interval (en secondos) – 10
Y eso es todo! Click en el botón Schedule y la tarea se ejecutará cada de 10 segundos, según el intervalo que configuramos. 
No obstante, aquí les dejo el xml completo de la tarea:
<task class="org.apache.synapse.startup.tasks.MessageInjector"
        group="synapse.simple.quartz" name="CheckQuote">
        <trigger count="100" interval="10"/>
        <property name="sequenceName" value="iterateSequence" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/>
        <property name="message" xmlns:task="http://www.wso2.org/products/wso2commons/tasks">
<m0:getQuote xmlns:m0="http://services.samples" xmlns:xsd="http://services.samples/xsd">
        

<m0:getQuote xmlns:m0="http://services.samples" xmlns:xsd="http://services.samples/xsd">
         <m0:request>
            <xsd:symbol>IBM</xsd:symbol>
         </m0:request>
         <m0:request>
            <xsd:symbol>MSTF</xsd:symbol>
         </m0:request>
         <m0:request>
            <xsd:symbol>WSO2</xsd:symbol>
         </m0:request>
      </m0:getQuote>

        </property>
        <property name="injectTo" value="sequence" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/>
    </task>
y aquí algunos pantallasos de las consolas de los servidoresÑ
image
image
Espero que les haya servido el post. Salu2.
Referencias:
http://sencs.blogspot.com/2015/08/how-to-schedule-task-with-wso2-esb-490.html
http://desarrollosoa.blogspot.com/2016/09/tareas-programadas-en-wso2-esb.html





































No hay comentarios:

Publicar un comentario