Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

17.09.2009 Aurich – Jonas Jacobi OSGi Tutorial. 17.09.2009 Aurich – Jonas Jacobi Das OSGi Service Framework Dynamisches Modulsystem für Java Dynamische.

Ähnliche Präsentationen


Präsentation zum Thema: "17.09.2009 Aurich – Jonas Jacobi OSGi Tutorial. 17.09.2009 Aurich – Jonas Jacobi Das OSGi Service Framework Dynamisches Modulsystem für Java Dynamische."—  Präsentation transkript:

1 17.09.2009 Aurich – Jonas Jacobi OSGi Tutorial

2 17.09.2009 Aurich – Jonas Jacobi 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 OSGi Alliance Bis 2004 Open Service Gateway Initiative IBM, Oracle, Sun, Nokia, … Verschiedene Implementierungen Equinox, Felix, Knopflerfish, … 2

3 17.09.2009 Aurich – Jonas Jacobi 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 3 Java VM OSGi Service Framework System-Bundles (OSGi) Support –Bundles (OSGi-Plattform z.B. Equinox) Applikations- Bundles (Benutzerdefiniert)

4 17.09.2009 Aurich – Jonas Jacobi OSGi Bundles OSGi Verpackung für Applikation Bibliothek Beliebige Ressourcen Dynamischer Lebenszyklus 4 Installed Resolved StartingActive Stopping Uninstalled Install Uninstall Stop Start Uninstall Automatisch explizit

5 17.09.2009 Aurich – Jonas Jacobi OSGi Bundle 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 5

6 17.09.2009 Aurich – Jonas Jacobi Hands-On (Teil 1) OSGi Bundles 6

7 17.09.2009 Aurich – Jonas Jacobi 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 7

8 17.09.2009 Aurich – Jonas Jacobi 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 8

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

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

11 17.09.2009 Aurich – Jonas Jacobi 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! 11

12 17.09.2009 Aurich – Jonas Jacobi Hands-On (Teil 2) Bundle Abhängigkeiten 12

13 17.09.2009 Aurich – Jonas Jacobi 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 13

14 17.09.2009 Aurich – Jonas Jacobi Hands-On (Teil 3) Fragment-Bundles 14

15 17.09.2009 Aurich – Jonas Jacobi 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 15

16 17.09.2009 Aurich – Jonas Jacobi 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 16

17 17.09.2009 Aurich – Jonas Jacobi 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*)) 17

18 17.09.2009 Aurich – Jonas Jacobi 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 18

19 17.09.2009 Aurich – Jonas Jacobi Hands-On (Teil 3) OSGi Services 19

20 17.09.2009 Aurich – Jonas Jacobi 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 20


Herunterladen ppt "17.09.2009 Aurich – Jonas Jacobi OSGi Tutorial. 17.09.2009 Aurich – Jonas Jacobi Das OSGi Service Framework Dynamisches Modulsystem für Java Dynamische."

Ähnliche Präsentationen


Google-Anzeigen