Hallo, OSGi, Teil 1: Bundles für Anfänger

Die Open Services Gateway Initiative (OSGi) definiert eine Architektur für die Entwicklung und Bereitstellung modularer Anwendungen und Bibliotheken. In diesem ersten Artikel in einer dreiteiligen Einführung in OSGi führt Sunil Patil Sie in die OSGi-Entwicklungskonzepte ein und zeigt Ihnen, wie Sie eine einfache Hello World-Anwendung mit der Eclipse OSGi-Containerimplementierung Equinox erstellen. Er geht auch kurz auf das Erstellen serviceorientierter Anwendungen mit OSGi ein und stellt OSGis ServiceFactoryund ServiceTrackerKlassen vor.

Die Open Services Gateway Initiative (OSGi), auch als Dynamic Module System für Java bekannt, definiert eine Architektur für die modulare Anwendungsentwicklung. Mit OSGi-Containerimplementierungen wie Knopflerfish, Equinox und Apache Felix können Sie Ihre Anwendung in mehrere Module aufteilen und so Abhängigkeiten zwischen ihnen einfacher verwalten.

OSGi, Equinox und Project Jigsaw

Machen Sie sich ein Bild von der realen Welt, indem Sie die während einer OSGi / Equinox-Integration im größten Wissenschaftsprojekt Großbritanniens gewonnenen Erkenntnisse studieren und dann herausfinden, was Sie von Project Jigsaw in Java 9 erwarten können.

Ähnlich wie bei den Java Servlet- und EJB-Spezifikationen definiert die OSGi-Spezifikation zwei Dinge: eine Reihe von Diensten, die ein OSGi-Container implementieren muss, und einen Vertrag zwischen dem Container und Ihrer Anwendung. Wenn Sie auf der OSGi-Plattform entwickeln, müssen Sie Ihre Anwendung zuerst mithilfe von OSGi-APIs erstellen und dann in einem OSGi-Container bereitstellen. Aus Entwicklersicht bietet OSGi folgende Vorteile:

  • Sie können verschiedene Module Ihrer Anwendung dynamisch installieren, deinstallieren, starten und stoppen, ohne den Container neu zu starten.
  • In Ihrer Anwendung können mehrere Versionen eines bestimmten Moduls gleichzeitig ausgeführt werden.
  • OSGi bietet eine sehr gute Infrastruktur für die Entwicklung serviceorientierter Anwendungen sowie eingebetteter, mobiler und umfangreicher Internet-Apps.

Angesichts der Tatsache, dass Sie Servlet-Container zum Erstellen von Webanwendungen und EJB-Container zum Erstellen von Transaktionsanwendungen verwenden, fragen Sie sich möglicherweise, warum Sie noch einen anderen Containertyp benötigen. Die kurze Antwort lautet, dass OSGi-Container speziell für die Entwicklung komplexer Java-Anwendungen vorgesehen sind, die Sie in Module aufteilen möchten. Ich werde diese kurze Antwort in dieser Reihe erweitern.

Hallo, OSGi: Lies die Serie

  • Teil 1: Bundles für Anfänger
  • Teil 2: Einführung in Spring Dynamic Modules
  • Teil 3: Bringen Sie es auf die Serverseite

OSGi in Unternehmensanwendungen

Die Arbeit an der OSGi-Spezifikation wurde von der OSGi Alliance im März 1999 begonnen. Ihr Hauptziel war die Erstellung einer offenen Spezifikation für die Bereitstellung verwalteter Dienste für lokale Netzwerke und Geräte. Die Grundidee ist, dass Sie nach dem Hinzufügen einer OSGi-Serviceplattform zu einem Netzwerkgerät (sowohl eingebettete als auch Server) in der Lage sein sollten, den Lebenszyklus von Softwarekomponenten in diesem Gerät von überall im Netzwerk aus zu verwalten. Softwarekomponenten können im laufenden Betrieb installiert, aktualisiert oder entfernt werden, ohne dass der Betrieb des Geräts unterbrochen werden muss.

Seit Jahren blüht die OSGi-Technologie auf dem Markt für eingebettete Systeme und Netzwerkgeräte. Zum Teil dank Eclipse entwickelt sich OSGi zu einer tragfähigen und wertvollen Technologie für die Unternehmensentwicklung.

Wachsende Unterstützung für OSGi

Im Jahr 2003 suchte das Eclipse-Entwicklungsteam nach Möglichkeiten, Eclipse zu einer dynamischeren Rich-Client-Plattform zu machen und die Modularität des Toolset zu erhöhen. Schließlich entschied sich das Team, das OSGi-Framework als Laufzeitkomponentenmodell zu verwenden. Eclipse 3.0, veröffentlicht im Juni 2004, war die erste Version von Eclipse, die auf OSGi basiert.

Fast alle Enterprise-Anwendungsserver unterstützen oder planen die Unterstützung von OSGi. Das Spring-Framework unterstützt OSGi auch über das Projekt Spring Dynamic Modules für OSGi Service Platforms, das eine Infrastrukturschicht bereitstellt, um die Verwendung von OSGi in der Spring-basierten Entwicklung von Java-Unternehmensanwendungen zu vereinfachen.

Open Source OSGi-Container

Aus Sicht eines Unternehmensentwicklers weist der OSGi-Container eine so geringe Stellfläche auf, dass Sie ihn problemlos in eine Unternehmensanwendung einbetten können. Angenommen, Sie entwickeln eine komplexe Webanwendung. Sie möchten die Anwendung in mehrere Module aufteilen: ein Modul für die Ansichtsebene, ein anderes für die DAO-Ebene und ein drittes Modul für die Datenzugriffsebene. Durch die Verwendung eines eingebetteten OSGi-Containers zum Verwalten der Abhängigkeiten dieser Module können Sie Ihre DAO-Schicht (z. B. von langsamem DAO zu schnellem DAO) aktualisieren, ohne Ihre Anwendung neu zu starten.

Solange Ihre Anwendung mit der OSGi-Spezifikation kompatibel ist, sollte sie in jedem OSGi-kompatiblen Container ausgeführt werden können. Derzeit gibt es drei beliebte Open-Source-OSGi-Container:

  • Equinox ist die Referenzimplementierung für den Framework-Teil der OSGi Service Platform Release 4. Es ist die modulare Java-Laufzeit im Herzen der Eclipse-IDE und implementiert alle obligatorischen und die meisten optionalen Funktionen der OSGi R4-Spezifikation.
  • Knopflerfish ist eine Open Source-Implementierung der Spezifikationen OSGi R3 und OSGi R4. Knopflerfish 2 implementiert alle obligatorischen Funktionen und einige der optionalen Funktionen, die in der R4-Spezifikation definiert sind.
  • Apache Felix ist der Open Source OSGi-Container der Apache Software Foundation. Zum Zeitpunkt des Schreibens entspricht dieser Container nicht vollständig der OSGI R4-Spezifikation.

In diesem Artikel verwenden wir Equinox als unseren OSGi-Container. Weitere Informationen zu Apache Felix und Knopflerfish finden Sie im Abschnitt Ressourcen.