En pocas palabras, OSGi es un estándar utilizado para crear aplicaciones modulares. Agrega un nuevo nivel de modularidad: paquetes (también conocidos como componentes, módulos). Cada paquete contiene clases e interfaces y lo que es más importante que debe explícitamente Estado:
- , que otros componentes o paquetes Java que utiliza,
- y qué paquetes se quiere exponer a ser utilizado por otros componentes.
Desde el punto de vista técnico, los paquetes son archivos jar que tienen un archivo META-INF/MANIFEST.MF
poco extendido. Toda la información mencionada anteriormente se almacena en el archivo MANIFEST.MF
.
Desde el punto de vista práctico, esta explicitud tiene ventajas y desventajas. Para mí, la mayor ventaja es que se ven obligados a pensar en su arquitectura, módulos e interacción entre ellos más que en las aplicaciones estándar. Esto puede crear una mejor arquitectura donde cada módulo es responsable de tareas bien definidas y los módulos pueden ser reutilizados. Si se trata de desventajas, la creación de muchos módulos puede ser dolorosa a veces. Es bastante fácil tener muchos módulos y si realmente tienes muchos, puede ser difícil mantener todas las dependencias entre los módulos (los ciclos de dependencia son bastante dolorosos).
OSGi no es solo un estándar de construcción de aplicaciones modulares. También especifica el entorno en el que existen paquetes y se ejecutan. Esto es algo que debe tener en cuenta: al usar OSGi, debe iniciar su aplicación en un entorno especial. Este entorno (por ejemplo, Eclipse Equinox) es responsable de ejecutar su aplicación. Proporciona algunas posibilidades de lujo. Por ejemplo, puede agregar un paquete a la aplicación en ejecución sin necesidad de detener esta aplicación; este puede ser un elemento realmente importante en algunos tipos de aplicaciones (pero en mi humilde opinión no hay muchas aplicaciones que realmente lo necesiten).
Lo que es realmente importante también es un hecho que algunas librerías de código abierto pueden no ser totalmente compatibles con la infraestructura OSGi y puede ser difícil utilizarlas como en aplicaciones Java estándar (recuerde que en OSGi todo debería ser un paquete). Sin embargo, muchas bibliotecas populares se incluyeron en paquetes, por ejemplo, Spring proporciona su bundles repository que contiene muchas bibliotecas populares (pero no todas).
OSGi es bastante complicado y es difícil describirlo y sus posibilidades en pocas palabras.Lo que escribí son solo los elementos más importantes (OMI) de OSGi. Pero OSGI es mucho más, p. los paquetes pueden enviarse eventos entre ellos, pueden brindarse servicios entre ellos. Si está interesado en más detalles, le sugiero que vaya a través de un tutorial. Puedo recomendar this one in Java World. Después de eso, puede echarle un vistazo al this free e-book sobre OSGi (contiene muchos detalles). Puede encontrar todos los detalles sobre OSGi en las especificaciones oficiales, pero no diría que son fáciles de leer (al menos al principio). Puede encontrarlos en here (antes de descargarlos deberá aceptar la licencia y algunos avisos legales) .
Para resumir Creo que OSGi es útil al construir aplicaciones modulares, pero de seguro no es gratis. Es un estándar bastante pesado que puede prohibirle hacer algunas cosas y obligarlo a hacer las cosas la forma OSGi.
Algunos relacionados SO preguntas:
Muchas gracias por su respuesta detallada :) – Izza
ahora con la llegada de Microservices, ¿qué tan diferentes o mejores son los microservicios en comparación con OSGi? – yathirigan