2009-05-24 18 views
7

¿Alguien me puede dar un ejemplo de cómo usar las clases de framework de osgi? No tengo ni idea de cómo usar esas clases ...¿Cómo ejecutar un marco OSGi dentro del código java habitual?

BR,

Markus

+0

duplicado de: http://stackoverflow.com/questions/4673406/programatically-start-osgi-equinox yo diría, que el vinculado a la pregunta de respuesta aceptada es también más apropiado como respuesta a esta pregunta, las que figuran en esta página. – hoijui

Respuesta

7

Depende de la implementación de OSGi que esté utilizando. Yo uso Eclipse Equinox y comienzo el marco dentro de una clase regular de Java. El jar de Eclipse (llamado org.eclipse.osgi_longversion.jar) tiene una clase llamada org.eclipse.core.runtime.adaptor.EclipseStarter. Esto iniciará su marco OSGi.

Properties props = new Properties(); 
// add some properties to config the framework 
EclipseStarter.setInitialProperties(props); 
BundleContext context = EclipseStarter.startup(new String[]{},null); 

Necesita algunas propiedades para configurar el marco. Puede ver todas las propiedades documentadas here. Una vez que llame al inicio, el BundleContext que recibe es el contexto del paquete del sistema, por lo que puede instalar/iniciar/detener paquetes desde aquí.

Si configura todas las propiedades, no tendrá que pasar ningún argumento al inicio().

Puede descargar todos los paquetes Equinox y otros desde Equinox website.

+1

¡Gracias! Ahora pude ejecutar equinox framework con algunos paquetes desde mi código java :) Pero todavía estoy un poco confundido: si utilizo el parámetro -console para ejecutar la consola Equinox y detengo el paquete del sistema después, el hilo no se detiene hasta que envíe un comando a la consola. Mayber hay algún tipo de bucle dentro del paquete del sistema que espera un nuevo comando?!? – Markus

+0

Parar paquetes, incluso el paquete del sistema, no indica necesariamente el cierre de la aplicación. La consola, cuando se emite "cerrar", lo que realmente hace es detener todos los paquetes, anular el registro de servicios y controladores, etc., y luego llamar a System.exit (0). – omerkudat

+0

¿Hay alguna propiedad especial que deba configurarse para poder usar la clase EclipseStarter desde la línea de comandos? Actualmente, solo puedo usar esta clase si ejecuto mi programa directamente desde el IDE. Si lo exporto a un archivo jar, la clase de inicio carga el paquete del sistema en lugar del paquete de servicios osgi ... por lo tanto, no es posible instalar un paquete ... – Markus

2

La especificación no define cómo crear una instancia, configurar e iniciar un marco de OSGi . Por lo tanto, ejecutar el marco OSGi desde su código Java habitual siempre es específico para la implementación del marco dado (Equinox, Felix, Knopplerfish, ...).

Es razonablemente fácil incrustar Apache Felix (un marco OSGi de código abierto) en su aplicación.

Ver http://felix.apache.org/site/launching-and-embedding-apache-felix.html para más información.

+0

No estoy seguro si realmente quiero usar otro marco OSGi al lado de Equinox. Estoy buscando un ejemplo que explique cómo usar la clase org.eclipse.osgi.framework.internal.core.OSGi. Hasta ahora solo encontré un ejemplo incompleto en un foro alemán: http://www.java-forum.org/plattformprogrammierung/81133-custom-open-services-gateway-initiative-launcher-mit-config-ini.html – Markus

+1

Usted no debería usar clases del paquete que mencionaste. Este paquete es "interno" y no se exporta desde el paquete. El acceso a las cosas de OSGi en equinoccio normalmente se realiza a través de las intefaces en org.osgi.framework. – jens

0

recientemente he creado una prueba de concepto simple de cómo integrar de Equinox OSGi tiempo de ejecución en Java. Para más detalles por favor, siga mi proyecto en Github https://github.com/sarxos/equinox-launcher

Cuestiones relacionadas