OSGI
ist ein Komponentenmodell in Java sowie eine dazugehörige Plattform-Definition.
Der bekannteste Vertreter einer OSGI-Applikation ist Eclipse. Dessen Plug-In System basiert komplett auf OSGI. Außerdem ist die Weiterentwicklung des OSGI-Standards auch in Richtung Desktop-Applikationen wesentlich von Eclipse und dem dort entwickelten Framework Equinox beeinflusst worden. Equinox stellt daher für normale Applikationen sowas wie die Standard-Implementierung von OSGI dar (zumindest bezieht sich sehr viel Dokumentation hierauf).
In einem laufenden OSGI-Framework können abgeschlossene Module - sogenannte OSGI-Bundles - jederzeit geladen und wieder entfernt werden. Jedes Bundle definiert dabei eigene Abhängigkeiten von anderen Bundles sowie eigene Schnittstellen, durch die es mit anderen Bundles kommunizieren kann. Dabei sorgt das Framework dafür, das einzelne Bundles auch wirklich nur die definierten Bundles und APIs zu sehen bekommen. So ist eine klare Trennung verschiedener Komponenten und eine klare Schnittstelle sichergestellt.
Dokumentation zu OSGI #
Leider ist es gar nicht so einfach, vernünftige Dokumentation zum Thema zu finden. Deshalb hier eine Liste von Artikeln, die mir weitergeholfen haben:
- grundlegende Artikel darüber, was OSGI überhaupt ist
- Artikel zu ersten Schritten mit Eclipse, Equinox und OSGI:
- IBM-Artikel über die OSGI Console
- Ein Artikel über das classloading
beleuchtet die wichtigste Grundlage, auf der die Trennung von Modulen basiert: Die eigenen ClassLoader des OSGI Frameworks.
Tips und Tricks #
Die Erste-Schritte-Anleitungen, die ich ausprobiert habe, ergaben wilde Fehlermeldungen anstatt dem Start der OSGI Console:
!MESSAGE Could not find bundle: org.eclipse.equinox.console ...
Dann habe ich nach einigem suchen hier
gelesen, das die OSGI-Console neuerdings(?) nicht mehr im Bundle org.osgi.framework inegriert ist, sondern das man noch einige andere Bundles hinzufügen muss. Hierzu nimmt man entweder die vier dort genannten:
org.apache.felix.gogo.command org.apache.felix.gogo.runtime org.apache.felix.gogo.shell org.eclipse.equinox.console
Oder nur die letzten beiden und lässt dann mittels des "Add Required Bundles"-Button die Abhängigkeiten suchen. Beide Methoden ergeben eine leicht unterschiedliche Bundle-Zusamenstellung, funktionieren aber (was auch immer das bedeuten soll).