Het mechanisme voor ondersteuning van plugins wordt geïmplementeerd met het OSGi-framework. Vanuit dit standpunt gezien is een plugin hetzelfde als een OSGi-bundel. De bundel en de bijbehorende klassen geven het laadproces van Java-klassen, het vereiste beheer en de levenscyclus van de bundel aan. In het vervolg van deze bespreking worden de termen plugin en bundel als uitwisselbaar beschouwd, tenzij er voor een bepaalde klasse in het framework onderscheid gemaakt moet worden.
De klasse Plugin vertegenwoordigt een plugin die op het platform wordt uitgevoerd. Het is een handige plaats om de aspecten van de levenscyclus te centraliseren en de algemene semantiek van een plugin. In een plugin kan een speciale functie voor de start- en stopaspecten van de levenscyclus zijn geïmplementeerd. Iedere levenscyclusmethode bevat een verwijzing naar een BundleContext die verdere informatie kan verschaffen.
Het startgedeelte van een levenscyclus verdient nadere bespreking. U hebt al gezien dat informatie over een plugin kan worden opgehaald uit het manifestbestand zonder dat de code hoeft te worden uitgevoerd. Meestal veroorzaakt een actie van een gebruiker in de workbench een opeenvolging van events waarbij een plugin gestart moet worden. Vanuit het perspectief van de implementatie wordt een plugin pas gestart als een klasse in de plugin moet worden gestart.
De methode start is tot nu toe een handige plaats geweest om initialisatie- en registratiegedrag van een plugin te implementeren. Het is echter van belang dat u weet dat de plugin in veel verschillende omstandigheden kan worden gestart. Een eenvoudige handeling als het ophalen van een pictogram om een object te decoreren kan een van de klassen in de plugin starten en daarmee dus ook de plugin. Een te enthousiaste initialisatie van zorgen dat de code en gegevens van de plugin veel eerder worden geladen dan nodig is. Het is daarom belangrijk om kritisch naar de initialisatietaken van de plugin te kijken en alternatieven te overwegen voor het uitvoeren van de initialisatie bij het opstarten.
Het beheer van de levenscyclus vormt het raakvlak van de "bundelbenadering" van OSGi en de "pluginbenadering" van het platform. Als de plugin is gestart, krijgt deze een verwijzing naar een BundleContext. Hiervandaan kan informatie over de plugin worden opgehaald. De BundleContext kan ook worden gebruikt voor het ophalen van informatie over andere bundels/plugins in het systeem.
BundleContext.getBundles() kan worden gebruikt om een array met alle bundels in het systeem op te halen. U kunt listeners voor BundleEvent registreren, zodat de plugin weet wanneer er een wijziging optreedt in de levenscyclus van een andere bundel. Zie de javadoc voor BundleContext en BundleEvent voor meer informatie.
Vóór versie 3.0 was een pluginregister (IPluginRegistry) beschikbaar voor het verstrekken van vergelijkbare informatie. Hierin kon bijvoorbeeld worden gezocht in de plugindescriptors van alle plugins in het systeem. Dit register is nu gedeprecieerd. U moet BundleContext voor dit doel gebruiken. Het platformregister wordt nu uitsluitend gebruikt voor informatie over extensies en extensiepunten.
Met de interface BundleActivator wordt het start- en stopgedrag gedefinieerd dat in Plugin is geïmplementeerd. De klasse Plugin is een goede plaats is om deze functie te implementeren, maar een pluginontwikkelaar heeft de vrijheid om de interface voor BundleActivator te implementeren in een andere klasse die geschikt is voor het ontwerp van de plugin. De interface hoeft zelfs alleen in de plugin te zijn geïmplementeerd als dit nodig is voor het beheer van de levenscyclus.
Onder iedere plugin ligt een OSGi-bundel die wordt beheerd door het framework. De Bundle is een OSGi-eenheid van modulariteit. Een bundel is eigenlijk niets anders dan een verzameling bestanden (resources en code) die op het platform zijn geïnstalleerd. Iedere bundel heeft een eigen Java-klassenlader en bevat protocollen om zichzelf te starten, stoppen en deïnstalleren. Vanuit het perspectief van het Eclipse-platform is Bundle niet meer dan een implementatieklasse. Pluginontwikkelaars breiden de bundelklasse niet uit, maar gebruiken Plugin of andere BundleActivator-implementaties om de plugin mee aan te geven.