Un poco de Apache Karaf

(Jose María, este te lo dedico … eso sí, te costará una cerveza :D)

Karaf es un contenedor OSGI del que ya hablamos en el 2010 y que ofrece un conjunto de funcionalidades que a los descreídos de OSGI como yo permite casi olvidarnos de que es un contenedor OSGI.

Ahí van las que resultan más “interesantes” (las que extienden y casi pervierten OSGI :D):

· Despliegue de aplicaciones WAR

Para desplegar una aplicación WAR basta con instalar la feature WAR y ejecutar un comando como:

Karaf automáticamente convierte el WAR (adaptado previamente de forma sencilla) a Bundles OSGI:

· Despliegue automático de JARs, aplicaciones Spring y BluePrint: Karaf ofrece deployers que se encargan de OSGIizar JARs clásicos, aplicaciones Spring y BluePrint generando automáticamente el manifest OSGI:

· Consola Remota SSH: Karaf permite acceder al contenedor vía SSH y operarlo

· Despliegue en Failover: de modo que si se cae una instancia Karaf arranque otra, permite que esté en la misma máquina o en otra (vía BD JDBC)

· Archivos Karaf (KAR): es un formato propio (ZIP) que permite encapsular varios JARs de Bundles y un descriptor y desplegarlo con sólo dejarlo en la carpeta de despliegue de Karaf

· Provisioning ofreciendo diferentes handlers, el más interesante es el Maven Handler que permite instalar bundles desde Repositorios Maven

· Consola Web para realizar desde un UI instalación/des de features, arranques/paradas de bundles, configurar Karaf, ver Logs,…

· Service Wrapper: que permite arrancar el contenedor como servicio en cualquier OS soportado: Windows, Linux, HP, OS X, Sun OS, AIX,…

· Administración y monitorización JMX

· Extensión de la consola Karaf para añadir nueva funcionalidad al contenedor

La última versión es la 2.3.2 que incorpora mejoras, novedades y soluciona un gran número de bugs y podéis descargar desde aquí.

Además Karaf tiene alrededor un pequeño ecosistema muy interesante:

· Karaf Cellar: permite gestionar un cluster de instancias Karaf (basado en Hazelcast) ofreciendo sincronización entre ellas, permitiendo:

-Discovery: permite que los nodos se descubran entre ellos

-Grupos de clusters: cada nodo puede formar parte de uno o más nodos

-Configuración distribuida

-Bundles distribuidos

-Distributed OSGI (opcional)

-Consola web para administrar el cluster vía Web

· Eclipse Integration for Karaf (EIK) que permite desarrollar sobre Karaf en Eclipse ofreciendo perspectivas despliegue, ejecución, depuración,…

· Karaf WebConsole altamente configurable y extendible

· Karaf Cave que ofrece un OSGi Bundle Repository (OBR) y Karaf Features Repository (KFR). Permite automáticamente instalar un bundle

La opinión del creador de Spring sobre OSGi

Acabo de leer en un extracto de las declaraciones del fundador de Spring sobre OSGi.

La parte de las declaraciones es esta:

"What we found in the server space, is frankly, TC server is a much better fit for what people want. It doesn’t have the advanced module system, but it’s got an incredibly small footprint. The benefit that most users want is a server that has a really small memory footprint, good management, fast startup time,and you can get those things without the complexity of OSGi."

En palabras de JavaHispano “Según Rod Johnson, OSGi sencillamente no puede ser hecho lo suficientemente sencillo y productivo para ser consistente con los valores del framework Spring. Para él, con el tiempo ha quedado claro que esta tecnología es una tecnología para nichos muy acotados, pero que nunca va a ser mainstream.”

Seguro que a Pedro le hace gracia leerlo, u otra cosa, pero seguro que puede corroborarlo, porque invocar a un servicio OSGI dentro de un WAS es casi una labor de ingeniería…

Spring tenía un proyecto interesante basado en OSGi: Spring Dynamic Modules for OSGi que han cedido a la fundación Eclipse, yo pensé que con la idea de convertirlo en estándar

