OSGi

Ajustar Compartir Imprimir Citar

OSGi es un proyecto de código abierto y especificación abierta bajo la Fundación Eclipse. Es una continuación del trabajo realizado por la OSGi Alliance (anteriormente conocida como la iniciativa Open Services Gateway), que era una organización de estándares abiertos para software informático fundada en marzo de 1999. La fundación originalmente especificó y mantuvo el estándar OSGi. La alianza transfirió su trabajo a la Fundación Eclipse a finales de 2020. La especificación OSGi describe un sistema modular y una plataforma de servicios para el lenguaje de programación Java que implementa un modelo de componentes completo y dinámico, algo que no no existe en entornos Java o VM independientes. Tiene una arquitectura orientada a servicios basada en microservicios, cada uno implementado como un archivo de archivo de clase Java extendido (JAR (formato de archivo)).

Descripción

OSGi se basa en una arquitectura orientada a servicios. Las aplicaciones o componentes, vienen en forma de paquetes para su implementación, se pueden instalar, iniciar, detener, actualizar y desinstalar de forma remota sin necesidad de reiniciar. La gestión de paquetes/clases de Java se especifica con gran detalle. La gestión del ciclo de vida de las aplicaciones se implementa a través de API que permiten la descarga remota de políticas de gestión. El registro de servicios permite que los paquetes detecten la adición de nuevos servicios o la eliminación de servicios y se adapten en consecuencia.

Las especificaciones OSGi han evolucionado más allá del enfoque original de las puertas de enlace de servicio y ahora se utilizan en aplicaciones que van desde teléfonos móviles hasta el IDE Eclipse de código abierto. Otras áreas de aplicación incluyen automóviles, automatización industrial, automatización de edificios, PDA, grid computing, entretenimiento, gestión de flotas y servidores de aplicaciones.

En octubre de 2020, OSGi Alliance anunció la transición del esfuerzo de estandarización a Eclipse Foundation, después de lo cual se cerraría. Todos los artefactos han sido transferidos a la Fundación Eclipse, donde un Grupo de Trabajo OSGi" continúa manteniendo y evolucionando la especificación.

Proceso de especificación

La especificación OSGi es desarrollada por los miembros en un proceso abierto y se pone a disposición del público de forma gratuita bajo la Licencia de especificación OSGi. OSGi Alliance tiene un programa de cumplimiento que está abierto solo para miembros. A partir de noviembre de 2010, hay siete implementaciones de marco OSGi certificadas. Una página separada enumera las implementaciones de especificaciones OSGi certificadas y no certificadas, que incluyen marcos OSGi y otras especificaciones OSGi.

Arquitectura

OSGi Service Gateway Architecture

OSGi es un marco Java para desarrollar e implementar bibliotecas y programas de software modulares. Cada paquete es una colección de clases, archivos jar y archivos de configuración estrechamente acoplados y dinámicamente cargables que declaran explícitamente sus dependencias externas (si las hay).

El marco se divide conceptualmente en las siguientes áreas:

Bundles
Los envases son componentes JAR normales con cabeceras de manifiesto extra.
Servicios
La capa de servicios conecta paquetes de manera dinámica ofreciendo un modelo de interfaz Java (POJIs) para interfaces Java viejas (POJIs) o objetos Java antiguos (POJOs).
Registro de Servicios
La interfaz de programación de aplicaciones para los servicios de gestión.
Life-Cycle
La interfaz de programación de aplicaciones para la gestión del ciclo de vida (instalar, iniciar, detener, actualizar y desinstalar) para paquetes.
Módulos
La capa que define la encapsulación y la declaración de dependencias (cómo un paquete puede importar y exportar código).
Seguridad
La capa que maneja los aspectos de seguridad limitando la funcionalidad del paquete a las capacidades predefinidas.
Execution Environment
Define los métodos y clases disponibles en una plataforma específica. No hay una lista fija de entornos de ejecución, ya que está sujeto a cambios ya que el Proceso Comunitario de Java crea nuevas versiones y ediciones de Java. Sin embargo, la mayoría de las implementaciones de OSGi cuentan actualmente con el apoyo de la siguiente serie:
  • CDC-1.0/Foundation-1.0
  • CDC-1.1/Foundation-1.1
  • OSGi/Minimum-1.0
  • OSGi/Minimum-1.1
  • JRE-1.1
  • Desde J2SE-1.2 hasta J2SE-1.6

Paquetes

Clasificación: OSGi

