Desarrollo OSGi con Eclipse Equinox

Como indica la palabra OSGi (Open Services Gateway initiative), es un sistema muy conocido en el entorno Java. Una buena definiciĆ³n la podemos encontrar en la misma web del OSGi Alliance : Sistema de mĆ³dulos dinĆ”micos para Java. Lo que aporta OSGi Service Platform, es un contenedor sobre el que corren distintos mĆ³dulos, con sus versiones, sus paquetes exportados (que pueden utilizar otros mĆ³dulos) y sus dependencias. Existen varias implementaciones del estĆ”ndar, y la mĆ”s conocida Equinox de Eclipse, la cuĆ”l voy a utilizar para este post.

fuente : Wikipedia

  • Descargando OSGi para Eclipse.
Nos dirigimos a la web de Eclipse, y descargamos la Ćŗltima versiĆ³n de Equinox, en este caso es la 3.4. AquĆ­ hay un enlace de descarga directa:
eclipse-equinox-3.4.zip

Una vez tenemos el fichero en nuestro PC, lo descomprimimos dentro de la ruta del Eclipse, en mi caso C:\Archivos de Programa\dev\Eclipse, el paquete lleva todos los plugins necesarios para que se ejecute el OSGi.

Sobretodo en el fichero que nos tenemos que fijar es el:
org.eclipse.osgi_3.4.0.v20080605-1900.jar
Que es el que luego ejecutaremos para iniciar el OSGi desde la consola del S.O.

Para comprobar que el OSGi funciona, hacemos una pequeƱa prueba, iniciamos un interprete de comandos con el comando "cmd" y luego nos dirigimos a la carpeta C:\Archivos de Programa\dev\Eclipse\plugins\ y desde aquƭ escribimos:

java -jar org.eclipse.osgi_3.4.0.v20080605-1900.jar -console

luego veremos como inicia el OSGi y inicia el servicio:

Ahora desde aquƭ, podemos instalar los plugins (les llaman Bundles), y a partir de ahƭ, iniciarlos, pararlos o desinstalarlos. Aquƭ os dejo un pequeƱo resumen sobre las acciones que podemos hacer sobre el OSGi:

install [bundle URL] Instala un bundle desde una URL
start [bundle] Inicia un bundle a travƩs de su ID
stop [bundle] Para un bundle a travƩs de su ID
ss [bundle] Muestra el estado de los bundles
diag [bundle] Reporta cualquier problema del bundle a travƩs de su ID

  • Creando nuestro OSGi Bundle.
Ahora que ya sabemos como ejecutar el OSGi, tenemos que crear los plugins desde Eclipse para instalarlos e iniciarlos desde el OSGi. Por lo tanto desde Eclipse, hacemos:

New Project -> Plug-in Project


Luego marcamos que el plugin funcionarĆ” con un OSGi framework Equinox:

Continuamos el asistente y mantenemos la configuraciĆ³n actual:

Seleccionamos una template de Hello OSGi Bundle, ya que esta nos generarĆ” un cĆ³digo de plantilla con las llamadas para que el framework lo pueda ejecutar.


Luego finalizamos, y nos aparecerĆ” la pantalla de configuraciĆ³n del Plug-in, donde podremos visualizar sus dependencias, propiedades y el fichero MANIFEST.MF, que es el que tiene la conversiĆ³n de los nombres simbĆ³licos, el ejemplo en nuestro caso es el siguiente:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: OsgiTest2 Plug-in
Bundle-SymbolicName: OsgiTest2
Bundle-Version: 1.0.0
Bundle-Activator: osgitest2.Activator
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.osgi.framework;version="1.3.0"

Si ahora ejecutamos el Framework tal como lo hemos creado, nos tendria que aparecer en la consola del Eclipse, un "Hello World!!" que es el que viene por defecto con la template del Bundle Plug-in.


Antes de iniciar la aplicaciĆ³n, tenemos que ir al fichero MANIFEST.MF, y con el botĆ³n derecho hacemos -> Run Configurations:

