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.
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]
start
stop
ss
diag
- Creando nuestro OSGi Bundle.
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
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
%20applied%20to%20Transformer%20models%20in%20machine%20learning.%20The%20image%20shows%20a%20neural%20networ.webp)

Comments
Post a Comment