Un paquete es un grupo de clases de Java y recursos adicionales equipados con un archivo de manifiesto detallado MANIFEST.MF en todo su contenido, así como los servicios adicionales necesarios para brindar al grupo de clases de Java incluido más comportamientos sofisticados, hasta el punto de considerar que todo el agregado es un componente.

A continuación se muestra un ejemplo de un archivo MANIFEST.MF típico con encabezados OSGi:

 Bundle-Name: Hola Mundo Bundle-SymbolicName: org.wikipedia.helloworld Bundle-Description: Un paquete de Hello World Bundle-ManifestVersion: 2 Bundle-Version: 1.0.0 Bundle-Activator: org.wikipedia.Activador Export-Package: org.wikipedia.helloworld;version="1.0.0" Import-Package: org.osgi.framework;version="1.3.0"

El significado de los contenidos en el ejemplo es el siguiente:

  1. Bundle-Name: Define un nombre legible por humanos para este paquete, Simplemente asigna un nombre corto al paquete.
  2. Bundle-SymbolicName: El único encabezado requerido, esta entrada especifica un identificador único para un paquete, basado en la convención de nombre de dominio inverso (utilizado también por los paquetes java).
  3. Bundle-Description: Una descripción de la funcionalidad del paquete.
  4. Bundle-ManifestVersion: Indica la especificación OSGi para usar para leer este paquete.
  5. Bundle-Version: Designa un número de versión al paquete.
  6. Bundle-Activator: Indica el nombre de clase a ser invocado una vez que se activa un paquete.
  7. Export-Package: Expresa que paquetes Java contenidos en un paquete se pondrán a disposición del mundo exterior.
  8. Import-Package: Indica qué paquetes Java serán necesarios desde el mundo exterior para cumplir con las dependencias necesarias en un paquete.

Ciclo de vida

OSGi Bundle Life-Cycle

Una capa de ciclo de vida agrega paquetes que se pueden instalar, iniciar, detener, actualizar y desinstalar dinámicamente. Los paquetes se basan en la capa del módulo para la carga de clases, pero agregan una API para administrar los módulos en tiempo de ejecución. La capa del ciclo de vida introduce dinámicas que normalmente no forman parte de una aplicación. Se utilizan amplios mecanismos de dependencia para asegurar el correcto funcionamiento del entorno. Las operaciones del ciclo de vida están completamente protegidas con la arquitectura de seguridad.

Bundle State Descripción
INSTALLEDEl paquete ha sido instalado con éxito.
RESOLVEDTodas las clases de Java que el paquete necesita están disponibles. Este estado indica que el paquete está listo para empezar o ha parado.
EmpiezaEl paquete está siendo iniciado, el BundleActivator.start método se ha llamado pero el método de inicio aún no ha regresado. Cuando el paquete tenga una política de activación, el paquete permanecerá en el estado STARTING hasta que el paquete se active según su política de activación.
ACTIVEEl paquete ha sido activado con éxito y se está ejecutando; su método de inicio de Bundle Activator ha sido llamado y devuelto.
STOPPINGEl paquete está siendo detenido. El BundleActivator.stop método se ha llamado pero el método de parada aún no ha regresado.
UNINSTALLEDEl paquete ha sido desinstalado. No puede entrar en otro estado.

A continuación se muestra un ejemplo de una clase Java típica que implementa la interfaz BundleActivator:

paquete org.wikipedia;importación org.osgi.framework.BundleActivator;importación org.osgi.framework.BundleContext;público clase Activador implementos BundleActivator {}privado BundleContext context;@Overridepúblico vacío Empieza()BundleContext context) lanzamientos Excepción {}Sistema.Fuera..println()"Starting: Hello World");esto.context = context;}@Overridepúblico vacío Para()BundleContext context) lanzamientos Excepción {}Sistema.Fuera..println()"Stopping: Adiós Mundo Cruel");esto.context = nulo;}}

Servicios

Servicios estándar

OSGi Alliance ha especificado muchos servicios. Los servicios se especifican mediante una interfaz Java. Los paquetes pueden implementar esta interfaz y registrar el servicio con el Registro de servicios. Los clientes del servicio pueden encontrarlo en el registro o reaccionar cuando aparece o desaparece.

La siguiente tabla muestra una descripción de los servicios del sistema OSGi:

Servicios de sistemas Descripción
RegistroEl registro de información, advertencias, información de depuración o errores se maneja a través del Servicio de Registros. Recibe entradas de registro y luego envía estas entradas a otros paquetes que se suscriben a esta información.
Configuration AdminEste servicio permite a un operador establecer y obtener la información de configuración de los paquetes desplegados
Acceso al dispositivoFacilita la coordinación de la detección automática y el apego de los dispositivos existentes. Esto se utiliza para escenarios de Plug and Play.
User AdminEste servicio utiliza una base de datos con información de usuario (privada y pública) para fines de autenticación y autorización.
IO ConnectorEl servicio de conexión IO implementa el CDC/CLDC javax.microedition.io paquete como servicio. Este servicio permite paquetes para proporcionar nuevos y alternativos esquemas de protocolo.
PreferenciasOfrece un mecanismo alternativo, más compatible con OSGi para usar el defecto de Java Properties por guardar preferencias.
Componente Tiempo de ejecuciónLa naturaleza dinámica de los servicios —pueden venir e ir en cualquier momento— hace más difícil escribir software. La especificación Component Runtime puede simplificar el manejo de estos aspectos dinámicos proporcionando una declaración basada en XML de las dependencias.
Despliegue AdminEstándariza el acceso a algunas de las responsabilidades del agente de gestión.
Event AdminProporciona un mecanismo de comunicación inter-bundeo basado en un modelo de publicación y suscripción.
Application AdminSimplifica la gestión de un entorno con muchos tipos diferentes de aplicaciones que están disponibles simultáneamente.

La siguiente tabla muestra una descripción de los servicios de protocolo OSGi:

Servicios de Protocolo Descripción
HTTP ServicePermite enviar y recibir información de OSGi utilizando HTTP.
Servicio de dispositivo de UPnPEspecifica cómo se pueden desarrollar paquetes OSGi para interoperar con dispositivos Universal Plug and Play (UPnP).
DMT AdminDefine una API para gestionar un dispositivo utilizando conceptos de las especificaciones de gestión de dispositivos Open Mobile Alliance (OMA).

La siguiente tabla muestra una descripción de los servicios varios de OSGi:

Varios Servicios Descripción
Wire AdminPermite la conexión entre un servicio productor y un servicio al consumidor.
XML ParserEl servicio XML Parser permite un paquete para localizar un parser con propiedades deseadas y compatibilidad con JAXP.
Medición y EstadoEl servicio de Medición y Estado permite y simplifica el correcto manejo de mediciones en una plataforma de servicio OSGi.

Organización

OSGi Alliance fue fundada por Ericsson, IBM, Motorola, Sun Microsystems y otros en marzo de 1999. Antes de constituirse como una corporación sin fines de lucro, se llamaba Connected Alliance.

Entre sus miembros se encuentran (desde febrero de 2015) más de 35 empresas de áreas comerciales bastante diferentes, por ejemplo, Adobe Systems, Deutsche Telekom, Hitachi, IBM, Liferay, Makewave, NEC, NTT, Oracle, Orange SA, ProSyst, Salesforce, Siemens, Software AG y TIBCO Software.

La Alianza tiene una junta directiva que proporciona el gobierno general de la organización. Los oficiales de OSGi tienen varios roles y responsabilidades en el apoyo a la alianza. El trabajo técnico se lleva a cabo dentro de los Grupos de Expertos (GE) autorizados por la junta directiva, y el trabajo no técnico se lleva a cabo en varios grupos de trabajo y comités. El trabajo técnico realizado dentro de los grupos de expertos incluye el desarrollo de especificaciones, implementaciones de referencia y pruebas de cumplimiento. Estos grupos de expertos han producido cinco versiones principales de las especificaciones OSGi (a partir de 2012).

Existen grupos de expertos dedicados para las áreas empresarial, móvil, de vehículos y de plataforma central.

El Enterprise Expert Group (EEG) es el GE más nuevo y se ocupa de las aplicaciones empresariales/del lado del servidor. En noviembre de 2007, el Residential Expert Group (REG) comenzó a trabajar en las especificaciones para gestionar de forma remota gateways residenciales/domésticos. En octubre de 2003, Nokia, Motorola, IBM, ProSyst y otros miembros de OSGi formaron un Grupo de Expertos Móviles (MEG) que especificará una plataforma de servicio basada en MIDP para la próxima generación de teléfonos móviles inteligentes, abordando algunas de las necesidades que CLDC no puede manejar. - Aparte de los CDC. MEG se convirtió en parte de OSGi como con R4.

Versiones de especificación

Estándares relacionados

Proyectos usando OSGi

Implementaciones del marco actual

NombreLicencia
ApacheFuente abierta
Apache KarafFuente abierta
Concierge OSGiFuente abierta
Equinox OSGiFuente abierta
Eclipse GeminiFuente abierta
KnopflerfishFuente abierta