Crear un proyecto de Mule ESB con Mule Studio

7
16291

Crear un proyecto de Mule ESB con Mule Studio

Índice de contenidos.

1. Introducción

En este tutorial vamos a crear un proyecto de Mule ESB con la herramienta Mule Studio. Esta herramienta nos permitirá crear flujos de mensajes y servicios de Mule de forma gráfica lo cual es una gran ventaja para empezar a trabajar con este ESB ya que en ocasiones lo más complicado es la configuración del fichero mule-config.xml y este IDE nos facilita esta tarea.

2. Entorno

  • MacBook Pro 15′ (2.4 GHz Intel Core i5, 4GB DDR3 SDRAM).
  • Sistema Operativo: Mac OS X Snow Leopard 10.6.8
  • JDK 1.6.0_29
  • Mule 3.2.0

3. Instalación de Mule Studio

Mule Studio se distribuye como un Eclipse IDE modificado. Está disponible para Windows, Mac OS X 10.6 y Linux. La instalación es sencilla, descargarlo de la página oficial y descomprimir en un directorio.

4. Crear un proyecto con Mule Studio

Una vez instalado Mule Studio ya sólo queda ponernos manos a la obra y empezar con nuestro primer proyecto Mule desde la opción New Mule Project. Le damos un nombre y una descripción a nuestro proyecto que consistirá en una aplicación encargada de recoger mensajes que le llegan vía Ajax, convertirlos a String y guardarlas en ficheros del disco.

En la siguiente pantalla nos pide el nombre para el fichero que servirá para dibujar el flujo de mensajes con la herramienta gráfica.

Una vez creado el proyecto vemos que nos aparece a la derecha una paleta con todos los componentes que podemos añadir a un flujo agrupadas por categorías: endpoints, scopes, componentes, transformers, filters, flow control y cloud connectors.

El flujo contendrá un endpoint de ajax que recoge el objeto que le llega desde una petición, se lo pasa a un transformador que convierte el objeto ajax a string y a su vez se lo pasa a otro endpoint que se encarga de guardarlo en disco con un determinado formato. Entre medias también meteremos un log para ver el contenido de las peticiones. Para haceros una idea del contenido final del flujo podéis en la siguiente captura. Cada elemento lo iremos explicando con detalle.

Si vemos el contenido del XML generado podemos hacernos un poco la idea de lo que se encarga este IDE. La principal ventaja es que no tendremos que escribir nosotros el fichero de configuración de Mule sino que la herramienta lo hará por nosotros.

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core" 
		xmlns:ajax="http://www.mulesoft.org/schema/mule/ajax" 
		xmlns:file="http://www.mulesoft.org/schema/mule/file" 
		xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
		xmlns:core="http://www.mulesoft.org/schema/mule/core" 
		xmlns:http="http://www.mulesoft.org/schema/mule/http" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="CE-3.2.1" 
		xsi:schemaLocation="
			http://www.mulesoft.org/schema/mule/ajax http://www.mulesoft.org/schema/mule/ajax/current/mule-ajax.xsd 
			http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd 
			http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
			http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd ">

    <ajax:connector name="register" serverUrl="http://localhost:8081/registerPerson" 
    				   jsonCommented="true" doc:name="Ajax Connector" disableReplyTo="true" />
    
    <flow name="messages_register_flow" doc:name="messages_register_flow">
        <ajax:inbound-endpoint channel="/register/mesage" connector-ref="register" doc:name="Ajax Channel"/>
        <object-to-string-transformer doc:name="Object to String"/>
        <echo-component doc:name="Echo"/>
        <file:outbound-endpoint 
        		path="/tmp/workspace/messages_register/out" 
        		outputPattern="#[function:datestamp:dd-MM-yy]_#[function:systime].txt" doc:name="File"/>
    </flow>
</mule>

El primer elemento es un endPoint que recoge las peticiones HTTP servidas mediante AJAX a la dirección que nosotros le digamos. Para ello tenemos que añadir un conector al flujo de Mule desde la opción ‘Global Elements’ dentro de vista que muestra nuestro flujo. En la pantalla debemos añadir las propiedades genéricas para configurar el nombre del conector y la URL donde estará escuchando el mismo.

Haciendo doble clic en el elemento de Ajax del flujo se nos abre la ventana de propiedades donde es obligatorio indicar el canal para el endpoint donde atiende las peticiones, en nuestro ejemplo en /register/message.

En la misma ventana en la pestaña References tenemos que hacer referencia al conector que configuramos anteriormente llamado ‘register’ que nos aparecerá en el desplegable.

A continuación el objeto Ajax queremos procesarlo y sacar el mensaje que lleva dentro, es decir la cadena de texto que envia el usuario junto con la petición. Para ello añadimos el transformador de objeto a string. Mule automáticamente mediante este transformador por defecto determinará el tipo de objeto que le llega y lo convertirá a String.

