Welche Vorteile bietet Ihnen das OSGi-Komponentensystem?
Nun, hier ist eine ziemliche Liste:
Reduzierte Komplexität - Entwickeln mit OSGi-Technologie bedeutet Entwickeln von Bundles: den OSGi-Komponenten. Bundles sind Module. Sie verstecken ihre Interna vor anderen Bundles und kommunizieren über genau definierte Dienste. Das Verstecken von Interna bedeutet mehr Freiheit, sich später zu ändern. Dies reduziert nicht nur die Anzahl der Fehler, sondern vereinfacht auch die Entwicklung von Bundles, da Bundles mit der richtigen Größe eine Reihe von Funktionen über genau definierte Schnittstellen implementieren. Es gibt einen interessanten Blog, der beschreibt, was die OSGi-Technologie für ihren Entwicklungsprozess getan hat.
Wiederverwendung - Das OSGi-Komponentenmodell erleichtert die Verwendung vieler Komponenten von Drittanbietern in einer Anwendung. Immer mehr Open-Source-Projekte stellen ihre JARs für OSGi bereit. Kommerzielle Bibliotheken werden jedoch auch als fertige Bundles verfügbar.
Echte Welt -Das OSGi-Framework ist dynamisch. Es kann Bundles im laufenden Betrieb aktualisieren und Dienste können kommen und gehen. Entwickler, die an traditionelleres Java gewöhnt sind, sehen dies als sehr problematisch an und sehen den Vorteil nicht. Es stellt sich jedoch heraus, dass die reale Welt sehr dynamisch ist und dass dynamische Dienste, die kommen und gehen können, die Dienste perfekt für viele reale Szenarien geeignet machen. Ein Dienst könnte beispielsweise ein Gerät im Netzwerk modellieren. Wenn das Gerät erkannt wird, wird der Dienst registriert. Wenn das Gerät nicht mehr verfügbar ist, wird der Dienst nicht registriert. Es gibt überraschend viele reale Szenarien, die diesem dynamischen Servicemodell entsprechen. Anwendungen können daher die leistungsstarken Grundelemente der Dienstregistrierung (registrieren, abrufen, mit einer ausdrucksstarken Filtersprache auflisten und darauf warten, dass Dienste angezeigt und ausgeblendet werden) in ihrer eigenen Domäne wiederverwenden. Dies spart nicht nur das Schreiben von Code, sondern bietet auch globale Transparenz, Debugging-Tools und mehr Funktionen, als dies für eine dedizierte Lösung implementiert worden wäre. Das Schreiben von Code in einer solch dynamischen Umgebung klingt wie ein Albtraum, aber zum Glück gibt es Unterstützungsklassen und Frameworks, die den größten Teil, wenn nicht den ganzen Schmerz davon nehmen.
Einfache Bereitstellung - Die OSGi-Technologie ist nicht nur ein Standard für Komponenten. Außerdem wird festgelegt, wie Komponenten installiert und verwaltet werden. Diese API wurde von vielen Bundles verwendet, um einen Verwaltungsagenten bereitzustellen. Dieser Verwaltungsagent kann so einfach sein wie eine Befehlsshell, ein TR-69-Verwaltungsprotokolltreiber, ein OMA DM-Protokolltreiber, eine Cloud-Computing-Schnittstelle für Amazon EC2 oder ein IBM Tivoli-Verwaltungssystem. Die standardisierte Management-API macht es sehr einfach, die OSGi-Technologie in bestehende und zukünftige Systeme zu integrieren.
Dynamische Updates - Das OSGi-Komponentenmodell ist ein dynamisches Modell. Bundles können installiert, gestartet, gestoppt, aktualisiert und deinstalliert werden, ohne das gesamte System herunterzufahren. Viele Java-Entwickler glauben nicht, dass dies zuverlässig möglich ist, und verwenden dies daher zunächst nicht in der Produktion. Nachdem sie dies jedoch einige Zeit in der Entwicklung verwendet haben, stellen die meisten fest, dass es tatsächlich funktioniert und die Bereitstellungszeiten erheblich verkürzt.
Adaptiv - Das OSGi-Komponentenmodell wurde von Grund auf so konzipiert, dass Komponenten gemischt und angepasst werden können. Dies erfordert, dass die Abhängigkeiten von Komponenten angegeben werden müssen und dass Komponenten in einer Umgebung leben müssen, in der ihre optionalen Abhängigkeiten nicht immer verfügbar sind. Die OSGi-Dienstregistrierung ist eine dynamische Registrierung, in der Bundles Dienste registrieren, abrufen und abhören können. Mit diesem dynamischen Servicemodell können Bundles herausfinden, welche Funktionen auf dem System verfügbar sind, und die von ihnen bereitgestellten Funktionen anpassen. Dies macht Code flexibler und widerstandsfähiger gegenüber Änderungen.
Transparenz - Bundles und Services sind erstklassige Bürger in der OSGi-Umgebung. Die Verwaltungs-API bietet Zugriff auf den internen Status eines Bundles sowie auf die Verbindung mit anderen Bundles. Beispielsweise bieten die meisten Frameworks eine Befehlsshell, die diesen internen Status anzeigt. Teile der Anwendungen können gestoppt werden, um ein bestimmtes Problem zu beheben, oder Diagnosepakete können eingebunden werden. Anstatt auf Millionen von Zeilen Protokollierungsausgabe und lange Neustartzeiten zu starren, können OSGi-Anwendungen häufig mit einer Live-Befehlsshell debuggt werden.
Versionierung - Die OSGi-Technologie löst die JAR-Hölle. JAR Hölle ist das Problem, dass Bibliothek A mit Bibliothek B funktioniert; Version = 2, aber Bibliothek C kann nur mit B arbeiten; Version = 3. In Standard-Java haben Sie kein Glück. In der OSGi-Umgebung werden alle Bundles sorgfältig versioniert und nur Bundles, die zusammenarbeiten können, werden im selben Klassenraum miteinander verbunden. Dadurch können sowohl Bundle A als auch C mit ihrer eigenen Bibliothek arbeiten. Obwohl es nicht ratsam ist, Systeme mit diesem Versionsproblem zu entwerfen, kann dies in einigen Fällen lebensrettend sein.
Einfach - Die OSGi-API ist überraschend einfach. Die Kern-API besteht nur aus einem Paket und weniger als 30 Klassen / Schnittstellen. Diese Kern-API reicht aus, um Bundles zu schreiben, zu installieren, zu starten, zu stoppen, zu aktualisieren und zu deinstallieren. Sie enthält alle Listener- und Sicherheitsklassen. Es gibt nur sehr wenige APIs, die so viel Funktionalität für so wenig API bieten.
Klein - Das OSGi Release 4 Framework kann in einer JAR-Datei mit ca. 300 KB implementiert werden. Dies ist ein kleiner Aufwand für die Menge an Funktionen, die einer Anwendung durch Einbeziehen von OSGi hinzugefügt werden. OSGi läuft daher auf einer Vielzahl von Geräten: von sehr kleinen über kleine bis hin zu Mainframes. Es wird nur die Ausführung einer minimalen Java-VM angefordert und nur sehr wenig hinzugefügt.
Schnell - Eine der Hauptaufgaben des OSGi-Frameworks ist das Laden der Klassen aus Bundles. In herkömmlichem Java sind die JARs vollständig sichtbar und werden in einer linearen Liste platziert. Das Durchsuchen einer Klasse erfordert das Durchsuchen dieser (oft sehr langen, 150 ist nicht ungewöhnlich) Liste. Im Gegensatz dazu verdrahtet OSGi Bündel vor und weiß für jedes Bündel genau, welches Bündel die Klasse bereitstellt. Dieser Mangel an Suche ist ein wesentlicher Beschleunigungsfaktor beim Start.
Faul - Faul in der Software ist gut und die OSGi-Technologie verfügt über viele Mechanismen, um Dinge nur dann zu tun, wenn sie wirklich benötigt werden. Bundles können beispielsweise eifrig gestartet werden, sie können jedoch auch so konfiguriert werden, dass sie nur gestartet werden, wenn andere Bundles sie verwenden. Dienste können registriert, aber nur erstellt werden, wenn sie verwendet werden. Die Spezifikationen wurden mehrmals optimiert, um diese Art von faulen Szenarien zu ermöglichen, die enorme Laufzeitkosten einsparen können.
Sicher - Java verfügt unten über ein sehr leistungsfähiges, feinkörniges Sicherheitsmodell, das sich jedoch in der Praxis nur schwer konfigurieren lässt. Das Ergebnis ist, dass die meisten sicheren Java-Anwendungen mit einer binären Auswahl ausgeführt werden: keine Sicherheit oder sehr eingeschränkte Funktionen. Das OSGi-Sicherheitsmodell nutzt das feinkörnige Sicherheitsmodell, verbessert jedoch die Benutzerfreundlichkeit (und härtet das ursprüngliche Modell aus), indem der Bundle-Entwickler die angeforderten Sicherheitsdetails in einer leicht überprüfbaren Form angibt, während der Betreiber der Umgebung die volle Kontrolle behält. Insgesamt bietet OSGi wahrscheinlich eine der sichersten Anwendungsumgebungen, die ohne hardwaregeschützte Computerplattformen noch verwendet werden kann.
Nicht aufdringlich - Anwendungen (Bundles) in einer OSGi-Umgebung bleiben sich selbst überlassen. Sie können praktisch jede Einrichtung der VM verwenden, ohne dass das OSGi sie einschränkt. In OSGi wird empfohlen, einfache alte Java-Objekte zu schreiben. Aus diesem Grund ist für OSGi-Dienste keine spezielle Schnittstelle erforderlich. Selbst ein Java-String-Objekt kann als OSGi-Dienst fungieren. Diese Strategie erleichtert die Portierung von Anwendungscode in eine andere Umgebung.
Läuft überall - Nun, das hängt davon ab. Das ursprüngliche Ziel von Java war es, überall zu laufen. Offensichtlich ist es nicht möglich, den gesamten Code überall auszuführen, da sich die Funktionen der Java-VMs unterscheiden. Eine VM in einem Mobiltelefon unterstützt wahrscheinlich nicht dieselben Bibliotheken wie ein IBM Mainframe, auf dem eine Bankanwendung ausgeführt wird. Es gibt zwei Probleme, um die man sich kümmern muss. Erstens sollten die OSGi-APIs keine Klassen verwenden, die nicht in allen Umgebungen verfügbar sind. Zweitens sollte ein Bundle nicht gestartet werden, wenn es Code enthält, der in der Ausführungsumgebung nicht verfügbar ist. Beide Probleme wurden in den OSGi-Spezifikationen behoben.
Quelle: www.osgi.org/Technology/WhyOSGi