¿Iniciar programáticamente OSGi (Equinox)?

Me gustaría poder iniciar fácilmente un marco OSGi (preferiblemente Equinox) y cargar todos los paquetes enumerados en mi pom desde un directorio principal de Java.

es posible? ¿Si es así, cómo?

Parece que las herramientas pax harían esto, pero parece que no puedo encontrar ninguna documentación que lo indique. Sé que puedo iniciar Equinox de la siguiente manera:

BundleContext context = EclipseStarter.startup( ( new String[] { "-console" } ), null ); 

Pero me gustaría hacer más, como dije: cargue más paquetes, quizás inicie algunos servicios, etc.

Cualquier marco OSGi (R4.1 o posterior) puede iniciarse mediante progtwigción utilizando la API de FrameworkFactory :

 ServiceLoader ffs = ServiceLoader.load(FrameworkFactory.class); FrameworkFactory ff = ffs.iterator().next(); Map config = new HashMap(); // add some params to config ... Framework fwk = ff.newFramework(config); fwk.start(); 

El marco OSGi ahora se está ejecutando. Dado que Framework extiende Bundle , puede llamar a getBundleContext y llamar a todos los métodos API normales para manipular paquetes, registrar servicios, etc. Por ejemplo

 BundleContext bc = fwk.getBundleContext(); bc.installBundle("file:/path/to/bundle.jar"); bc.registerService(MyService.class.getName(), new MyServiceImpl(), null); // ... 

Finalmente, debe esperar a que se cierre el marco:

 fwk.stop(); fwk.waitForStop(0); 

Para reiterar, este enfoque funciona para cualquier marco OSGi, incluidos Equinox y Felix con solo poner el marco JAR en el classpath.

Este hilo puede ser un poco rancio, pero de todos modos …

Pax tiene un excelente soporte para urls maven, incluso tiene un manejador de URL envolvente que le permite convertir dinámicamente el bote que no es de osgi en paquetes bonitos y ordenados.

http://wiki.ops4j.org/display/paxurl/Mvn+Protocol

   org.ops4j.pax.url pax-url-wrap 1.2.5   org.ops4j.pax.url pax-url-mvn 1.2.5  

El comando sería entonces:

 install -s mvn:groupId:artifactId:version:classifier 

Nota: escenario de huevo de gallina: debes instalarlo usando un archivo: manejador de url primero o ponlos en un directorio de autodespliegue.

Karaf tiene toda esta comstackción en su distribución, así que tal vez eche un vistazo a la fuente del lanzador de Karaf.

Nota 2: la implementación de instantáneas se habilita al agregar @snapshots a la URL del repository, la configuración se administra a través de ConfigAdmin

En términos de administración de todas sus dependencias definidas de POM, eche un vistazo a las características de Karaf; hay un complemento que le permitiría generar un archivo XML de características que luego se puede usar para implementar toda su aplicación: http://karaf.apache.org/manual /2.1.99-SNAPSHOT/developers-guide/features-maven-plugin.html

Además, este artefacto XML se puede implementar en su OBR, por lo que puede tomar una configuración vainilla de Felix / Equinox / Karaf, agregar el controlador de URL mvn y configurar con el repository mvn de su empresa y luego aprovisionar toda la aplicación =)

Editar: se dio cuenta de que quería comenzar desde adentro de java. Lástima de mí por no leer lo suficientemente cerca

Mira este enlace. http://www.eclipsezone.com/eclipse/forums/t93976.rhtml

Esencialmente

 public static void main(String args[]) throws Exception { String[] equinoxArgs = {"-console","1234","-noExit"}; BundleContext context = EclipseStarter.startup(equinoxArgs,null); Bundle bundle = context.installBundle( "http://www.eclipsezone.com/files/jsig/bundles/HelloWorld.jar"); bundle.start(); } 

Editar: Maven

Parece que https://groups.google.com/group/spring-osgi/web/maven-url-handler?pli=1 contiene un servicio OSGi URl Handlers que puede tomar URLs del siguiente formato y cargar paquetes de ellos ( mvn: // repo / bundle_path)