Para poder ir trazando las peticiones y ver que es lo que está haciendo el flujo de mensajes añadimos también un componente de log que es el componente ‘Echo’ que nos irá sacando por consola el contenido del payload resultante de la petición.

Por último el mensaje será almacenado en un fichero del disco mediente el endPoint de fichero donde le indicamos el path del directorio donde almacenar los mensajes y un formato para el nombrado del mismo.

Para probar el ejemplo debemos hacer una página HTML con un formulario donde un usuario pueda escribir mensajes que serán enviados al servidor vía AJAX donde serán recogidos por el endPoint configurado y redirigidos a una salida en disco.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="/wp-content/uploads/tutorial-data/mule-resource/js/mule.js"></script>
<title>Guardar mensajes en disco del servidor</title>
<script type="text/javascript">
	function register() {
  		mule.rpc("/register/message", document.getElementById('message').value, callBack);
	}

	function callBack(message) {
	    document.getElementById("response").innerHTML = "Respuesta: " + message.data + "\n";
	}
</script>

</head>
<body>
<fieldset>
		<legend>Guardar mensajes en disco del servidor</legend>
		Introduce un texto: <input type="text" id="message" />
		<input type="button" onclick="register()" value="Enviar"/>

<div id="response"></div>
</fieldset>
</body>
</html>

En la función ‘register’ hacemos una petición a través del API Javascript de Mule para hacer llamadas RPC, por eso debemos incluir el fichero Javascript mule-resource/js/mule.js que está disponible dentro del servidor stand-alone de Mule y estará disponible una vez que despleguemos nuestra aplicación.

La función mule.rpc recibe como primer argumento el canal por el cual se va a realizar la petición, el segundo es el objeto que deseamos enviar, en este caso el mensaje que introduce el usuario y el último argumento define una función de callback que será la que procese la respuesta.

La página resultante después de enviar una petición queda así:

Para terminar el ejemplo, en el disco de salida comprobamos que están llegando los mensajes y se está creando un fichero por cada uno de ellos.


4.Conclusiones

El ejemplo que hemos visto en este tutorial realizado de forma gráfica con Mule Studio no es un ejemplo demasiado complicado. Si repasamos el contenido del ejemplo podemos ver que hay una aplicación web corriendo en un servidor, a través de un cliente HTML con un formulario que mediante AJAX realiza peticiones a un servidor que las recoge, devuelve una respuesta mostrando el contenido del mensaje recibido y a su vez almacena las peticiones en ficheros del disco.

Esto que no es complejo seguro que nos haría falta escribir mucho código fuente y como habéis visto, únicamente hemos escrito el código del cliente, unas 20 líneas de HTML y Javascript, todo lo demás nos lo ha proporcionado Mule. Con esto podemos ver la potencia de esta herramienta donde con muy poco código podemos comunicar diferentes servicios y sobre todo, hacerlos transparentes unos de otros.

Espero que te haya servido de ayuda.

Un saludo. Juan.

7 COMENTARIOS

  1. Buenas tardes, es interesante este tutorial, yo estoy siguiendo los pasos. Pero creo que faltan los pasos para saber como o donde se deploya. Yo intente hacerlo desde Run-As, muestra la consola sin errores, y cuando voy al navegador con la url http://localhost:8081/registerPerson muestra el mensaje HTTP ERROR 404. Podrias comentar que pasos estare obviando. Gracias por tu ayuda.

  2. Hola la pagina me abre bien, pero tengo problema cuando le doy a enviar al texto que escribí, es decir no pasa nada, hago bien los pasos que explicas pero no se que hago , supongo que es ese enlace entre ajax pero no lo detecto, creo que es el canal porque no entendí esa parte

  3. Hola,

    En mi opinión este tutorial tiene un error importante: No dice cómo enlazar la página HTML.

    Para quienes lo quieran saber se hace del siguiente modo:

    Al configurar el conector de Ajax hay que rellenar el campo \\\’Resource Base\\\’ especificando la ruta del directorio (no del fichero) donde reside el fichero HTML. Por ejemplo, se pueder crear la carpeta \\\’src/main/app/docroot\\\’ y especificarla en dicho campo.

    Hecho esto, se accede a la URL \\\’http://localhost:8081/registerperson/send.html\\\’ (En mi caso \\\’send.html\\\’ es el nombre del fichero cuyo contenido se muestra al final del tutorial) y ya tenemos el formulario funcionando.

    Espero haberos ayudado!

  4. Buenas noches muy buen tutorial pero lamentablemente al ultimo no explicas como enlazar la pagina html con el proyecto, sera posible que nos puedas facilitar el proyecto muchas gracias…

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad