OSGi Hands-On Tutorial (Jonas Jacobi)

Werbung
OSGi Tutorial
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, …
17.09.2009 Aurich – Jonas Jacobi
2
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)
ApplikationsBundles
(Benutzerdefiniert)
OSGi Service Framework
Java VM
17.09.2009 Aurich – Jonas Jacobi
3
OSGi Bundles
 OSGi Verpackung für
‒ Applikation
‒ Bibliothek
‒ Beliebige Ressourcen
 Dynamischer Lebenszyklus
Uninstall
Install
Uninstalled
Installed
Resolved
Stopping
Starting
Active
explizit
Automatisch
17.09.2009 Aurich – Jonas Jacobi
4
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
17.09.2009 Aurich – Jonas Jacobi
5
Hands-On (Teil 1)
OSGi Bundles
17.09.2009 Aurich – Jonas Jacobi
6
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
17.09.2009 Aurich – Jonas Jacobi
7
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
17.09.2009 Aurich – Jonas Jacobi
8
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
Foo
bar(x : ABC)
}
library.jar
lib
ABC
…
17.09.2009 Aurich – Jonas Jacobi
9
OSGi Class Loading – Schwierigkeiten – Lösung
Bundle A
import: B, lib
Bundle B
export: B
import: lib
A
B
{
ABC var;
B.Foo.bar(var);
}
Foo
bar(x : ABC)
library.jar
lib
ABC
…
Bundle C
classpath: library.jar
export: lib
17.09.2009 Aurich – Jonas Jacobi
10
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!
17.09.2009 Aurich – Jonas Jacobi
11
Hands-On (Teil 2)
Bundle Abhängigkeiten
17.09.2009 Aurich – Jonas Jacobi
12
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
17.09.2009 Aurich – Jonas Jacobi
13
Hands-On (Teil 3)
Fragment-Bundles
17.09.2009 Aurich – Jonas Jacobi
14
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
17.09.2009 Aurich – Jonas Jacobi
15
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.09.2009 Aurich – Jonas Jacobi
16
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.09.2009 Aurich – Jonas Jacobi
17
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 ServiceAbhängigkeiten
17.09.2009 Aurich – Jonas Jacobi
18
Hands-On (Teil 3)
OSGi Services
17.09.2009 Aurich – Jonas Jacobi
19
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“
17.09.2009 Aurich – Jonas Jacobi
20
Herunterladen