Ir a Tecsisa.com
13mar/09

Tutorial: primeros pasos con Apache ServiceMix 4

El ESB Apache ServiceMix incorpora el estándar OSGi para seguir liderando la implantación de soluciones SOA open source. En este tutorial daremos los primeros pasos con Apache ServiceMix 4 para hacernos una idea de hasta dónde podemos llegar integrando servicios web e implementando procesos de negocio.

Antecedentes

Service Mix 4 con entorno OSGiCon la publicación de la versión 3.3, el proyecto Apache ServiceMix ha dado por concluido el desarrollo de un ESB compatible por completo con el estándar JBI.

Esta versión ha dado muestras de gran estabilidad y robustez y es la distribución de ServiceMix recomendada para cualquier proyecto real basado en esta tecnología.  Por supuesto, el mantenimiento de esta versión está garantizado y es de esperar que en los próximos meses aparezcan mini releases de mantenimiento que resuelvan los defectos detectados en la versión 3.3 del producto.

Dicho esto, en la actualidad el equipo de proyecto está centrado en el desarrollo de una nueva versión del ESB, completamente renovada y rediseñada para soportar una arquitectura basada en OSGi. En este sentido, Apache ServiceMix 4 se alinea con la corriente predominante en los nuevos desarrollos de servidores de aplicaciones Java como Sun Glassfish, Bea Weblogic o el SpringSource dm server.

OSGi en Apache ServiceMix

Apache ServiceMix 4 se articula en torno a 3 proyectos diferenciados que funcionan coordinadamente para permitir las características propias de un ESB en un entorno OSGi:

  • Apache ServiceMix Kernel
  • Apache ServiceMix NMR
  • Apache ServiceMix Features

El Kernel, es una implementación básica de un contenedor OSGi basada en Apache Felix al que se le han añadido ciertos bundles y otras características para hacerlo más versátil. Por citar algunas, el contenedor se ha provisionado con los bundles de Spring DM y se le ha dotado de una consola de comandos extensible que permite ejecutar un gran número de operaciones de mantenimiento sobre el contenedor. El carácter estándar de los bundles aportados por el Kernel le permitirían en principio funcionar sobre otros contenedores OSGi como por ejemplo Eclipse Equinox.

El NMR no es más que un conjunto de bundles desplegables sobre cualquier contenedor OSGi, especialmente sobre el propio ServiceMix Kernel. En el NMR reside el bus de servicios de ServiceMix así como la implementación del estándar JBI. Es importante hacer notar que, si bien el estándar JBI se seguirá soportando en ServiceMix 4, ya no se trata de la única alternativa posible a la hora de desarrollar soluciones SOA con ServiceMix.

En el contexto del proyecto Features se han desarrollado un conjunto de bundles especialmente pensados para funcionar sobre el Kernel en coordinación con el NMR. Principalmente hacen posible la integración de componentes ya disponibles en la versión 3, como CXF, ActiveMQ, o Camel, en el nuevo contexto OSGi. En definitiva, en este proyecto se implementan o integran los componentes que hacen de ServiceMix un producto ESB.

Adicionalmente a estos 3 componentes básicos, el proyecto está llevando a cabo la bundelización de un gran número de librerías Java que a día de hoy no se proveen de forma predeterminada como bundles OSGi. Estos bundles están disponibles en el repositorio de Maven 2 y pueden ser desplegados, no sólo en el Kernel, sino que en cualquier contenedor OSGi estándar.

Primeros pasos con Apache ServiceMix Kernel

Como hemos comentado anteriormente, el componente básico de Apache ServiceMix 4 es el Kernel. En los próximos días se procederá a la publicación de la versión 1.1.0 del Kernel pero ya está disponible como un tag de Subversion en el repositorio del proyecto. Por tanto, lo primero que haremos es exportarnos a un directorio local el código fuente del tag:

svn export http://svn.apache.org/repos/asf/servicemix/smx4/kernel/tags/kernel-1.1.0 smx-kernel-1.1.0

Una vez tengamos el código fuente en el directorio local smx-kernel-1.1.0, procedemos a construir la solución usando Apache Maven 2. Para ello, situados en la raíz del directorio ejecutamos:

mvn clean install -Dmaven.test.skip=true

Añadimos el ”-Dmaven.test.skip=true” para no ejecutar las pruebas unitarias y de integración del sistema. Si es la primera vez que construimos ServiceMix en el equipo, la costrucción tardará un rato dado que tiene que descargarse las dependencias.

Tras finalizar la construcción buscamos el ensamblado del kernel que podremos encontrar en:

smx-kernel-1.1.0/assembly/target

A continuación, copiamos la distribución del Kernel en una ubicación limpia. Según estemos en una plataforma basada en Unix o Windows usaremos la distribución apache-servicemix-kernel-1.1.0.tar.gz o apache-servicemix-kernel-1.1.0.zip respectivamente. Tras la copia descomprimimos el fichero en una ruta que a partir de ahora denominaremos smx-root.

