Gestión de contenido dinámico
Generalmente para instalar los paquetes en el entorno de ejecución se listan en la cabecera Subsystem-Content del archivo de manifiesto de la característica. Sin embargo, también puede añadir y eliminar dinámicamente paquetes OSGi mediante la instalación de un paquete escrito por el usuario como parte de Subsystem-Content de una característica escrita por el usuario. El paquete escrito por el usuario obtiene el contexto de paquetes OSGi para instalar y controlar paquetes adicionales.
Instalación, inicio, detención y desinstalación de paquetes en Liberty
- Instalación de paquetes
- Puede escribir FeatureBundleA para obtener el contexto de paquetes
OSGi, org.osgi.framework.BundleContext, utilizando uno de los métodos
siguientes:
- Implementar la interfaz BundleActivator, org.osgi.framework.BundleActivator. El parámetro BundleContext del método start se pasa en la infraestructura OSGi, que está disponible para el paquete escrito por el usuario al activar dicho paquete. Si desea más información sobre la interfaz BundleActivator, consulte Desarrollo de un paquete OSGi con la activación simple.
- Implementar una especificación disponible, como los servicios declarativos de OSGi o Blueprint, que ofrece acceso al contexto del paquete mediante otro método o interfaz. Para obtener más información, consulte la sección text="Composición de características avanzadas mediante OSGi Declarative Services" y la sección Paquetes de Blueprint.
Una vez que FeatureBundleA obtiene el contexto del paquete, se pueden instalar paquetes adicionales mediante el uso de los métodos installBundle(String location) o installBundle(String location, InputStream stream).
Los paquetes que se instalan dinámicamente reanudan el estado en un reinicio predeterminado. No persisten en un inicio limpio y requieren reinstalación. Consulte Almacenamiento en memoria caché de paquetes para obtener más detalles.
- Inicio de paquetes
- Si desea que se inicie un paquete instalado, el paquete de instalación, FeatureBundleA, debe llamar al método start para el paquete.
- Detención y desinstalación de paquetes
- Si la característica escrita por el usuario, UserFeatureA, se
elimina de la configuración del servidor, FeatureBundleA se detiene y
además se desinstala. La desinstalación de FeatureBundleA activa la
desinstalación de todos los paquetes instalados por FeatureBundleA, si
todavía no se han desinstalado. El método
org.osgi.framework.Bundle.uninstall() se llama para cada paquete, que se
detiene y se desinstala. Este proceso de desinstalación también se aplica si
FeatureBundleA se desinstala por otros medios.
Si UserFeatureA se elimina de la configuración del servidor cuando el servidor está detenido, los paquetes instalados por UserFeatureA se eliminan la próxima vez que se inicie el servidor. Si los niveles de inicio de los paquetes no se han modificado y conservan los valores por omisión, los paquetes se eliminan antes de que se reinicien. Si los niveles de inicio de los paquetes se han modificado, puede que no se eliminen hasta después de su reinicio.
FeatureBundleA realiza otras tareas de gestión de ciclo de vida de acuerdo con la especificación principal de OSGi, mediante el uso de las interfaces org.osgi.framework.Bundle y org.osgi.framework.BundleContext.
Almacenamiento en memoria caché de paquetes, visibilidad de paquetes y soporte del modelo de programación en Liberty
- Almacenamiento en memoria caché de paquetes
- Al apagar el servidor, todos los paquetes instalados actualmente se detienen y los metadatos OSGi se conservan en una memoria caché de paquetes. Al realizar un inicio predeterminado, estos paquetes instalados recuperan su estado anterior. Si se realiza un inicio limpio, se suprimen los datos persistentes de los paquetes que se instalaron mediante FeatureBundleA. Como resultado, en un inicio limpio estos paquetes no se reanudan. FeatureBundleA se reanuda al reinstalarlo el Gestor de características, siempre que UserFeatureA esté en la configuración del servidor. Si desea reinstalar los paquetes después de un inicio limpio, la reinstalación es responsabilidad de FeatureBundleA. No se notifica acerca de un inicio limpio, pero puede comprobar si un paquete se ha instalado mediante el método BundleContext getBundle(String location) de OSGi.
- Visibilidad de paquetes
- Los paquetes que se instalan dinámicamente, y no aparecen en la cabecera
Subsystem-Content del archivo de manifiesto de característica, tienen la
visibilidad siguiente:
- Los paquetes instalados dinámicamente pueden importar los paquetes de API y SPI proporcionada por el conjunto de características configuradas actualmente.
- Los paquetes que exportan otros paquetes dentro de la misma extensión del producto no declarados como API o SPI no son visibles para los paquetes instalados dinámicamente.
- Los paquetes que se exportan desde paquetes instalados dinámicamente no se pueden declarar como API o SPI.
- No hay restricciones sobre la importación de paquetes que se exportan desde paquetes instalados dinámicamente.
- Soporte del modelo de programación
- Los paquetes instalados dinámicamente pueden utilizar las implementaciones de las especificaciones Enterprise OSGi, siempre que las características de tiempo de ejecución adecuadas estén configuradas para permitirlas.