OSGi
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 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
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:
- Bundle-Name: Define un nombre legible por humanos para este paquete, Simplemente asigna un nombre corto al paquete.
- 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).
- Bundle-Description: Una descripción de la funcionalidad del paquete.
- Bundle-ManifestVersion: Indica la especificación OSGi para usar para leer este paquete.
- Bundle-Version: Designa un número de versión al paquete.
- Bundle-Activator: Indica el nombre de clase a ser invocado una vez que se activa un paquete.
- Export-Package: Expresa que paquetes Java contenidos en un paquete se pondrán a disposición del mundo exterior.
- 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
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 |
---|---|
INSTALLED | El paquete ha sido instalado con éxito. |
RESOLVED | Todas las clases de Java que el paquete necesita están disponibles. Este estado indica que el paquete está listo para empezar o ha parado. |
Empieza | El 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.
|
ACTIVE | El paquete ha sido activado con éxito y se está ejecutando; su método de inicio de Bundle Activator ha sido llamado y devuelto. |
STOPPING | El paquete está siendo detenido. El BundleActivator.stop método se ha llamado pero el método de parada aún no ha regresado.
|
UNINSTALLED | El 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 |
---|---|
Registro | El 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 Admin | Este servicio permite a un operador establecer y obtener la información de configuración de los paquetes desplegados |
Acceso al dispositivo | Facilita 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 Admin | Este servicio utiliza una base de datos con información de usuario (privada y pública) para fines de autenticación y autorización. |
IO Connector | El 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.
|
Preferencias | Ofrece un mecanismo alternativo, más compatible con OSGi para usar el defecto de Java Properties por guardar preferencias.
|
Componente Tiempo de ejecución | La 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 Admin | Estándariza el acceso a algunas de las responsabilidades del agente de gestión. |
Event Admin | Proporciona un mecanismo de comunicación inter-bundeo basado en un modelo de publicación y suscripción. |
Application Admin | Simplifica 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 Service | Permite enviar y recibir información de OSGi utilizando HTTP. |
Servicio de dispositivo de UPnP | Especifica cómo se pueden desarrollar paquetes OSGi para interoperar con dispositivos Universal Plug and Play (UPnP). |
DMT Admin | Define 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 Admin | Permite la conexión entre un servicio productor y un servicio al consumidor. |
XML Parser | El servicio XML Parser permite un paquete para localizar un parser con propiedades deseadas y compatibilidad con JAXP. |
Medición y Estado | El 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
- OSGi Release 1 (R1): May 2000
- OSGi Release 2 (R2): October 2001
- OSGi Release 3 (R3): March 2003
- OSGi Release 4 (R4): Octubre 2005 / Septiembre 2006
- Especificaciones básicas (R4 Core): octubre 2005
- Especificación móvil (R4 Mobile / JSR-232): septiembre 2006
- OSGi Release 4.1 (R4.1): May 2007 (AKA JSR-291)
- OSGi Release 4.2 (R4.2): Septiembre 2009
- Especificación de las empresas (R4.2): marzo de 2010
- OSGi Release 4.3 (R4.3): April 2011
- Core: April 2011
- Compendio y residencia: mayo de 2012
- OSGi Release 5 (R5): June 2012
- Core and Enterprise: June 2012
- OSGi Release 6 (R6): June 2015
- Core: June 2015
- OSGi Release 7 (R7): Abril 2018
- Core and Compendium: abril 2018
- OSGi Release 8 (R8): Diciembre 2020
Estándares relacionados
- MHP / OCAP
- Plug y Play Universal (UPnP)
- DPWS
- ITU-T G.hn
- LonWorks
- CORBA
- CEBus
- EHS (KNX) / CECED CHAIN
- Java Management Extensions
Proyectos usando OSGi
- Adobe Experience Manager - un sistema de gestión de contenidos empresarial
- Apache Aries - Blueprint Container implements and extensions of application-focused characteristics defined by OSGi Enterprise Expert Group
- Apache Sling - OSGi-based applications layer for JCR content repositories
- Atlassian Confluence y JIRA - la arquitectura plug-in para este wiki empresarial y el tracker de edición utiliza OSGi
- Business Intelligence and Reporting Tools (BIRT) Project - Open source reporting engine
- Cytoscape - una plataforma de software de bioinformática de código abierto (en la versión 3.0)
- DataNucleus - open source data services and persistence platform in service-oriented architectures
- DDF - Distributed Data Framework provides free and opensource data integration
- Dotcms - open source Web Content Management
- EasyBeans - contenedor de código abierto EJB 3
- Eclipse - IDE de código abierto y rica plataforma cliente
- iDempiere - es una implementación de OSGi de la Subdivisión de ERP de código abierto GlobalQSS Adempiere361 originalmente iniciada por Low Heng Sin
- Eclipse Virgo - servidor basado en microkernel de código abierto construido de paquetes OSGi y aplicaciones de soporte OSGi
- GlassFish (v3) - servidor de aplicaciones para Java EE
- Fuse ESB - una liberación de ServiceMix 4.
- Navegador de Genoma Integrado - una fuente abierta, interfaz gráfica de escritorio para visualizar, explorar y analizar datos de genoma
- IntelliJ - Java IDE y rica plataforma cliente con edición comunitaria gratuita
- JBoss - Servidor de aplicaciones JBoss de Red Hat
- JOnAS 5 - servidor de aplicaciones Java EE 5 de código abierto
- JOSSO 2 - Plataforma de gestión de identidad y acceso de código abierto de Atricore
- Liferay Dxp - open source and commercial enterprise Portal platform use OSGi from version 7.x.
- Lucee 5 - código abierto CFML Web Application Server
- NetBeans - IDE de código abierto y rica plataforma cliente
- Nuxeo - open source ECM Service Platform
- Proyecto Open Daylight - Proyecto con el objetivo de acelerar la adopción de redes definidas por software
- OpenEJB - de código abierto OSGi-enabled EJB 3.0 contenedor que se puede ejecutar tanto en modo independiente o incrustado
- openHAB - software de automatización de código abierto
- OpenWorm - simulación de software de código abierto de C. elegans, a través de la dedicada Geppetto plataforma modular
- Akana - API Gateway, Portal y Analytics servidor de Akana (antes SOA Software)
- Weblogic - Oracle Weblogic Application Server
- WebSphere - IBM Websphere JEE Application Server
- WebMethods - SoftwareAG WebMethods
- WSO2 Carbon - Plataforma base para la empresa WSO2 pila de middleware de código abierto
Implementaciones del marco actual
Nombre | Licencia |
---|---|
Apache | Fuente abierta |
Apache Karaf | Fuente abierta |
Concierge OSGi | Fuente abierta |
Equinox OSGi | Fuente abierta |
Eclipse Gemini | Fuente abierta |
Knopflerfish | Fuente abierta |
Contenido relacionado
Algoritmo de Ford-Fulkerson
FLOW-MATIC
Contrabando de solicitudes HTTP