(A la espera de que Javi nos muestre/demuestre sus conocimientos sobre OSGi ahí va un Quick Start de OSGi, a ver si le chincho y continúa este post)
OSGI (Open Services Gateway Initiative) es una capa sobre Java que permite crear módulos que pueden interactuar entre sí en tiempo de ejecución. La última especificación es la 4.2
OSGi intenta solventar los problemas del tradicional «classloader» de la máquina virtual y de los servidores de aplicaciones Java (como JINI).
En OSGI, cada módulo tiene su propio classpath separado del resto de classpath de los demás módulos.
Aunque OSGi define su propia arquitectura, ha sido pensada para su compatibilidad con Jini o UPnP. De hecho fue pensado principalmente para su aplicación en redes domésticas, aunque luego como Jini se le encontró mayor aplicación en otros ámbitos.
Olvidándonos de sus orígenes y de sus similitudes con JINI y aplicándolo al Java de uso general OSGi ofrece:
· OSGI proporciona un marco de trabajo que soporta el despliegue dinámico de aplicaciones («Bundles» o módulos)
· Sistema modular que incluye reglas de visibilidad, gestión de dependencias y versionado de los bundles.
· La instalación, arranque, parada, actualización y desinstalación de bundles se realiza dinámicamente en tiempo de ejecución sin tener que detener por completo la plataforma.
· Es una arquitectura orientada a servicios (cuantas veces habéis oído esto 😀 :D)
· Los servicios pueden ser registrados y consumidos dentro de la VM.
Implementaciones OSGi
En la actualidad existen varias implementaciones OSGi, las principales son:
· Eclipse ![]()
Spring ofrece soporte para el despliegue de aplicaciones Spring en una entorno de ejecución OSGi vía Spring Dynamic Modules for OSGi(tm) Service Platformsk
Un poco de Eclipse Equinox
Para este Hello World OSGi usaremos como contenedor OSGi Eclipse Equinox: el motivo principal es por ser la implementación más madura de OSGi, de hecho Eclipse desde su versión 3.0 es un sistema OSGi (la carga de plugins y extensiones).
Descargamos
(contiene el bundle que permite ejecutar nuestros módulos OSGi así como un SDK).
Una vez descargado y descomprimido el ZIP tendremos esta estructura:
Dentro de la carpeta plugins está el jar: org.eclipse.osgi_3.5.2.R35x_v20100126.jar que es el que permite levantar el entorno OSGi e instarlar, iniciar, detener y desinstalar nuestros módulos
Podemos arrancar la consola con un script como este:
Que al ejecutarlo nos muestra una consola OSGi desde la que prodremos instalar nuestros módulos OSGi:
Creando Bundle Hello World:
Arrancamos nuestro IDE, creamos un proyecto Java y añadimos al classpath org.eclipse.osgi_3.5.2.R35x_v20100126.jar:
Creamos una clase que implemente el interfaz BundleActivator (la clase que activa el Bundle):
Aparte de esta clase sólo nos resta añadir el archivo META-INFMANIFEST.MF que describe nuestro módulo.
Su aspecto es este:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: HelloWorld
Bundle-SymbolicName: es.blog.unpocodejava.osgi.helloworld
Bundle-Version: 1.0.0
Bundle-Activator: es.blog.unpocodejava.osgi.helloworld.HelloWorldActivator
Import-Package: org.osgi.framework;specification-version=»1.4.0″
Donde:
· Bundle-ManifestVersion: Indica la especificación de OSGi sobre la que está basada el bundle. Por defecto es 1. El valor 2 indica que se trata de la especificación de OSGI 4.
· Bundle-Name: nombre corto del Bundle (el que aparece como nombre)
· Bundle-SymbolicName: nombre único para el bundle. Con este nombre es con el que trabajaremos en el entorno de ejecución.
· Bundle-Version: versión de nuestro bundle, dentro de nuestro entorno podríamos tener diferentes versiones de un mismo bundle.
· Bundle-Activator: la clase que actúa como Activator (debe implementar la interfaz BundleActivator de modo que podamos entrar dentro del ciclo de vida de nuestro Bundle)
· Import-Package: paquetes a importar.
Generamos el jar (en Eclipse seleccionando la opción export):
Que nos habrá generado un JAR con este contenido:
Utilizando Bundle
Sobre la consola lanzo:
osgi> install file:D:DocumentosOsGiEclipseEquinoxequinox-SDK-3.5.2bundlesHelloWorld-1.0.jar
![]()
osgi> ss
osgi> start 2
Por hoy esto es todo, no hemos hecho más que ver la base de OSGi, evidentemente OSGi ofrece mucho más, permitiendo ofrecer y consumir Servicios de otros Bundles,…
Onsurbe…te estamos esperando J











Replica a OSGi y Spring Dynamic Modules « Java Mania Cancelar la respuesta