Seguimos ampliando nuestros conocimientos de Mule ESB y tras conocer las nociones básicas, vamos a mostrar los elementos básicos para poder hacer nuestros propios programas.
Elementos básicos para programar
Mulesoft nos ofrece el entorno de desarrollo Anypoint Studio para programar, con su componente gráfico para crear desarrollos. Este componente nos permite escribir código de manera mucho más sencilla a través de “cajitas” que arrastraremos al flujo. Cada “cajita” representa una o un conjunto de sentencias que solemos usar para llevar a cabo un programa.
Vamos a hacer un repaso de las más importantes con las cuales estaremos preparados para hacer prácticamente de todo. Anypoint Studio ofrece muchas más de las que mencionamos aquí, pero todas las demás parten de éstas. Si tenéis dudas sobre algún componente en concreto poneros en contacto con nosotros y os explicamos lo que necesitéis.
Anypoint Studio nos ofrece una serie de herramientas a través del Mule Palette que nos ayudarán a la hora de programar. Éste está situado a la izquierda de la vista Mule Design. Vamos a ir viendo cada apartado, explicando que contiene cada agrupación y destacando los más importantes dentro de éstas.
Conectors
Este grupo contiene los famosos conectores de Mule ESB. Se trata de todos aquellos elementos que permiten realizar conexiones con otros sistemas. Tenemos conectores para las principales tecnologías para comunicaciones como HTTP, FTP, IMAP, JMS, POP3, SMTP, TCP o UDP. Todos ellos requieren de una configuración, llamada Connector Configuration, donde se definen las características de la conexión, típicamente el host, puerto, etcétera.
Algunos de estos conectores, como HTTP, pueden funcionar como un conector de entrada o de salida, es decir, pueden ser utilizados para recibir peticiones o realizar peticiones. El Connector Configuration será distinto dependiendo si es de entrada o de salida.
Os mostramos algunas de sus cajitas.
Además de estos conectores básicos que incluye Mule ESB por defecto, pueden descargarse e instalarse conectores para otros sistemas que facilitan enormemente las integraciones. Algunos de ellos son de pago y otros son gratuitos.
Algunos ejemplos de conectores ya existentes son Magento, SAP, Salesforce, Twitter y muchos más. Cabe destacar que no es estrictamente necesario que uses conectores de pago, puedes hacer lo mismo con los conectores básicos solo que te llevará algo más de tiempo.
Scopes
Este conjunto de elementos nos facilitan la agrupación de código (cajas) de manera que tenga un comportamiento especial respecto al resto de la ejecución. Suena muy abstracto pero no se nos ha ocurrido una manera mejor de explicarlo. Se ve muy claro comentando los más importantes:
- Async. Permite ejecutar de forma completamente asíncrona todos los elementos que metas dentro de éste. Muy útil de cara a todos aquellos procesos de los cuales no deseamos obtener un resultado.
- For each. Sobran las palabras. Es un loop (bucle) como el de cualquier otro lenguaje de programación. Recorrerá la colección que se le indique en el campo Collection, y pondrá en el Payload cada elemento de ésta por cada iteración.
- Until Successful. Uno de nuestros favoritos, se trata de un bucle que se repite mientras dentro de él se produzca una excepción. Muy útil de cara a intentar conexiones a otros sistemas, de esta manera conseguimos asegurarnos de que conseguimos contactar con ellos. Además permite definir un número máximo de intentos y el tiempo que debe esperarse entre los intentos.
Components
Este apartado contiene una amplia variedad de “cajitas” enfocadas al desarrollo de código, y os llevaréis las manos a la cabeza diciendo “¡Pero si no hacía falta escribir código! ¡Que me devuelvan mi dinero!”.
Bueno, calma, en una gran cantidad de casos no necesitarás hacer uso de los componentes. Aún así Mule te ofrece la versatilidad de poder escribir tus propios Scripts en varios lenguajes (JavaScript, Groovy, Ruby y Python), clases Java y expresiones en el lenguaje de Mule (Mule Expression Language, MEL) que es muy similar a Java. Todo esto te da la potencia de poder personalizar al máximo tus programas.
Os mostramos la representación gráfica de algunas de estos componentes.
Todas las cajitas tienen una parte común y es que, pulsando sobre ellas, podremos añadir código o elegir un fichero donde se encuentre el código. Nuestra recomendación es que se añada el código directamente en el componente salvo que vaya a ser reutilizado, puesto que facilita el entendimiento del flujo y es más cómodo 🙂 .
Además en los componentes encontraremos dos elementos importantes: Logger y Flow-Reference. El primero parece obvio para lo que sirve, nos permite imprimir una línea de log indicando el mensaje que queremos mostrar en la consola. El segundo, Flow-Reference, es bastante intuitivo también, nos permite redirigir la ejecución de un flujo a otro flujo o subflujo.
Transformers
Este grupo contiene todos aquellos transformadores básicos entre tipos de datos. Ofrece conversiones de XML, JSON, objetos, DOM, etcétera. Con ellos podremos convertir los datos al formato que necesiten los sistemas que intentamos conectar.
Dentro de estos transformadores se encuentran también:
- Set payload. Permite asignar un valor en Payload.
- Variable. Permite crear y asignar valor a una variable o eliminarla.
- Session variable. Permite crear y asignar valor a una variable de sesión o eliminarla.
- Attachment. Permite crear y asignar valor a un adjunto o eliminarlo.
Filters
Como su propio nombre indica, este grupo contiene filtros. Éstos permiten detener la ejecución de un flujo o bucle y el más elemental es Expression Filter. Si pulsamos sobre éste podremos escribir una expresión que en el momento que su resultado sea false parará la ejecución del punto donde se encuentre.
Este componente es como un if de cualquier otro lenguaje de programación, siendo todo lo que se encuentre detrás de él parte del contenido de la sentencia if que se ejecutará en caso de que la expresión resulte verdadera.
Flow Control
En este apartado tendremos todos los elementos necesarios para controlar un flujo. Incluye varios mecanismos, más o menos complejos, que ofrecen un gran número de posibilidades para gestionar la ejecución de un flujo. Nosotros vamos a destacar dos de los más usados:
- Choice. Permite elegir entre distintos caminos por donde continuará la ejecución, dependiendo de una o varias expresiones que le indiquemos.
Para controlar qué rama se ejecuta, dispone de un cuadro donde se especifica la expresión y el camino que se ejecutará.
- Scatter-Gather. Es un Flow Control muy interesante que nos permite ejecutar varias ramas en paralelo, esperando a que todas ellas terminen para poder continuar con la ejecución del flujo. Es un elemento que nos ayuda especialmente cuando necesitamos hacer peticiones a diferentes sistemas de forma simultánea para obtener información y después trabajar con ella. Esto puede suponer una considerable mejora del rendimiento, respecto a su ejecución en serie.
Error Handling
Son herramientas para la gestión de excepciones que se producen durante la ejecución. Existen varias opciones en este apartado pero sin duda la más sencilla y básica es Catch Exception Strategy. Se trata de un elemento que se incorpora en los flujos (en el cuadro Error handling 😉 ) para capturar las excepciones que puedan lanzarse.
Al igual que en Java, cuando se produce una excepción la ejecución se detiene y continúa por el “catch” más cercano. El componente Catch Exception Strategy se comporta de igual manera.
Ejemplo
Hemos considerado que era buena idea mostrar algún ejemplo de “código”, donde puedan verse los elementos que hemos comentado en este artículo. Dejamos aquí el ejemplo y además subiremos a nuestro repositorio de GitHub el proyecto por si os apetece echarle un ojo (recomendamos que lo abráis con Anypoint Studio que se entiende mejor que el XML que genera).
Os dejamos aquí el log que se registra en la consola al ejecutar este servicio.
Conclusiones
Y hasta aquí los elementos básicos que incorpora Mule para la programación. Como véis son muy sencillos pero como siempre os decimos, para cualquier duda o sugerencia dejadnos un comentario o poneros en contacto con nosotros.
Con todos estos elementos básicos, las nociones básicas ya explicadas y el artículo de cómo instalar Anypoint Studio tenéis todo lo necesario para embarcaros en vuestros primeros proyectos. ¡Adelante! ¡No tengáis miedo!
Por cierto, con esto no queremos decir que os dejemos solos 🙂 , ni mucho menos. Seguiremos con nuevas entregas teóricas y ejemplos prácticos de Mule ESB. ¡Hasta pronto!













Muy claro y didactico, no se nada de Mulesoft y con esto estoy empezando a comprender.
Muchas gracias! Nos alegramos que te sea de ayuda. Si tienes dudas o quieres proponernos algún tema háznoslo saber 🙂 Un saludo!