karaf-features

Building Micro Services III

Karaf permite el aprovisionamiento de aplicaciones y módulos usando el concepto karaf features. Bajo el ejemplo que seguimos, una aplicación será un servicio, y los módulos, los elementos que forman este servicio.

Para realizar dicho aprovisionamiento, vamos a interactuar los siguientes elementos:

  • Maven: Como herramienta para la construcción de artefactos. En el blog ya existe una entrada dedicada a maven.
  • OSGI: Arquitectura para la construcción de artefactos. El elemento más simple es el bundle, y sobre este tema se habló en la primera entrada dedicada a microservicios.
  • FEATURE: Conjunto, o herramienta, por definirlo de alguna manera, que permitirá el aprovisionamiento en los contenedores OSGI, como KARAF. Su estructura viene definida por un xml.
  • KARAF: Contenedor OSGI de bundles y features de nuestras aplicaciones/servicios, así como de las librerías necesarias para el funcionamiento de estas.

Construyendo un feature

Vamos a seguir trabajando con el ejemplo LibroService, descrito en los post anteriores.
He de indicar que un feature no es más que un fichero xml que describe los elementos de nuestra aplicación/servicio, además de sus dependencias. Definiremos estas últimas, si queremos garantizar el despliegue correcto de la aplicación. La siguiente imagen representa lo anteriormente explicado:

Como podemos ver nuestro feature está compuesto por:

  • Libro-api-service: Módulo que contiene la definición de la api de la clase Libro y LibroService.
  • Libro-impl-service: Módulo que implementa la api libro-api-service.
  • Libro-rest-service: Módulo que permite mostrar el módulo libro-impl-service a través de la api rest.
  • Libro-soap-rest: Módulo que permite mostrar el módulo libro-impl-service a través de la api soap.

Como resulta evidente, si conoces el sector, la implementación del servicio se realiza una única vez. Haciendo uso del concepto de módulos (cajas, recuerdas este concepto en posts anteriores), evitamos el código duplicado, y la reutilización de código de forma correcta.

Existe un módulo final, denominado libro-features-service que contiene la invocación a los módulos, así como a las dependencias transitivas de estos, y que garantiza el despliegue correcto.

Un ejemplo visual del contenido del fichero que generará el feature es el siguiente:

Se puede observar la existencia de una variable significativa denominada ${proyect.version} que indica la versión del proyecto, y que permitirá ir realizando las distintas versiones de nuestra solución.

Desplegando un feature

Una vez construido el feature, el siguiente paso como resulta evidente es su despliegue. El proyecto Libro-Service descrito se encuentra en el siguiente enlace.
En su despliegue haremos uso de karaf, concretamente la versión 4.3.0, como contenedor OSGI.

Prerrequisitos:

  • OpenJdk 8.
  • Maven 3

Una vez instalado Karaf tan sólo debemos de iniciarlo, para obtener la imagen1:

Consola Karaf start

Imagen1: Resultado tras ejecutar ./karaf start

Concepto: Cada uno de los features realizados bajo esta arquitectura, los contenedores OSGI, KARAF en este ejemplo, los denomina repositorios, con lo que cada uno de los microservicios que realicemos, estarán disponibles en un repositorio que debemos proveer (feature:repo-add …).

Para la instalación de todo el desarrollo tan sólo hemos de lanzar el siguiente comando:
feature:repo-add mvn:es.ejemplos.jpexposito/libro-features-service/LATEST/xml, que incluye el repositorio en karaf y realizar la instalación del feature: feature:install libro-examples. Obtendremos tras ejecutar el comando list la siguiente salida:

servicios desplegados

Como vemos los distintos bundle implicados se encuentran activos. Esto nos indica que el despliegue se ha desarrollado de forma correcta. Vamos a consultar, visualmente que todo el proceso ha funcionado de forma correcta a través de la url http://localhost:8181/cxf, por defecto, la url de KARAF donde se expone los servicios SOAP/REST.

Conclusión

La construcción y el despliegue de aplicaciones/servicios en OSGI, resulta óptima, gracias al versionado semántico, y la gestión de dependencias en la arquitectura.

¡¡¡ Sed buenos, disfrutad programando y recuerda que el siguiente post está a medio cocer. 😉 !!!!.

error: El contenido de esta web se encuentra protegido, no te pido dinero, pero tampoco que copies.