Primeros pasos con ServiceMix 4.4.0

Primeros pasos con ServiceMix 4.4.0

0. Índice de contenidos.

1. Entorno

Este tutorial está desarrollado usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 2Ghz Intel Core i7 (4 núcleos) 8Gb de RAM
  • Sistema Operativo: Mac OS X 10.7.2 (Lion)
  • Versión de java SDK 6 instalada en el sistema

2. Introducción

En este tutorial veremos a groso modo este potente ESB (Enterprise Service Bus) opensource y el objetivo será familiarizarnos con el uso y las tecnologías que utiliza.

Las principales características, es que está basado en componentes opensource totalmente actualizados:

3. Arquitectura

La arquitectura actual es la siguiente:

arquitectura

Donde podemos apreciar los diferentes componentes comentados en la introducción.

Principalmente podemos construir servicios basados en patrones de integración de dos formas posibles, utilizando Apache Camel o utilizando los componentes JBI que lleva incorporados. JBI o Java Business Integration pretendía ser el estandar ESB para integración de servicios, pero su primera versión llegó tarde y la mayoría de ESBs de pago así como algunos open source no lo implementan. Actualmente tiene dos versiones (Servicemix es compatible con ambas), aunque la versión 2.0 está muy verde:

La arquitectura de JBI es la siguiente:
arquitectura JBI

Podemos destacar los siguientes componentes:

  • Mensajería basada en WSDL 1.1 o 2.0
  • NMR o Normalized Message Router: es el componente principal de JBI, ya que es el encargado de realizar el intercambio de mensajes en todos los componentes, a groso modo, el manejador del bus.
  • Service Engines: proveen la lógica de negocio y/o transformaciónes o consumidores de otros servicios.
  • Binding Components: proveen la conectividad con servicios externos a ServiceMix
  • JMX: permite la instalación de componentes, control y gestión del ciclo de vida de servicios entre otros. Con la inclusión de Apache Karaf, la mayoría de estas tareas se pueden realizar por consola, aunque eso lo veremos mas adelante.

4. Instalación

Primero descargaremos la versión 4.4.0 desde la web de ServiceMix: http://servicemix.apache.org/downloads.html. En mi caso será la versión para mac, aunque a nivel de gestión este tutorial es válido para plataformas windows (simplemente varían los ejecutables). Una vez descargado lo descomprimiremos abriendo una consola:

una vez descomprimido, ejecutamos desde la consola el archivo “<SERVICEMIX_HOME>/bin/servicemix” y obtendremos una ventana como la siguiente:

inicio servicemix

Para apagarlo, tal y como indica en la consola tendremos que escribir osgi:shutdown en la consola Karaf. Nos pedirá confirmación y saldremos de la consola y apagaremos servicemix:

parada servicemix

Con esto ya hemos aprendido lo más básico de servicemix, en el siguiente punto veremos como utilizar la línea de comandos de Karaf.

5. Shell y web de Apache Karaf

Lo primero que realizaremos será iniciar servicemix como se indicaba en el punto anterior. Lo primero que haremos será introducir el comando “osgi:list” que nos permitirá realizar un listado de los “bundle” disponibles:

Donde podemos observar una tabla con los siguientes componentes:

  • ID: el identificador del bundle
  • State: el estado del bundle
  • Blueprint/Spring: mostrarán si los bean se han creado correctamente.
  • Level: muestra el orden de arranque
  • Name: muestra el nombre del bundle
Apache Karaf trabaja con bundles y posee las siguientes características:
  • Despliegue en caliente: de OSGi bundles monitorizando archivos jar en el directorio “<SERVICEMIX_HOME>/deploy”. También soporta “exploded bundles” (jar descomprimidos) y descriptores propios (blueprint y spring).
  • Configuración Dinámica: todos los servicios se configuran habitualmente a través del servicio OSGi ConfigurationAdmin. Dicha configuración se puede modificar utilizando archivos de propiedades dentro del directorio “<SERVICEMIX_HOME>/etc directory”. Esta configuración está monitorizada y los cambios realizados se propagaran a los servicios en caliente.
  • Centralización del Log: utilizando un backend de log centralizado por log4j, soporta variedad de APIs (JDK 1.4, JCL, SLF4J, Avalon, OSGi)
  • Provisionamiento: la provisión de bibliotecas o aplicaciones puede realizarse de diferentes formas.
  • Integración nativa con el SSOO huesped: puede integrarse como servicio dentro del SSOO.
  • Consola de comandos extensible: dispone de una interfaz de comandos desde la que se pueden realizar casi todas las tareas de mantenimiento de servicios, así como de la plataforma.
  • Acceso remoto: se puede utilizar ssh para enviar comandos a la consola.
  • Seguridad basada en JAAS
Tal y como se mostraban en las últimas líneas del los bundles instalados en el sistema:

Tengo instalada y activa una consola web, que se puede instalar mediante el comando:

Una vez instalada podemos ver su estado mediante el comando:

Para ver la consola web abrimos un navegador con la siguiente ruta http://localhost:8181/system/console donde por defecto tendrá el usuario/password smx. Deberemos ver una pantalla parecida a esta:

Karaf Web Console

Desde esta consola web podremos realizar prácticamente lo mismo que desde la consola de comandos.

Otros comandos interesantes son:

  • log:display: muestra las últimas líneas de log
  • log:display-exception: muestra la última excepcion producida
  • log:set NIVEL: establece el nivel de log que se mostrará
  • log:tail: muestra el log en tiempo de ejecución modificandose cuando se produzcan cambios en la salida de log

6. Servicio de prueba

Una vez vista por encima la arquitectura y las características de ServiceMix, vamos a hacer un ejemplo muy simple, un router que enviará un archivo de un directorio a otro (en mi caso, desde “/Users/cleon/input” a “/Users/cleon/output”). Para ello escribiremos el siguiente archivo xml:

camelinputoutput.xml

Y lo copiamos al directorio “<SERVICEMIX_HOME>/deploy”. Si observamos el log veremos que si se ha desplegado correctamente:

Ahora en mi caso copiaré el mismo xml de descripción del servicio al directorio de entrada. Si todo ha ido bien, veremos que rapidamente mueve el archivo al directorio destino. Visualizando los logs en la consola:

Con esto ya tenemos un ejemplo básico sobre servicemix.

7. Conclusiones

Este es el primer tutorial de ServiceMix que iremos complementando con el tiempo, ya que se trata de un producto muy potente con muchos componentes y dada su escasa documentación (en las versiones 3.X ya era escasa, ahora en la 4.X lo es más) el proceso de aprendizaje es mas complejo. Aún así, animo a utilizarlo, ya que es un componente muy potente.

Cualquier duda o sugerencia podéis comentarlo.

Saludos.