Quiero cargar mis archivos jar OSGI desde una base de datos u otra fuente

StackOverflow https://stackoverflow.com/questions/1817214

  •  08-07-2019
  •  | 
  •  

Pregunta

¿Necesito suministrar un ClassLoader personalizado? Pensar en voz alta no parece ser el enfoque correcto porque dentro del cargador de clases no se conoce la versión requerida.

¿Fue útil?

Solución

Dado que el mecanismo de carga funciona esencialmente con una URL, sugeriría pruebe un manejador de URL personalizado. Lógicamente, deberá cargarlo y activarlo antes de cargar cualquier paquete con este controlador, de lo contrario, creo que debería funcionar.

Consulte la " Especificación del servicio de controladores de URL " ;, R4 OSGi Core Specification.

Glassfish está utilizando este enfoque para instalar paquetes de aplicaciones web por cierto.

Otros consejos

Una solución simple es crear su propio paquete de arranque que aprovisionará todos los demás paquetes desde una base de datos (u otra ubicación). OSGi le permite instalar paquetes desde un InputStream arbitrario, por lo que debería ser razonablemente fácil conectarlo a la fuente que desee (por ejemplo, JDBC).

Ver BundleContext.installBundle () para obtener más detalles.

No debería estar buscando una "devolución de llamada" a través de la cual el marco le notificaría "cuando necesita cargar una dependencia requerida" dado que la gestión automática de dependencias (ala Maven) no forma parte de la funcionalidad central de OSGi (aunque se puede lograr mediante el uso de servicios como OBR ).

Eche un vistazo al proyecto de URL de PAX: http://wiki.ops4j.org/ display / paxurl / Documentation

Eso demuestra la separación de las preocupaciones de cargar un paquete OSGi de cómo se almacena. En teoría, no veo ningún impedimento importante para usar una base de datos como la tienda de paquetes, aunque tampoco veo ninguna ventaja obvia.

Según su punto de vista sobre las versiones de paquete, necesita algún mecanismo para identificar qué paquetes (y versiones) cargar. Almacenaría los paquetes en la base de datos con información de la versión, de lo contrario, ¿cómo almacenaría diferentes versiones del mismo paquete?

Siempre puede descargarlos de la base de datos (o lo que sea) en alguna ubicación local y luego instalarlos dinámicamente en el Marco OSGi. Todo lo que necesita dar al marco es la ruta del sistema de archivos del paquete. Por supuesto, tendrá que escribir todo el código de pegamento para esto usted mismo. Por otro lado, si está utilizando Eclipse P2, es posible que tenga más flexibilidad gracias al aprovisionamiento automatizado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top