Plug-ins et regroupements

Le mécanisme qui prend en charge les plug-ins est implémenté à l'aide de la structure OSGi. De ce point de vue, un plug-in est similaire à un regroupement OSGi. Le regroupement et ses classes associées spécifient et implémentent le processus de chargement des classes Java, de gestion pré-requise et de cycle de vie du regroupement. Dans le reste de la documentation, nous utilisons les termes plug-in et regroupement de manière interchangeable, sauf lorsqu'il s'agit d'une classe déterminée dans la structure.

Plugin

La classe Plugin représente un plug-in qui est exécuté sur la plate-forme. Cette classe est pratique pour centraliser les aspects liés au cycle de vie et la sémantique général d'un plug-in. Un plug-in peut implémenter une fonction spécialisée pour les aspects start et stop de son cycle de vie. Chaque méthode de cycle de vie inclut une référence à un protocole BundleContext qui peut fournir des informations complémentaires.

La portion start du cycle de vie est intéressante à décrire. Vous avez déjà découvert que les informations relatives à un plug-in peuvent être obtenues dans le fichier manifeste du plug-in sans avoir à exécuter le code du plug-in. En général, une action utilisateur au niveau du plan de travail entraîne une chaîne d'événements qui nécessitent le lancement d'un plug-in. Du point de vue de l'implémentation, un plug-in n'est jamais lancé tant qu'une classe contenu dans le plug-in n'a pas besoin d'être chargée.

La méthode start est pratique pour implémenter le comportement d'initialisation et d'enregistrement d'un plug-in. Cependant, il est important de réaliser que le plug-in peut être lancé dans différents cas. Une opération aussi simple que l'obtention d'un icône pour décorer un objet peut entraîner le chargement des classes du plug-in, ce qui a pour effet de lancer le plug-in. Une initialisation rapide peut entraîner le chargement du code et des données du plug-in à charger longtemps avant que cela soit nécessaire. Par conséquent, il est important d'observer attentivement les tâches d'initialisation du plug-in et d'envisager des solutions de remplacement pour procéder à l'initialisation au démarrage.

Contexte de regroupement

La gestion du cycle de vie permet d'aborder la terminologie du "regroupement" OSGi et celle du "plug-in" de la plate-forme. Lorsque le plug-in est lancé, il reçoit une référence à un protocole BundleContext dans lequel il est possible d'obtenir des informations relatives au plug-in. BundleContext peut également être utilisé pour rechercher d'autres regroupements/plug-ins dans le système.

La méthode BundleContext.getBundles() peut être utilisée pour obtenir un tableau contenant tous les regroupements du système. Les modules d'écoute de BundleEvent peuvent être enregistrés afin que le plug-in soit averti en cas de modification du statut de cycle de vie d'un autre regroupement. Pour plus d'informations sur BundleContext et BundleEvent, reportez-vous à la documentation Java.

Avant la version 3.0, un registre de plug-in (IPluginRegistry) a été fourni pour indiquer des informations du même type. Par exemple, les descripteurs de plug-in de tous les plug-ins du système peuvent être interrogés. Ce registre est désormais déconseillé et BundleContext doit être utilisé dans ce but. Le registre de plate-forme est désormais utilisé exclusivement pour les informations liées aux extensions et aux points d'extension.

Activateur de regroupement

L'interface BundleActivator définit le comportement de début et de fin implémenté dans la classe Plugin. Même si la classe Plugin est pratique pour implémenter cette fonction, un développeur de plug-in est totalement libre d'implémenter l'interface de BundleActivator dans n'importe quelle classe jugée appropriée pour la conception du plug-in. En fait, le plug-in n'a pas du tout besoin d'implémenter cette interface en l'absence de besoins spécifiques en terme de gestion du cycle de vie.

Regroupements

Derrière chaque plug-in se cache un regroupement OSGi géré par la structure. Le regroupement est l'unité de modularité OSGi. Fondamentalement, un regroupement est juste une collection de fichiers (ressources et code) installée sur la plate-forme. Chaque regroupement possède son propre chargeur de classes Java et inclut le protocole de lancement, d'arrêt et de désinstallation. Du point de vue de la plate-forme Eclipse, leregroupement est simplement une classe d'implémentation. Les développeurs de plug-in n'étendent pas la classe de regroupements, mais utilisent l'implémentation Plugin ou d'autres implémentations BundleActivator pour représenter le plug-in.