Thursday, 16 April 2009

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


0 comments:

Post a Comment