1 / 20

OSGi Tutorial

OSGi Tutorial. Das OSGi Service Framework. Dynamisches Modulsystem für Java Dynamische Integration und Fernmanagement von Softwarekomponenten ( Bundles ) Services Verfügbarkeit, Skalierbarkeit, Security Eingebettete Systeme bis Enterprise Applications Grundlage u.a. von Eclipse

mada
Download Presentation

OSGi Tutorial

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OSGiTutorial

  2. Das OSGi Service Framework • Dynamisches Modulsystem für Java • Dynamische Integration und Fernmanagement von • Softwarekomponenten (Bundles) • Services • Verfügbarkeit, Skalierbarkeit, Security • Eingebettete Systeme bis Enterprise Applications • Grundlage u.a. von Eclipse • OSGiAlliance • Bis 2004 Open Service Gateway Initiative • IBM, Oracle, Sun, Nokia, … • Verschiedene Implementierungen • Equinox, Felix, Knopflerfish, …

  3. Das OSGi Service Framework • Container für Applikationen und Services • Applikationen teilen sich eine Java VM • Applikationsmanagement • Life Cycle, Java Pakete, Security, Abhängigkeiten • Service Registry • Benachrichtigungen über Veränderungen • Bundles • Services System-Bundles (OSGi) Support –Bundles (OSGi-Plattform z.B. Equinox) Applikations- Bundles (Benutzerdefiniert) OSGi Service Framework Java VM

  4. OSGiBundles • OSGi Verpackung für • Applikation • Bibliothek • Beliebige Ressourcen • Dynamischer Lebenszyklus Uninstall Install Uninstalled Installed Uninstall Resolved Start Stopping Stop Starting Active explizit Automatisch

  5. OSGiBundle Interna • Normale JAR-Datei • Erweiterte Manifest-Datei • META-INF/MANIFEST.MF • Beschreibt das Bundle • Name, Version, … • Definiert Abhängigkeiten • Java-Packages • Andere Bundles • Definiert Package-Exporte • Activator zur Initialisierung/Shutdown (Optional) • Normale Java Klasse • In der Manifest-Datei definiert • Kann Services bereitstellen

  6. Hands-On (Teil 1) OSGiBundles

  7. Zusammenspiel von Bundles • Das OSGi Framework verwaltet die Abhängigkeiten • Lazy-Loading (-Starting) von Bundles • Bundles starten nur, wenn alle Abhängigkeiten aufgelöst werden können • Java-Packages exportieren • im Bundle vorhandene Packages • im Classpath vorhandene Packages • Java-Packages anderer Bundles Importieren • Vorteile: Lose Kopplung, Spezifisches Matching • Nachteile: • Alle Imports müssen angegeben werden • nur Code/Resource Abhängigkeiten • Importieren anderer Bundles • Vorteile: Nicht-Code Abhängigkeiten, Bequem • Nachteile: Starke Kopplung, Packages können verdeckt werden

  8. OSGi Class Loading • Jedes Bundle besitzt einen eigenen ClassLoader!! • Zugriff nur auf • java.* • Eigene Klassen / Klassen im Classpath des Bundles • Importierte Packages • Exportierte Packages importierter Bundles • Mehrere Versionen eines Bundles können gleichzeitig geladen sein

  9. OSGi Class Loading – Schwierigkeiten Beispiel Bundle A Bundle B classpath: library.jar import: B classpath: library.jar export: B A ClassCastException { ABC var; B.Foo.bar(var); } B bar(x : ABC) Foo library.jar lib ABC …

  10. OSGi Class Loading – Schwierigkeiten – Lösung Bundle A Bundle B import: B, lib export: B import: lib A { ABC var; B.Foo.bar(var); } B bar(x : ABC) Foo library.jar Bundle C lib classpath: library.jar export: lib ABC …

  11. OSGi Class Loading - Schwierigkeiten • Schwierigkeiten mit nicht-OSGi Bibliotheken/Applikationen • „Hacks“ zum dynamischen Laden von Implementierungen wie Class.forName, … führen zu Exceptions • Tricks zum Umgehen der Probleme • Thread.currentThread().setContextClassLoader(…) • Externer Zugriff auf Klassen eines eingebetteten OSGi-Frameworks sehr kompliziert!

  12. Hands-On (Teil 2) Bundle Abhängigkeiten

  13. Fragment Bundles • Hinzufügen neuer Übersetzungen • erfordert neue Property Dateien in aurich.translation.impl • Problem bei fremden Bundles • Lösung: Fragment-Bundles • Erweitern den Classpath eines Bundles • Besitzen keinen eigenen Life-Cycle • Können aber dynamisch hinzugefügt werden • Wird genutzt für: • Bereitstellen von Konfigurationen/Ressourcen • Implementierung von Produktvarianten • Insbes. Plattformspezifische Implementierungen

  14. Hands-On (Teil 3) Fragment-Bundles

  15. OSGi Services • Werden Spezifiziert durch ein Java-Interface • Können in verschiedenen Bundles implementiert werden • Normale Java Objekte • Bundle registriert Service • Andere Bundles nutzen Service • Klare Trennung von Spezifikation und Implementierung • Zentrale Service-Registry • Dynamisches Registrieren/Deregistrieren von Services

  16. OSGi Standard Services • OSGi definiert eine Menge von Standard Services • Wird von der OSGi Umgebung (z.B. equinox) mitgeliefert • Config-Admin-Service • Metatype-Service • User-Admin-Service • Preferences-Service • Log-Service • Http-Service • … diverse weitere insbes. für Mobile-Plattformen

  17. Service Registry • Zentrale Stelle • zur Anmeldung von Services • zum Auffinden von Services • Services können über Properties beschrieben werden • Immer vorhanden: objectClass • Beliebige weitere definierbar • Filter auf Properties zum Finden von Services • LDAP Notation • (& (objectClass=org.eclipse.console.CommandProvider) (author=*Mustermann*))

  18. Benutzen von Services • BundleContext • Wird einem Bundle-Activator in der Start-Methode übergeben • Ermöglicht Zugriff auf das Framework • Bundle-Events • Service-Events • ServiceTracker • Kapselt das Suchen und Tracken von Services • Declarative Services • Einfache deklarative Konfiguration von bereitgestellten/zu nutzenden Services • Kümmert sich um das automatische Auflösen von Service-Abhängigkeiten

  19. Hands-On (Teil 3) OSGi Services

  20. Fazit • Dynamisches Modulsystem für Java • Kommt mit relativ wenigen Klassen/Interfaces aus • Bundles • Einfache .jar Dateien mit speziellen Attributen in der Manifest.mf • Life-Cycle Management • Abhängigkeitsmanagement • Services • Lose Koppelung • Dynamik • Viele Standardservices schon vorhanden • Declarative Services zum komfortablen Management • ClassLoading „tricky“

More Related