Solo marcamos nuestro Plug-in, y luego hacemos Run. En la consola tenemos que ver algo parecido a esto:

Configuration location:
file:/D:/workspace/.metadata/.plugins/org.eclipse.pde.core/mboss/
Configuration file:
file:/D:/workspace/.metadata/.plugins/org.eclipse.pde.core/mboss/config.ini loaded
Install location:
file:/D:/workspace/mboss-target-platform/target/
Framework located:

file:/D:/workspace/mboss-target-platform/target org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
Framework classpath:

file:/D:/workspace/mboss-target-platform/target/org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
Debug options:

file:/D:/workspace/.metadata/.plugins/org.eclipse.pde.core/mboss/.options loaded

Skipping osgi.properties:
osgi.properties

Initialize the framework: 94
Trying to launch framework

osgi>
install from inputstream: i
nitial@reference:file:../../OsgiTest2/, org.eclipse.osgi.framework.internal.core.ReferenceInputStream@4741d6
compact(D:\workspace\.metadata\.plugins\org.eclipse.pde.core\mboss\org.eclipse.osgi\bundles)
Trying to resume bundle
initial@reference:file:../../OsgiTest2/ [1]
Time to load bundles: 16
Trying to resume bundle initial@reference:file:../../OsgiTest2/ [1] Bundle:
Active sl = 4; Bundle 1 sl = 4

Hello World!!
->started initial@reference:file:../../OsgiTest2/ [1]


Podemos ver como aparece el mensaje que tiene programada la clase Activator.java:



  • Exportando el proyecto para su ejecuciĆ³n en el OSGi
Una vez tenemos el proyecto funcionando sin ningĆŗn error, podemos exportarlo para que se ejecute en el OSGi desde el intĆ©rprete de comandos, para hacer eso, tenemos que hacer los siguiente sobre nuestro proyecto:

Hacemos con el botĆ³n derecho sobre nuestro proyecto -> Export -> Deployable plug-ins and fragments.


Luego seleccionamos el proyecto a exportar, en mi caso OsgiTest2:

Una vez finalizada la creaciĆ³n, si nos dirigimos a C:\TEMP\bundles\plugins nos encontraremos con un fichero OsgiTest2_1.0.0.jar que es el bundle que le tenemos que pasar a nuestro OSGi.

Desde nuestro OSGi, instalamos el plug-in:

osgi> install file:W:\bundles\plugins\OsgiTest2_1.0.0.jar Bundle id is 10 osgi> start 10 Hello World!! osgi> stop 10 Goodbye World!!

Podemos ver que instalando el Bundle y iniciandolo, podemos ver el mensaje que hemos programado en Activator.java.

Si quisieramos una activaciĆ³n directa de nuestros bundles, tendriamos que crear un fichero config.ini en la carpeta C:\TEMP\configuration y que dentro de esta tuviese las activaciones de nuestros bundles:

osgi.bundles=OsgiTest2.jar@start
eclipse.ignoreApp=true

Ahora ya podemos hacer cualquier aplicaciĆ³n mediante bundles y ejecutarlos en el OSGi. Si queremos, tambiĆ©n podemos interacturar con el OSGi a travĆ©s de la consola del Eclipse. Una vez arrancamos el plug-in, podemos ejecutar los comandos necesarios en la ventana:

Ahora que ya sabemos como funciona un poco todo esto, ya podemos empezar a crear aplicaciones mƔs modulares, ya que disponemos de un framework que nos permite interactuar con Ʃl y ejecutar nuestros bundles.

Enlaces de interƩs:
http://mikiorbe.wordpress.com/2009/02/23/desarrollo-osgi-en-eclipse/
http://knowledgerush.com/kr/encyclopedia/OSGi/
http://www.ibm.com/developerworks/library/os-ecl-osgi/index.html
http://www.vogella.de/articles/OSGi/article.html
http://www.eclipse.org/equinox/documents/quickstart.php


Comments

Popular Posts