Gestión de dependencias en OSGi

28 Octubre 2008

Anteriormente en este blog hemos dado unos primeros pasos con OSGi, que os recomiendo leer si todavía no lo habéis hecho. Desde esas entradas he actualizado la versión de Apache Felix hasta la 1.2.1.

Ahora llega el momento de echar un vistazo a una de las características más interesantes de Osgi, como es la gestión de dependencias.

Lo primero que debemos conocer es que en OSGi permite exportar e importar paquetes de forma que es el contenedor OSGi el que se encarga de realizar y validar esas dependencias como paso previo a la ejecución de un módulo. Si no se pueden resolver dichas dependencias no se podrá ejecutar el módulo. Para jugar un poco con el tema, he creado dos pequeños módulos:

  • Uno que exporta un Logger con funcionalidad avanzada (bueno, no muy avanzada, pero es que es un ejemplo) cuyo código vemos a continuación. Este módulo también tiene un BundleActivator que saca una traza tanto en el arranque como en la parada.:

package org.tcymu.osgi.log.logger;

public class Logger {
    public void log(String msg) {
        System.out.println(System.currentTimeMillis() + ": " + msg);
    }
}
  • Otro que importa dicho Logger para hacer uso de él:

package org.tcymu.osgi.app;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.tcymu.osgi.log.logger.Logger;

public class AppBundle implements BundleActivator {
    Logger logger = new Logger();

    public void start(BundleContext arg0) throws Exception {
        logger.log("Arrancando AppBundle");
    }

    public void stop(BundleContext arg0) throws Exception {
        logger.log("Parando AppBundle");
    }
}

Tanto la exportación como la importación de los paquetes se hace a través de los descriptores. Las líneas importantes son:

Bundle-SymbolicName: org.tcymu.osgi.log.LogBundle
Bundle-Version: 1.0.0
Bundle-Activator: org.tcymu.osgi.log.LogBundle
Import-Package: org.osgi.framework
Export-Package: org.tcymu.osgi.log.logger;version="1.0.0"

y en la importación:

Bundle-SymbolicName: org.tcymu.osgi.app.AppBundle
Bundle-Version: 1.0.0
Bundle-Activator: org.tcymu.osgi.app.AppBundle
Import-Package: org.osgi.framework,org.tcymu.osgi.log.logger;version="1.0.0"

Empaquetaremos ambos módulos tal y como vimos en la anterior entrada. Ahora vamos a probar la instalación. Primero en el orden correcto. Primero instalo el módulo de log y después la aplicación:

install file:////d:/felix-1.2.1/bundle/org.tcymu.osgi.log.logbundle-1.0.0.jar Bundle ID: 16 install file:////d:/felix-1.2.1/bundle/org.tcymu.osgi.app.appbundle-1.0.0.jar Bundle ID: 17 start 16 start 17 Todo funciona correctamente. Ahora podemos hasta desinstalar el módulo de log, que una vez exportado, el contenedor mantiene una copia de esas clases para ofrecerlas a quien las necesite. Ahora vamos a parar y desinstalar nuestros módulos. También paro y reinicio Felix, ya que quiero comprobar qué ocurre si no tenemos una dependencia. Si instalo sólo el módulo de aplicación e intento arrancar, me lanza el siguiente error:

org.osgi.framework.BundleException: Unresolved constraint in bundle 24: package; (&(package=org.tcymu.osgi.log.logger)(version>=1.0.0))

Voy a dejar para una segunda parte de esta entrada el crear nuevas versiones de los módulos y comprobar cómo ser gestionan en el contenedor.

Actualización: Segunda parte

Entry Filed under: Java. Etiquetas: , , .

1 Comment Add your own

Leave a Comment

Required

Required, hidden

Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


Feedburner

Mi perfil

View Miguel Orbegozo's profile on LinkedIn

Etiquetas

AJAX BlogDay2008 Blueprint CakePHP CDarranque CSS CVS Eclipse Enlaces Equinox Felix Firefox General Git Hudson iBatis Java Javascript JodaTime JQuery JUnit Linux Log4j Logback Maven Nexus OSGi Persistencia PHP Server Software Spring Terracotta Tomcat Trucos Ubuntu Windows

Entradas recientes

Comentarios recientes

Feedjit

Feeds

Anteriormente en TCYMU…

Otros…

Blogs

BlogESfera Directorio de Blogs Hispanos - Agrega tu Blog

Bitacoras.com

Add to Technorati Favorites