Sie haben Ihre Software bereits installiert, benötigen aber noch eine effektivere Methode, um Ihren technischen Benutzern die Erweiterung der Plattform zu ermöglichen.
Obwohl OSGi den meisten Java-Entwicklern gut bekannt ist, mag die Integration in Ihr Produkt wie eine entmutigende Aufgabe erscheinen. Der Mangel an Klarheit über die genaue Arbeitsweise von OSGi verwirrt den weiteren Weg nach vorne.
Im Gegensatz zu allem, womit sie experimentieren möchten, fühlt sich OSGi für viele Java-Entwickler eher wie ein Versuch an, über die weite See zu segeln.
Dieser Artikel stellt Ihnen das OSGi Felix Frühlings-Tutorial mit einem einfachen Programm vor und geht es durch, seine Vorteile und andere wichtige Details.
Was ist also OSGi?
Das Erstellen und Verteilen von Modulen und Komponenten wird durch das Java-Framework OSGi (Open Service Gateway Initiative) ermöglicht.
Es betont Funktionskapselung und lose Kopplung, was Entwicklern mehrere Vorteile bietet, einschließlich modularer Funktionalität, die leicht zwischen Quellcodes und Tests übertragen werden kann, die keine endlosen Abhängigkeiten erfordern.
Wie funktioniert OSGi?
Ein dynamisches Komponentensystem für Java wird durch eine Reihe von Spezifikationen namens OSGi definiert. Diese Spezifikationen ermöglichen einen Entwicklungsansatz, bei dem eine Anwendung aus einer Reihe von Teilen erstellt und dann in Bundles verpackt wird.
Lokale und netzwerkbasierte Dienste werden von diesen Komponenten zur Kommunikation verwendet. Das Ziel ist es, den Kerncode des Programms so kompakt wie möglich zu machen. Eine hohe Kopplung zwischen diesem Code und mehreren Komponenten ist möglich.
Die wiederverwendbaren Bauelemente der Anwendung werden als Komponenten bezeichnet. Denken Sie an Funktionen wie einen Einkaufswagen für Ihre E-Commerce-Website oder eine Gehaltsabrechnungsanwendung für Ihr Personalverwaltungssystem.
Komponenten können OSGi verwenden, um ihre Implementierungen vor anderen Komponenten zu verbergen und ihnen nur die erforderlichen Daten über Dienste bereitzustellen.
Dies verhindert, dass Komponenten unbeabsichtigt Daten ändern, auf die sie keinen Zugriff haben sollten, und verwaltet Abhängigkeiten.
Alle Verbindungen zwischen Komponenten in einer OSGi-Anwendung werden in einer idealen Welt über Dienste hergestellt. Ein Java-Paket enthält die API, die für Dienste angegeben ist.
Die Zusammenarbeit zwischen Dienstanbietern und Kunden erfordert die Verwendung von Klassen und/oder Schnittstellen, die die API ausmachen.
Alle OSGi-Komponenten sind in Paketen zusammengefasst, von denen jedes die Ressourcen enthält, die sie zum Funktionieren benötigen. Bundles sind ziemlich klar darüber, was sie von der Umgebung benötigen und wozu sie in der Lage sind.
Benefits
- OSGi-Anwendungen haben Zugriff auf externe Bundle-Repositories.
- Das Framework erlaubt serviceorientiertes Design auf Modulebene.
- Es ermöglicht die Verwaltung der Versionen und Abhängigkeiten von Anwendungspaketen sowie die Standardisierung und erleichtert die Integration von Bibliotheken von Drittanbietern.
- Anwendungen sind anpassungsfähiger an sich ändernde Anforderungen, portabler und schneller umzugestalten.
- A Web-Anwendung kann dank der Integration des Frameworks in das Java-EE-Programmiermodell als Gruppe von versionierten OSGi-Bundles mit dynamischer Lebensdauer bereitgestellt werden.
- Anstatt als Bibliothek eines Drittanbieters als Teil der Anwendung installiert zu werden, stellt das Framework die deklarative Assemblierung und optimierte Komponententests des Spring Framework in einer standardisierten Form bereit, die als Teil der Anwendungsserver-Laufzeit bereitgestellt wird.
- Für Unternehmensanwendungen, die aus mehreren versionierten Bundles mit dynamischen Lebenszyklen bestehen, bietet das Framework Isolation.
- Es enthält ein integriertes Bundle-Repository, das gemeinsame und versionierte Bundles speichern kann, die von mehreren Anwendungen verwendet werden, wodurch verhindert wird, dass jede Anwendung eine separate Kopie jeder gemeinsam genutzten Bibliothek bereitstellt.
Erste Schritte mit OSGi Felix Spring
Abrufen der Ressourcen
Indem Sie die neueste Version von Apache Karaf von herunterladen Diese Website durchsuchen, können wir unser OSGi-Abenteuer beginnen.
Basierend auf Apache Felix, der Apache-Implementierung der OSGi-Spezifikation, bietet Apache Karaf eine Plattform für OSGi-basierte Anwendungen.
Karaf bietet zusätzlich zu Felix verschiedene hilfreiche Funktionen, die uns helfen, uns mit OSGi vertraut zu machen, wie z. B. eine Befehlszeilenschnittstelle, die es uns ermöglicht, mit der Plattform zu kommunizieren.
Einstiegspunkt für Bundles
Eine Anwendung muss als OSGi-Paket gepackt werden, bevor sie in einer OSGi-Umgebung ausgeführt werden kann. Außerdem muss der Einstiegspunkt der Anwendung angegeben werden; es ist nicht die standardmäßige öffentliche statische void main(String[] args)-Funktion.
Beginnen wir also mit der Erstellung eines „Hallo Welt” Anwendung basierend auf OSGi.
Wir beginnen mit der Einrichtung einer grundlegenden OSGi-API-Abhängigkeit:
Die OSGi-Laufzeit hat Zugriff auf die Abhängigkeit, daher muss das Bundle sie nicht enthalten. Daher ist es als geliefert gekennzeichnet.
Lassen Sie uns nun die einfache HelloWorld-Klasse erstellen:
Klassen, die als Einstiegspunkte für Bundles fungieren, müssen die von OSGi bereitgestellte BundleActivator-Schnittstelle implementieren.
Wenn das Bundle, das diese Klasse enthält, gestartet wird, ruft die OSGi-Plattform die Funktion start() auf. Auf der anderen Seite wird kurz bevor das Bündel angehalten wird, die Funktion stop() aufgerufen.
Vergessen wir nicht, dass jedes Bundle nur einen BundleActivator haben kann. Beide Wege können mit der OSGi-Laufzeitumgebung über das angegebene BundleContext-Objekt kommunizieren.
Bündel erstellen
Machen Sie pom.xml zu einem echten OSGi-Bundle, indem Sie die erforderlichen Änderungen vornehmen.
Wir müssen zunächst klar zum Ausdruck bringen, dass es unser Ziel ist, ein Bündel zu produzieren.
Dann verwenden wir das maven-bundle-plugin, um die HelloWorld-Klasse mit freundlicher Genehmigung der Apache Felix-Community als OSGi-Bundle zu packen:
Die Werte der OSGi-Header, die wir in die MANIFEST-Datei des Bundles aufnehmen möchten, sind im Abschnitt mit den Anweisungen angegeben.
Bundle-Activator ist in der Tat der richtig qualifizierte Name der BundleActivator-Lösung, die zum Starten und Stoppen des Bundles verwendet wird. Es ist mit der gerade erstellten Klasse kompatibel.
Obwohl es sich nicht um einen OSGi-Header handelt, weist der Private-Package-Header das Plugin an, das Paket zum Bundle hinzuzufügen, es aber anderen Plugins nicht zugänglich zu machen. Der Befehl mvn install sollte verwendet werden, um das Bundle zu erstellen.
Installieren und Ausführen des Bundles
Beginnen wir mit Karaf, indem wir diesen Befehl ausführen:
wobei sich „KARAF HOME“ auf den Ordner bezieht, in dem Karaf eingerichtet wurde. Wir können den folgenden Befehl verwenden, um das Bundle zu installieren, wenn die Eingabeaufforderung der Karaf-Konsole erscheint:
Durch die Verwendung des lokalen Maven-Repositorys wird Karaf angewiesen, das Bundle zu laden.
Karaf gibt die numerische ID des Bündels zurück und schreibt sie aus. Diese ID kann je nachdem, wie viele Bundles zuvor installiert wurden, unterschiedlich sein. Das Bundle wurde nun erfolgreich installiert und der Befehl zum Starten lautet wie folgt:
Sobald Sie das Paket starten, wird „Hello World by Jay“ angezeigt. Wir können das Bundle jetzt anhalten und entfernen mit:
Die Konsole zeigt „Goodbye World by Jay“ an.
Zusammenfassung
Entwickler können problemlos neue Funktionen zu einer bestehenden Webanwendung hinzufügen, während sie durch die Verwendung von OSGi sicher und isoliert von anderen Komponenten des Hauptprogramms bleiben.
Wir haben in diesem Beitrag etwas über OSGi gelernt, einschließlich seiner Funktionsweise, seiner Vorteile und eines einfachen Programms. Es ist nicht schwierig, OSGi in Ihre eigene Anwendung zu integrieren.
Viel Spaß beim Codieren!
Hinterlassen Sie uns einen Kommentar