Hola, OSGi, Parte 1: Paquetes para principiantes

La Open Services Gateway Initiative (OSGi) define una arquitectura para desarrollar e implementar aplicaciones y bibliotecas modulares. En este primer artículo en una introducción de tres partes a OSGi, Sunil Patil lo inicia con los conceptos de desarrollo de OSGi y le muestra cómo construir una aplicación Hello World simple usando la implementación del contenedor Eclipse OSGi, Equinox. También toca brevemente la creación de aplicaciones orientadas a servicios utilizando OSGi e introduce las clases ServiceFactoryy de OSGi ServiceTracker.

La Open Services Gateway Initiative (OSGi), también conocida como Dynamic Module System para Java, define una arquitectura para el desarrollo de aplicaciones modulares. Las implementaciones de contenedores OSGi como Knopflerfish, Equinox y Apache Felix le permiten dividir su aplicación en múltiples módulos y así administrar más fácilmente las dependencias cruzadas entre ellos.

OSGi, Equinox y Project Jigsaw

Obtenga una visión del mundo real al estudiar las lecciones aprendidas durante una integración OSGi / Equinox en el proyecto científico más grande del Reino Unido, luego descubra lo que puede esperar del Proyecto Jigsaw en Java 9.

De manera similar a las especificaciones Java Servlet y EJB, la especificación OSGi define dos cosas: un conjunto de servicios que un contenedor OSGi debe implementar y un contrato entre el contenedor y su aplicación. Desarrollar en la plataforma OSGi significa primero construir su aplicación usando las API de OSGi y luego implementarla en un contenedor OSGi. Desde la perspectiva de un desarrollador, OSGi ofrece las siguientes ventajas:

  • Puede instalar, desinstalar, iniciar y detener diferentes módulos de su aplicación de forma dinámica sin reiniciar el contenedor.
  • Su aplicación puede tener más de una versión de un módulo en particular ejecutándose al mismo tiempo.
  • OSGi proporciona una muy buena infraestructura para desarrollar aplicaciones orientadas a servicios, así como aplicaciones integradas, móviles y de Internet enriquecidas.

Dado que utiliza contenedores de servlets para crear aplicaciones web y contenedores EJB para crear aplicaciones transaccionales, es posible que se pregunte por qué necesita otro tipo de contenedor. La respuesta corta es que los contenedores OSGi están diseñados específicamente para desarrollar aplicaciones Java complejas que desea dividir en módulos. Ampliaré esa respuesta corta a lo largo de esta serie.

Hola, OSGi: lee la serie

  • Parte 1: Paquetes para principiantes
  • Parte 2: Introducción a los módulos dinámicos de Spring
  • Parte 3: llévelo al lado del servidor

OSGi en aplicaciones empresariales

La OSGi Alliance inició el trabajo en la especificación OSGi en marzo de 1999. Su objetivo principal era crear una especificación abierta para brindar servicios administrados a redes y dispositivos locales. La idea básica es que una vez que agregue una plataforma de servicio OSGi a un dispositivo en red (integrado y servidores), debería poder administrar el ciclo de vida de los componentes de software en ese dispositivo desde cualquier lugar de la red. Los componentes de software se pueden instalar, actualizar o eliminar sobre la marcha sin tener que interrumpir el funcionamiento del dispositivo.

Durante años, la tecnología OSGi ha florecido en el mercado de dispositivos de red y sistemas integrados. Ahora, gracias en parte a Eclipse, OSGi está emergiendo como una tecnología viable y valiosa para el desarrollo empresarial.

Creciente soporte para OSGi

En 2003, el equipo de desarrollo de Eclipse comenzó a buscar formas de hacer de Eclipse una plataforma de cliente enriquecido más dinámica y aumentar la modularidad del conjunto de herramientas. Finalmente, el equipo decidió utilizar el marco OSGi como modelo de componente en tiempo de ejecución. Eclipse 3.0, lanzado en junio de 2004, fue la primera versión de Eclipse basada en OSGi.

Casi todos los servidores de aplicaciones empresariales admiten o planean admitir OSGi. El marco Spring también es compatible con OSGi, a través del proyecto Spring Dynamic Modules for OSGi Service Platforms, que proporciona una capa de infraestructura para facilitar el uso de OSGi en el desarrollo de aplicaciones empresariales Java basadas en Spring.

Contenedores OSGi de código abierto

Desde el punto de vista de un desarrollador empresarial, el contenedor OSGi tiene un tamaño tan reducido que se puede integrar fácilmente en una aplicación empresarial. Por ejemplo, supongamos que está desarrollando una aplicación web compleja. Desea dividir la aplicación en varios módulos: un módulo para la capa de vista, otro para la capa DAO y un tercer módulo para la capa de acceso a datos. El uso de un contenedor OSGi integrado para administrar las dependencias cruzadas de estos módulos le permitiría actualizar su capa DAO (por ejemplo, de DAO lento a DAO rápido) sin reiniciar su aplicación.

Siempre que su aplicación cumpla con la especificación OSGi, debería poder ejecutarse en cualquier contenedor compatible con OSGi. Actualmente, hay tres contenedores OSGi de código abierto populares:

  • Equinox es la implementación de referencia para la parte de la estructura de OSGi Service Platform Release 4. Es el tiempo de ejecución modular de Java en el corazón del Eclipse IDE e implementa todas las características obligatorias y la mayoría de las opcionales de la especificación OSGi R4.
  • Knopflerfish es una implementación de código abierto de las especificaciones OSGi R3 y OSGi R4. Knopflerfish 2 implementa todas las características obligatorias y algunas de las características opcionales definidas en la especificación R4.
  • Apache Felix es el contenedor OSGi de código abierto de Apache Software Foundation. En el momento de redactar este documento, este contenedor no cumple totalmente con la especificación OSGI R4.

En este artículo usaremos Equinox como nuestro contenedor OSGi. Consulte la sección Recursos para obtener más información sobre Apache Felix y Knopflerfish.