La mecánica de soporte de conectores se implementa mediante la infraestructura OSGi. Desde este punto de vista, un conector es equivalente a un paquete compuesto OSGi. El paquete compuesto y sus clases asociadas especifican e implementan el proceso de la carga de clases Java, la gestión de prerrequisitos y el ciclo de vida del paquete compuesto. En el resto de esta descripción, utilizaremos los términos conector y paquete compuesto indistintamente, excepto al describir una clase determinada de la infraestructura.
La clase Plugin representa un conector que se ejecuta en la plataforma. Es una ubicación adecuada para centralizar los aspectos del ciclo de vida y la semántica global de un conector. Un conector puede implementar una función especializada para los aspectos de inicio y detención de su ciclo de vida. Cada método de ciclo de vida incluye una referencia a un BundleContext que puede suministrar información adicional.
La parte de inicio del ciclo de vida merece una atención especial. Ya hemos visto que la información relativa a un conector puede obtenerse del archivo de manifiesto del conector sin necesidad de ejecutar el código del mismo. Generalmente, alguna acción de usuario en el entorno de trabajo provoca una cadena de eventos que requiere el inicio de un conector. Desde el punto de vista de una implementación, un conector nunca se inicia hasta que es necesario cargar una clase contenida en el conector.
El método start ha sido el lugar adecuado para implementar el comportamiento de inicialización y registro de un conector. Sin embargo, es importante tener en cuenta que el conector puede iniciarse en circunstancias muy diversas. Algo tan simple como obtener un icono para decorar un objeto puede provocar la carga de las clases del conector, iniciando con ello el propio conector. Una inicialización demasiado exigente puede provocar la carga del código y los datos del conector mucho antes de lo necesario. Por tanto, es importante observar atentamente las tareas de inicialización del conector y considerar alternativas para realizar la inicialización durante el arranque.
La gestión del ciclo de vida es el punto en el que coinciden el término "paquete compuesto" de OSGi y el término "conector" de la plataforma. Cuando se inicia el conector, obtiene una referencia a un BundleContext desde el que puede obtener información relacionada con el conector. El BundleContext también puede utilizarse para obtener información acerca de otros paquetes compuestos/conectores del sistema.
BundleContext.getBundles() puede utilizarse para obtener una matriz de todos los paquetes compuestos del sistema. Puede registrarse escuchas de BundleEvent a fin de que el conector esté al tanto de los cambios producidos en el estado del ciclo de vida de otros paquetes compuestos. Consulte el javadoc de BundleContext y BundleEvent para obtener más información.
Antes de la versión 3.0, se suministraba un registro de conector (IPluginRegistry) para proporcionar información similar. Por ejemplo, podía consultarse para obtener los descriptores de conector de todos los conectores del sistema. Este registro ha quedado obsoleto, y en su lugar debe utilizarse BundleContext para este propósito. El registro de plataforma se utiliza ahora exclusivamente para obtener información acerca de las extensiones y puntos de extensión.
La interfaz BundleActivator define el comportamiento de inicio y detención implementado en la clase Plugin. Aunque la clase Plugin es una ubicación adecuada para implementar esta función, el desarrollador del conector tiene libertad absoluta para implementar la interfaz de BundleActivator en cualquier clase adecuada al diseño del conector. De hecho, el conector no necesita implementar esta interfaz en absoluto si no tiene necesidades específicas de gestión del ciclo de vida.
Debajo de todo conector, subyace un paquete compuesto OSGi gestionado por la infraestructura. El paquete compuesto es la unidad de modularidad de OSGi. En esencia, un paquete compuesto es simplemente una colección de archivos (recursos y código) instalados en la plataforma. Cada paquete compuesto tiene su propio cargador de clases Java e incluye un protocolo para iniciarse, detenerse y desinstalarse a sí mismo. Desde el punto de vista de la plataforma Eclipse, Bundle es simplemente una clase de implementación. Los desarrolladores de conectores no amplían la clase bundle, sino que utilizan Plugin u otra implementación de BundleActivator para representar el conector.