El primer día
El curso empezó con una introducción a FUSE ESB: Solución open source basado en el Bus de Servicios Corporativos (Enterprise Service Bus) Apache ServiceMix 4 basado en la tecnología OSGi. FUSE ESB es capaz de soportar múltiples modelos de componentes:
- OSGi bundles
- Artefactos JBI
- Servlets
- Spring beans
- Rutas Camel (http://camel.apache.org)
- Servicios Web CXF
- ...
FUSE ESB posee una arquitectura por capas dividida en dos grandes bloques. El "core" se basa en OSGí como plataforma de ejecución con una serie de características añadidas para el manejo y gestión de OSGi bundles y la capa llamada "tecnológica", que se sitúa sobre ella, engloba una serie de componentes que dan soporte a distintas tecnologías:

El kernel de FUSE ESB extiende la capa OSGí con las siguientes características:
- Logging
- Provisionamiento de instalables
- Configuración dinámica
- Administración
- Despliegue de componentes
Para trabajar con el kernel se puede utilizar la consola de comandos que permite tratar con cada uno de las características antes mencionadas ya se de forma local o remota. Está basado en "GShell" por lo que es fácilmente extensible y cada subsistema del kernel posee su propio repertorio (sub-shell) de comandos. El aspecto que presenta esta consola al arrancar el kernel es la siguiente:

Cabe mencionar con respecto al provisionamiento que ServiceMix usa el término de "feature" para referirse a un mecanismo de agrupación de "bundles" (componentes osgi instalables). Éstas "features" permiten a través de un descriptor XML definir todos aquéllos bundles que forman una aplicación o solución y ser manejados como conjunto. Una herramienta muy útil cuando trabajas con un elevado número de bundles que agrupados definen tu solución.
Existen diferentes implementaciones de la especificación OSGi:
- Apache Felix (Apache Software Fundation)
- Equinox (Eclipse Fundation)
- ...
ServiceMix empezó utilizando Equinox pero ya utiliza Apache Felix en las versiones mas recientes aunque puede ser desplegado sobre otras implementaciones.
¿Qué es un bundle? Un bundle no es más que un empaquetado "jar" con alguna información extra (meta-datos) en su MANIFEST.MF. Los meta-datos que debe incluir el este fichero de texto plano (MANIFEST.MF) son:
- BundleName: Nombre descriptivo y amigable del bundle.
- Bundle-Symbolic-Name: Nombre único que identifica el bundle
- Bundle-Version: Version del bundle en formato X.X.X
- Export-Package: Lista de paquetes java que quedan visibles del bundle y pueden ser utilizados por otros bundles.
- Import-Package: Lista de paquetes java que requiere el bundle, aquéllos que corresponden con java.* son importados por defecto siempre.
El sistema de exportación e importación de paquetes entre bundles da lugar a un sistema de class-loading en forma de grafo en contraposición a la estructura en árbol que presenta el modelo de class-loading de la maquina virtual de java (evitando así los típicos problemas de dependencias de librerías y respectivas versiones desplegadas en múltiples niveles del árbol). En definitiva OSGí provee de una serie de mecanismos de despliegue de componente java de una forma modular. Se encarga de dependencias, versionado, control del classpath..., está entrando con fuerza en el espacio del software corporativo y tiene una gran comunidad que lo respalda. La prueba de ello es que existen ya una serie de herramientas libres a nuestra disposición que dan soporte a la creación de OSGí bundles como Maven, Eclipse, Bnd, Ops4j, etc.