Die Mechanik für die Unterstützung von Plug-ins wird über das OSGi-Gerüst implementiert. Von diesem Standpunkt aus ist ein Plug-in nichts anderes als ein OSGi-Paket. Das Paket und die ihm zugeordneten Klassen bestimmen und implementieren die Prozesse für das Laden einer Java-Klasse, die Verwaltung von Vorbedingungen und den Lebenszyklus des Pakets. Im weiteren Verlauf dieser Erläuterungen werden die Begriffe Plug-in und Paket synonym verwendet, es sei denn, es handelt sich um eine bestimmte Klasse innerhalb des Gerüsts.
Die Klasse Plug-in stellt ein Plug-in dar, das in der Plattform läuft. Sie ist ein geeigneter Ort, um die Lebenszyklusaspekte und allgemeine Semantik eines Plug-ins zentral zusammenzufassen. Ein Plug-in kann spezielle Funktionen für die Aspekte start und stop seines Lebenszyklus implementieren. Jede Lebenszyklusmethode enthält einen Verweis auf einen BundleContext, in dem zusätzliche Informationen angegeben werden können.
Der Abschnitt start des Lebenszyklus lohnt eine eingehendere Erläuterung. Es wurde bereits dargestellt, dass Informationen über ein Plug-in aus der Manifest-Datei eines Plug-ins abgerufen werden können, ohne auch nur einen Teil des Plug-in-Codes ausführen zu müssen. Normalerweise löst eine Benutzeraktion in der Workbench eine Kette von Ereignissen aus, die den Start eines Plug-ins erfordert. Aus einer Implementierungssicht wird ein Plug-in niemals gestartet, bis eine im Plug-in enthaltene Klasse geladen werden muss.
Die Methode start hat sich als komfortable Stelle erwiesen, um Initialisierungs- und Registrierungsverhalten eines Plug-ins zu implementieren. Es ist allerdings wichtig, zu verstehen, dass Ihr Plug-in unter vielen verschiedenen Umständen gestartet werden kann. Ein einfacher Arbeitsschritt, wie beispielsweise der Abruf eines Symbols, um ein Objekt mit einem Dekorator zu versehen, kann eine Klasse Ihres Plug-ins laden und somit das Plug-in starten. Eine voreilige Initialisierung kann dazu führen, dass Code und Daten Ihres Plug-ins viel früher als notwendig geladen werden. Daher ist es wichtig, die Initialisierungstasks Ihres Plug-ins genau zu untersuchen und nach Alternativen zu einer Initialisierung beim Start zu suchen.
Die Terminologien des OSGi-"Pakets" und der Plattform-"Plug-in" treffen beim Lebenszyklusmanagement auf einander. Ihr Plug-in erhält beim Start einen Verweis auf einen BundleContext aus dem es Informationen über das Plug-in abrufen kann. Der BundleContext kann auch verwendet werden, um Informationen über andere Pakete / Plug-ins im System zu erhalten.
Über BundleContext.getBundles() kann auf eine Gruppe aller Pakete im System zugegriffen werden. Für BundleEvent können Listener-Funktionen registriert werden, so dass Ihr Plug-in davon in Kenntnis gesetzt wird, wenn der Lebenszyklusstatus eines anderen Pakets geändert wird. Weitere Informationen finden Sie in der Javadoc-Datei von BundleContext und BundleEvent.
Vor der Version 3.0 wurde eine Plug-in-Registrierungsdatenbank (IPluginRegistry) zur Verfügung gestellt, die ähnliche Informationen bereitstellte. So konnte beispielsweise eine Abfrage nach den Plug-in-Deskriptoren aller Plug-ins im System ausgeführt werden. Diese Registrierungsdatenbank ist mittlerweile veraltet. Stattdessen sollte BundleContext für diesen Zweck verwendet werden. Die Registrierungsdatenbank der Plattform wird inzwischen ausschließlich für Informationen über Erweiterungen und Erweiterungspunkte verwendet.
Die Schnittstelle BundleActivator definiert das in Plug-in implementierte Start- und Stopverhalten. Obwohl die Klasse Plug-in eine geeignete Stelle ist, um diese Funktion zu implementieren, hat ein Plug-in-Entwickler völlige Freiheit, die Schnittstelle für BundleActivator in jeder beliebigen Klasse zu implementieren, die dem Design des Plug-ins entspricht. Genaugenommen muss Ihr Plug-in diese Schnittstelle nicht einmal implementieren, wenn Sie keine bestimmten Anforderungen an das Lebenszyklus-Management haben.
Unterhalb von jedem Plug-in befindet sich ein OSGi-Paket, das durch das Gerüst verwaltet wird. Das Paket ist die OSGi-Moduleinheit. Im Prinzip ist ein Paket nichts anderes als eine Zusammenstellung von Dateien (Ressourcen und Code), die in der Plattform installiert werden. Jedes Paket verfügt über ein eigenes Ladeprogramm für Java-Klassen, sowie ein Protokoll, über das es sich selbst starten, stoppen und deinstallieren kann. Aus der Sicht der Eclipse-Plattform ist ein Paket lediglich eine Implementierungsklasse. Plug-in-Entwickler erweitern diese Paketklasse nicht, sondern verwenden Plug-in oder andere Implementierungen vonBundleActivator, um das Plug-in darzustellen.