Javolution, libreria java determinista.

Esta librería tiene como objetivo hacer las aplicaciones Java más rápidas y con un comportamiento predecible, lo cual consigue  a través de:

  • Clases java de alto rendimiento para util, lang, text, io y xml.

  • Contextos programados para permitir una mayor separación de los características de ciertas partes de nuestro código, ConcurrenContext, StackContext

  • Un framework de test unitarios orientado también a rendimiento y test de regresión.
  • Capacidades de computación paralela de bajo nivel sencilla de usar a través del ConcurrentContext.
  • Clases base Struct y Union para permitir interfaces directos con clases nativas de C/C++.
  • El serializador XML más rápido y el primero determinista.
  • Gestión de la configuración simple y flexible

Para utilizarlo solo necesitaríais añadir la siguiente dependencia en vuestro pom.xml:

       <dependency>
          <groupId>javolution</groupId>
          <artifactId>javolution</artifactId>
          <version>5.5.1</version>
      </dependency>

Esta preparada para OSGi con lo cual puede resultar una opción muy interesante para desarrollos de sistemas muy ligeros con necesidades de tiempo real.

Esta librería es usada por varios proyectos entre ellos el más conocido por nosotros es Oval, y podéis obtener más información sobre la misma en http://javolution.org/

OSGi y Spring Dynamic Modules

Siguiendo con los posts sobre OSGI:

- OSGi: Primeros pasos y el inevitable Hello World

- OSGi y Apache Karaf

Hay va una referencia a un buen artículo sobre cómo iniciarse en OSGi con Spring Dynamic Modules, sin duda la forma más sencilla de introducirse en los entresijos de OSGi.

Spring 2.5 ya ofrece declaraciones para Servicios OSGi:

OSGi y Apache Karaf

Últimamente he estado investigando sobre las posibilidades de OSGi para la integración y me he topado con el proyecto Felix que es el enfoque de Apache para la implementación de OSGi. Este proyecto dispone de un entorno de ejecución llamado Karaf, el cual me ha llamado la atención muy positivamente por la sencillez de uso y la flexibilidad que nos ofrece, además de permitir el uso de Felix o Eclipse Equinox como contenedores OSGi

Apache Felix Karaf nos proporciona las siguientes funcionalidades:

  • Despliegue en caliente. Se monitoriza el contenido de los ficheros del directorio deploy y cada vez que copia un jar en este directorio el componente es instalado en el entorno de ejecución. De igual manera si se actualiza o borra el mismo estos cambios se controla automáticamente.
  • Configuración dinámica. Los servicios se configuran habitualmente a traves del servicio OSGi ConfigurationAdmin el cual es alimentado por karaf a partir de los ficheros properties incluidos en el directorio etc. Y si alguno de estos ficheros es modificado el sistema se encarga de propagar ese cambio a los servicios.
  • Sistema de Logging. Dispone de un backend centralizado de jogging gestionado por Log4j.
  • Suministro. El suministro de librerías y aplicaciones se puede realizar de diferentes formas a través de las cuales las mismas se descargaran localmente, instalaran e iniciaran.
  • Integración nativa con el sistema operativo. Se puede integrar en tu sistema operativo como servicio de cara a vincularlo al ciclo de vida del mismo.
  • Consola de shell extensible. Dispone de una consola de texto para gestionar servicio e instalar nuevas funcionalidades así como gestionar su estado. Siendo la misma fácilmente extensible con nuevas características.
  • Acceso remoto. Permite el uso de clientes ssh para acceder remotamente a su consola.
  • Framework de seguridad. Basado en JAAS.
  • Gestión de instancias. Permite gestionar múltiples instancias de karaf a través de la consola.
  • Soporta los siguientes contenedores OSGi 4.2: Apache Felix 2.0.0 y Eclipse Equinox 3.5

La consola que nos proporciona dispone de una buena ayuda a la escritura de comandos y es fácilmente extensible:

Es por ello que recomiendo este entorno para aquellos que hagan su primera aproximación a OSGi.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 462 seguidores

%d personas les gusta esto: