Paquetes OSGi

Un paquete de OSGi es un archivo de archivado Java™ que contiene código Java, recursos y un archivo de manifiesto que describe el paquete y sus dependencias. El paquete es la unidad de despliegue de una aplicación.

Tipos de paquetes
Archivo de manifiesto de paquetes OSGi
Ciclo de vital del paquete

Tipos de paquetes

Paquetes de aplicación
Los paquetes de aplicación son paquetes que se crean específicamente para la aplicación. Son específicos de la instancia o están aislados; es decir, no están pensados para ser compartidos. El manifiesto de aplicación hace referencia a ellos en la cabecera Application-Content.
Paquetes compartidos
Los paquetes compartidos no son específicos de una aplicación. Varias aplicaciones pueden utilizar una única instancia de un paquete de un paquete compartido. Los paquetes compartidos no pueden importar paquetes o servicios de paquetes de aplicación. Los paquetes compartidos en una aplicación deben proporcionarse mediante referencia en lugar de contenidos directamente en una aplicación.
Los paquetes compartidos se subdividen adicionalmente en paquetes de uso y paquetes de suministro:
Paquetes de uso
Un paquete de uso es un paquete compartido que proporciona al menos un paquete al paquete de aplicación. Utilice los paquetes a los que se hace referencia en el manifiesto de aplicación en la cabecera Use-Bundle.
Paquetes de suministro
Un paquete de suministro es un paquete compartido que proporciona al menos un paquete o un servicio en un paquete de aplicación, un paquete de utilización u otro paquete de suministro. No se hace referencia a los paquetes de suministro en el manifiesto de aplicación, y la aplicación no sabe cómo se cumple el requisito de cada paquete de suministro.
Los paquetes OSGi se pueden almacenar en cualquiera de las ubicaciones siguientes:
  • El archivo de paquetes empresariales (EBA) de la aplicación.
  • Un repositorio de paquetes OSGi internos del servidor.
  • Los repositorios de paquetes OSGi externos.

Los paquetes de aplicación se pueden almacenar en el archivo EBA o en un repositorio. Los paquetes compartidos se almacenan en un repositorio (de lo contrario, no se pueden compartir).

El proceso de obtención de paquetes de los repositorios se conoce como suministro. A efectos de suministro, se utiliza la terminología siguiente para los paquetes:
Paquetes de referencia
Un paquete de referencia es un paquete al que se hace referencia en el manifiesto de aplicación y que se almacena en un repositorio.
Paquetes de dependencia
Un paquete de dependencia es un paquete al que no se hace referencia en el manifiesto de aplicación, pero que lo utilizan los paquetes a los que sí se hace referencia en el manifiesto de aplicación, u otros paquetes de dependencia.

Los paquetes de aplicación que no se incluyen directamente en el archivo EBA son paquetes de referencia específicos de una instancia. Los paquetes de uso son paquetes de referencia compartidos. Los paquetes de provisión son paquetes de dependencia compartidos.

Archivo de manifiesto de paquete OSGi

Un archivo JAR de paquetes OSGi contiene un archivo de manifiesto de paquetes. Este archivo contiene metadatos que habilitan el marco de trabajo OSGi para procesar aspectos modulares del paquete.

El código siguiente es un ejemplo del contenido de un archivo de manifiesto de paquetes, META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: MyService bundle
Bundle-SymbolicName: com.sample.myservice
Bundle-Version: 1.0.0
Bundle-Activator: com.sample.myservice.Activator
Import-Package: org.apache.commons.logging;version="1.0.4"
Export-EJB: ExampleBean
Export-Package: com.sample.myservice.api;version="1.0.0"
Los metadatos de este archivo de manifiesto incluyen las siguientes propiedades clave:
Bundle-Version
Describe la versión del paquete y permite que haya varias versiones de un paquete activas simultáneamente en la misma instancia de la infraestructura.
Bundle-Name
Proporciona un nombre legible para un paquete.
Bundle-SymbolicName
Identifica un paquete de forma exclusiva en la infraestructura. No sustituye la necesidad de una cabecera Bundle-Name.
Bundle-Activator
Recibe la notificación de la infraestructura acerca de los cambios del ciclo de vida de paquetes. Esta propiedad especifica la clase que implementa la interfaz org.osgi.framework.BundleActivator.
Import-Package
Declare las dependencias externas del paquete que utiliza el marco de trabajo OSGi para la resolución de paquetes. Se pueden declarar versiones específicas o rangos de versiones para cada paquete. En este archivo de manifiesto de ejemplo, el paquete org.apache.commons.logging es necesario en la versión 1.0.4 o posterior.
Utilice esta propiedad para especificar los nombres de los paquetes en el que desea importar su paquete en el tiempo de ejecución. Si no especifica el paquete necesario en esta propiedad, es posible que obtenga un error de compilación cuando se cargue el paquete.
Nota: También debe especificar este paquete en la propiedad Paquete de exportación (Export-Package) del paquete compuesto que contiene el paquete.
Restricción: Si el archivo de manifiesto de paquete utiliza la propiedad Import-Package para declarar una dependencia de paquete para un paquete que no está en el espacio de trabajo o la plataforma de destino, el editor marca la dependencia como un error. Para solucionar esta limitación, asegúrese de que todos los paquetes que declara como dependencia están en el espacio de trabajo o utilice el arreglo rápido para añadir el paquete a la plataforma de destino. Para utilizar el arreglo rápido, cambie a la vista de marcadores y, a continuación, pulse el botón derecho del ratón en el marcador de error y seleccione Arreglo rápido.
Importante: Cuando especifique dependencias de paquete en el archivo MANIFEST.MF, utilice la propiedad Import-Package en lugar de Require-bundle. Si utiliza Require-bundle para especificar dependencias de paquete, la aplicación no se despliega.
Import-Package es una forma más flexible de declarar dependencias:
  • Puede declarar dependencias en la funcionalidad que necesita en lugar de hacerlo en el paquete donde se originó la funcionalidad, ya que no añade dependencias innecesarias en paquetes que no son necesarios para el paquete pero que se incluyen en el paquete dependiente.
  • Puede especificar versiones o rangos de versiones para el paquete declarado, por lo tanto no tiene que reaccionar ante los cambios en diferentes versiones del paquete.
Export-EJB:
Si un proyecto EJB se convierte en un paquete OSGi y se añade la sección EJB de exportación al manifiesto. Utilice esta sección para listar los EJB que desea exponer. Los EJB pueden añadirse a esta sección editando manualmente o pulsando el botón derecho del ratón en un proyecto EJB convertido y seleccionando OSGi > Gestionar exportaciones EJB.
Export-Package
Declara los paquetes que se pueden ver fuera del paquete. Cualquier paquete que no esté declarado aquí sólo tiene visibilidad dentro del paquete.
Utilice esta propiedad para especificar el nombre de cualquier paquete al que desee exportar el paquete en el tiempo de ejecución. Si no especifica los paquetes que necesitan otros paquetes de esta propiedad, no se podrán resolver los paquetes dependientes.

Ciclo de vida del paquete

La infraestructura gestiona el ciclo de vida de los paquetes. A medida que se instala y se ejecuta un paquete compuesto, éste recorre diversos estados.

Los estados posibles de un paquete son los siguientes:
INSTALLED
El paquete está instalado, pero no se cumplen todas las dependencias del paquete. El paquete precisa de paquetes que no han sido exportados por ningún paquete compuesto instalado en estos momentos.
RESOLVED
El paquete está instalado y se han cumplido las dependencias del paquete pero no se está ejecutando. Si se ha iniciado un paquete y se cumplen todas las dependencias del paquete, el paquete omite este estado.
STARTING
Un estado temporal al que pasa paquete mientras se inicia el paquete.
ACTIVE
El paquete se está ejecutando.
STOPPING
Un estado temporal al que pasa paquete mientras se detiene el paquete.
UNINSTALLED
El paquete ya no existe en la infraestructura.
Icono que indica el tipo de tema Tema de conceptos
Términos y condiciones para centros de información | Comentarios

Icono de indicación de fecha y hora Última actualización: 22 de abril de 2014

Nombre de archivo: cbundles.html