Tras llevar a cabo los pasos anteriores ya disponemos de una distribución de Apache ServiceMix Kernel instalada en nuestro equipo.

Para arrancar el Kernel no necesitamos ningún parámetro de entorno salvo tener instalada y configurada una plataforma Java 1.5 o superior. Abrimos una consola o terminal, situamos el cursor en smx-root y ejecutamos:

> bin/servicemix (Unix)

> bin\servicemix (Windows)

La ejecución del comando anterior iniciará una instancia del Kernel y abrirá la consola con la que podremos interactuar con el contenedor para llevar a cabo las acciones de administración pertinentes. ServiceMix Kernel dispone de un sistema de consolas anidadas muy versátil que además podríamos extender para cubrir necesidades especiales.

Consola SMX Kernel

En todo momento ejecutando el comando help accedemos a la lista de comandos que podemos ejecutar con la consola:

Consola SMX Kernel

Para ver el Kernel en acción, vamos a instalar un ejemplo que permite ilustrar cómo es posible desplegar soluciones SOA en el Kernel con gran agilidad. El ejemplo consiste en una ruta o pipeline de Apache Camel que implementa un proceso de negocio muy sencillo: un timer que se ejecuta cada 2 segundos, una transformación posterior del mensaje y la salida por pantalla del mensaje resultante. Desde luego no es un ejemplo muy realista, pero permite hacerse una idea de qué clase de integraciones podríamos llegar a implementar usando esta combinación de componentes: ServiceMix Kernel y Camel.

Para poder desplegar el ejemplo, tenemos que instalar primero algunos bundles OSGi necesitados por Camel. Usaremos la subconsola osgi para llevar a cabo estas acciones. Primero ejecutamos en la consola:

> osgi

A partir de este momento, todos los comandos que ejecutemos serán de la consola osgi. Para salir de la consola OSGi basta con ejecutar exit y volveremos a la consola principal. A continuación ejecutar los siguientes comandos:

> install -s mvn:org.apache.geronimo.specs/geronimo-activation_1.1_spec/1.0.2

> install -s mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.stax-api-1.0/1.1.0

> install -s mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jaxb-api-2.1/1.1.0

> install -s mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jaxb-impl/2.1.6_1

> install -s mvn:org.apache.camel/camel-core/1.4.0

> install -s mvn:org.springframework/spring-tx/2.5.6

> install -s mvn:org.apache.camel/camel-spring/1.4.0

> install -s mvn:org.apache.camel/camel-osgi/1.4.0

Estas ejecuciones ilustran una de las maneras que presenta el Kernel para desplegar bundles OSGi, extraerlos directamente del repositorio de Maven 2. Si las dependencias no las tenemos en nuestra copia local del repositorio, Maven las descargará de Internet.

Para verificar que los bundles se han instalado correctamente ejecutar:

> list

La consola mostrará el listado de bundles OSGi instalados en el Kernel y el estado en el que se encuentran.

Consola SMX Kernel

Finalmente instalamos el bundle que contiene el ejemplo propiamente dicho. Tras la instalación, la consola nos mostrará el id del bundle instalado. Nos quedamos con ese número que nos hará falta más adelante:

> install -s mvn:org.apache.camel/camel-example-osgi/1.4.0

Una vez instalado el bundle del ejemplo, éste quedará activado y arrancado por lo que empezará a tracear por la consola la salida esperada:

Consola SMX Kernel

O sea, de una forma tan simple ya tenemos SOA funcionando!.

Para detener el bundle necesitamos el id del bundle obtenido anteriormente. Si no nos quedamos con el id podemos ejecutar:

> list | grep example

y tendremos acceso fácilmente al identificador. Posteriormente, ejecutamos lo siguiente para detener el bundle:

> stop [id]

Esta acción no desinstalará el bundle, sólo lo detiene por lo que en cualquier momento podríamos volver a arrancarlo ejecutando:

> start [id]

Para desinstalar el bundle tan sólo tendríamos que ejecutar:

> uninstall [id]

Conclusión

En este tutorial le hemos echado un primer vistazo a Apache ServiceMix 4, y aunque no se han explorado todas sus características, nos ha permitido comprobar la gran versatilidad que presenta, gracias sobre todo a la nueva apuesta por OSGi y lo que significa en términos de mayor modularización, flexibilidad y escalabilidad.

Juan José Vázquez

Acerca de Juan José Vázquez

Juan José Vázquez es arquitecto de software y consultor en nuevas tecnologías, principalmente en el área de SOA y tecnologías open-source. Desde 2005 es socio de Tecsisa.
Comentarios (0) Trackbacks (0)

Sin comentarios por ahora.


Deja un comentario


Sin trackbacks por el momento.