Die OSGi Service Platform: Eine Einführung mit Eclipse Equinox

Book description

Eine Einführung mit Eclipse Equinox

Das Konzept der Modularisierung ist heute als Mittel zur Komplexitätsreduzierung bei der Entwicklung großer Anwendungssysteme unumstritten. In Java gestaltet sich die Umsetzung dieses Konzepts bisher schwierig, da unterstützende Sprachkonzepte fehlen. Monolithische Anwendungssysteme sind die häufige Folge.

Die OSGi Service Platform löst dieses Problem, indem sie ein dynamisches Modulsystem für Java bereitstellt. Ursprünglich für eingebettete Systeme konzipiert, wird die OSGi Service Platform heute vielfältig eingesetzt: von Anwendungen für Mobilfunkgeräte über Client-Anwendungen wie der Eclipse IDE bis hin zu Server-Applikationen.

Dieses Buch liefert einen praktischen Einstieg in und einen fundierten Überblick über die zugrunde liegenden Technologien, Konzepte und Begriffe. Tutorials illustrieren dies jeweils am Bespiel von Eclipse Equinox als Implementierung der OSGi Service Platform. Der Leser wird so in die Lage versetzt, die vorgestellten Inhalte auf eigene Problemstellungen anzuwenden und selbstständig Lösungen zu entwickeln.

These links have been provided by the publisher.

Table of contents

  1. Copyright
  2. Geleitwort
  3. 1. Einleitung
    1. 1.1. Warum dieses Buch?
      1. 1.1.1. Was dieses Buch vermittelt
      2. 1.1.2. Was dieses Buch nicht ist
    2. 1.2. Aufbau des Buches
    3. 1.3. Konventionen in diesem Buch
    4. 1.4. Installation der Beispiele
      1. 1.4.1. Die Eclipse IDE installieren
      2. 1.4.2. Eclipse Equinox installieren
      3. 1.4.3. Die Standard Services aus dem Incubator installieren
      4. 1.4.4. Die Target Platform einrichten
      5. 1.4.5. Installation der Codebeispiele
      6. 1.4.6. Arbeiten mit dem Eclipse Samples Manager
    5. 1.5. Danksagung
    6. 1.6. Website zum Buch
  4. 2. OSGi-Technologie im Überblick
    1. 2.1. Die OSGi Service Platform
      1. 2.1.1. Das OSGi Framework
      2. 2.1.2. OSGi Standard Services
      3. 2.1.3. Wo wird die OSGi Service Platform eingesetzt?
      4. 2.1.4. Wo ist die OSGi Service Platform spezifiziert?
    2. 2.2. Welche Vorteile bietet der Einsatz der OSGi Service Platform?
      1. 2.2.1. Modularisierung
      2. 2.2.2. Abhängigkeitsmanagement
      3. 2.2.3. Hot Deployment
      4. 2.2.4. Serviceorientiertes Programmiermodell
    3. 2.3. Das OSGi Framework
      1. 2.3.1. Die Execution Environments
      2. 2.3.2. Die Module-Schicht
      3. 2.3.3. Die Lifecycle-Management-Schicht
      4. 2.3.4. Die Service-Schicht
      5. 2.3.5. Die Security-Schicht
      6. 2.3.6. Die Framework Services
    4. 2.4. OSGi Standard Services
      1. 2.4.1. Gemeinsame Service-Spezifikationen
      2. 2.4.2. Weitere Services des Service Compendium
    5. 2.5. Implementierungen
      1. 2.5.1. Open-Source-Implementierungen
      2. 2.5.2. Kommerzielle Implementierungen
    6. 2.6. Eclipse Equinox
      1. 2.6.1. Die Eclipse-Equinox-Distribution
      2. 2.6.2. Eclipse Equinox als Grundlage der Eclipse-Laufzeitumgebung
      3. 2.6.3. Die Eclipse IDE als Entwicklungsplattform für OSGi Bundles
    7. 2.7. Die OSGi Service Platform in Aktion
    8. 2.8. Zusammenfassung
  5. I. Das OSGi Framework
    1. 3. Bundles
      1. 3.1. Tutorial: Ein »Hello World«-Bundle
      2. 3.2. Bundles im Überblick
      3. 3.3. Das Bundle Manifest
        1. 3.3.1. Der Plug-in Manifest Editor
        2. 3.3.2. Das Bundle Manifest in textueller Form
        3. 3.3.3. Bedeutung der verwendeten Bundle Manifest Header
      4. 3.4. Der Bundle-Aktivator
        1. 3.4.1. Das Interface BundleActivator
      5. 3.5. Der Bundle-Kontext
        1. 3.5.1. Das Interface BundleContext
      6. 3.6. Der Bundle-Klassenpfad
      7. 3.7. Zusammenfassung
    2. 4. Bundle-Lebenszyklus
      1. 4.1. Tutorial: Den Bundle-Lebenszyklus über die Equinox-Konsole steuern
      2. 4.2. Der Bundle-Lebenszyklus im Überblick
        1. 4.2.1. Installieren, Starten, Stoppen, Deinstallieren
        2. 4.2.2. Update und Refresh
      3. 4.3. Activation Policies
        1. 4.3.1. Motivation
        2. 4.3.2. Die Lazy Activation Policy
      4. 4.4. Programmatische Steuerung des Bundle-Lebenszyklus
        1. 4.4.1. Das Interface Bundle
        2. 4.4.2. Programmatische Installation von Bundles
      5. 4.5. Bundle Listener und Framework Listener
        1. 4.5.1. Bundle Listener
        2. 4.5.2. Framework Listener
      6. 4.6. Der Bundle Cache
        1. 4.6.1. Der Bundle Cache in Eclipse Equinox
      7. 4.7. Zusammenfassung
    3. 5. Package-Abhängigkeiten zwischen Bundles
      1. 5.1. Tutorial: Ein »Translation«-Bundle
      2. 5.2. Exportieren von Packages
      3. 5.3. Importieren von Packages
        1. 5.3.1. Importieren mit Import-Package
        2. 5.3.2. Importieren mit Require-Bundle
      4. 5.4. Import-Package oder Require-Bundle?
      5. 5.5. Arbeiten mit Bundle- und Package-Versionen
        1. 5.5.1. Spezifikation von Bundle- und Package-Versionen
        2. 5.5.2. Spezifikation von Abhängigkeiten mit Versionsbereichen
      6. 5.6. Dynamisches Importieren von Packages
      7. 5.7. Exkurs: Class Loading in Java und im OSGi Framework
        1. 5.7.1. Class Loading in Java
        2. 5.7.2. Class Loading im OSGi Framework
        3. 5.7.3. Class Loading über den Context Class Loader
      8. 5.8. Zusammenfassung
    4. 6. OSGi Services
      1. 6.1. Tutorial: Der Translation Service als OSGi Service
      2. 6.2. OSGi Services im überblick
      3. 6.3. OSGi Services registrieren und deregistrieren
        1. 6.3.1. Registrieren von OSGi Services
        2. 6.3.2. Deregistrierung von OSGi Services
      4. 6.4. Service Factories
      5. 6.5. Services verwenden
      6. 6.6. Service Properties
      7. 6.7. Filter
      8. 6.8. Package- und Service-Abhängigkeiten
        1. 6.8.1. Kompatibilität zwischen Package- und Service-Abhängigkeit
        2. 6.8.2. Abfragen aller verfügbaren Services
      9. 6.9. Verwendung von Start-Leveln
      10. 6.10. Zusammenfassung
    5. 7. Umgang mit dynamischen Services
      1. 7.1. Tutorial: Ein dynamischer Translation Service
      2. 7.2. Services in dynamischen Systemen
        1. 7.2.1. Szenario 1: Service wurde nicht registriert
        2. 7.2.2. Szenario 2: Service wurde deregistriert
        3. 7.2.3. Szenario 3: Service wurde inkompatibel aktualisiert
      3. 7.3. Arbeiten mit dem Service Tracker
        1. 7.3.1. Erzeugen eines Service Trackers
        2. 7.3.2. Öffnen und Schließen des Service Trackers
        3. 7.3.3. Arbeiten mit Services
        4. 7.3.4. Arbeiten mit Service References
        5. 7.3.5. Abfragen von Zustandsinformationen
      4. 7.4. Das Interface ServiceTrackerCustomizer
      5. 7.5. Service Listener und Service Events
        1. 7.5.1. Service Listener verwenden
      6. 7.6. Exkurs: Das Whiteboard-Pattern
        1. 7.6.1. Beispiel: Translation Listener
        2. 7.6.2. Implementierung nach dem Event-Listener-Pattern
        3. 7.6.3. Implementierung nach dem Whiteboard-Pattern
      7. 7.7. Zusammenfassung
    6. 8. Fragment Bundles
      1. 8.1. Tutorial: »Language«-Fragmente
      2. 8.2. Fragment Bundles im Detail
      3. 8.3. Anwendungsszenarien für Fragment Bundles
      4. 8.4. Zuordnung von Fragment Bundles und Host Bundle
      5. 8.5. Das Framework erweitern: Extension Bundles
      6. 8.6. Zusammenfassung
    7. 9. Security
      1. 9.1. Tutorial: Ein sicherer Translation Service
      2. 9.2. Vergabe von Ausführungsrechten im OSGi Framework
        1. 9.2.1. Rechtevergabe in geschlossenen Systemen
        2. 9.2.2. Rechtevergabe in Systemen mit offenen Deployment-Kanälen
        3. 9.2.3. Das Delegationsmodell
      3. 9.3. Die lokalen Berechtigungen eines Bundles
      4. 9.4. Globale Berechtigungen vergeben
      5. 9.5. OSGi-Framework-spezifische Permissions
      6. 9.6. Zusammenfassung
    8. 10. Management der OSGi Service Platform
      1. 10.1. Tutorial: Die Equinox-Konsole um ein greet-Kommando erweitern
      2. 10.2. Management Agents im überblick
        1. 10.2.1. Management Bundles
        2. 10.2.2. Open-Source-Implementierungen
      3. 10.3. Die Equinox-Konsole im Detail
        1. 10.3.1. Kommandos zur Steuerung des Frameworks
        2. 10.3.2. Kommandos zur Steuerung von Bundles
        3. 10.3.3. Kommandos zum Anzeigen von Statusinformationen
        4. 10.3.4. Kommandos zur Manipulation der Startlevel
        5. 10.3.5. Weitere Kommandos
      4. 10.4. Die Equinox-Konsole um eigene Befehle erweitern
        1. 10.4.1. Das Interface CommandProvider
        2. 10.4.2. Das Interface CommandInterpreter
      5. 10.5. Exkurs: Der Knopflerfish-Desktop als alternativer Management Agent
        1. 10.5.1. Installation des Knopflerfish-Desktops
        2. 10.5.2. Arbeiten mit dem Knopflerfish-Desktop
      6. 10.6. Zusammenfassung
    9. 11. Packaging und Deployment
      1. 11.1. Tutorial: Ausführen des »Hello World«-Beispiels von der Kommandozeile
      2. 11.2. Der Plug-in-Export-Wizard
      3. 11.3. Automatisiertes Bauen von Bundles
      4. 11.4. Exkurs: Der PDE Headless Build
        1. 11.4.1. Schritt 1: Anlegen eines Feature-Projektes
        2. 11.4.2. Schritt 2: Anlegen eines Build-Projektes
        3. 11.4.3. Schritt 3: Anpassen der build.properties-Datei
        4. 11.4.4. Schritt 4: Die allElements.xml-Datei
        5. 11.4.5. Schritt 5: Die customTargets.xml-Datei
        6. 11.4.6. Schritt 6: Ausführen des PDE-Builds
      5. 11.5. Ausführen von Eclipse Equinox
        1. 11.5.1. Starten von Equinox von der Kommandozeile
        2. 11.5.2. Starten von Equinox aus einer Java-Anwendung
        3. 11.5.3. Equinox konfigurieren
      6. 11.6. Zusammenfassung
  6. II. OSGi Standard Services
    1. 12. Declarative Services
      1. 12.1. Tutorial: Services deklarativ beschreiben
      2. 12.2. Überblick über Declarative Services
      3. 12.3. Service Components
        1. 12.3.1. Die Komponentenklasse
        2. 12.3.2. Die Komponentenbeschreibung
      4. 12.4. Services bereitstellen
      5. 12.5. Services benutzen
        1. 12.5.1. Die Event-Strategie
        2. 12.5.2. Die Lookup-Strategie
        3. 12.5.3. Die Kardinalität einer Referenz
        4. 12.5.4. Die Policy einer Referenz
      6. 12.6. Der Lebenszyklus von Komponenten
        1. 12.6.1. Der Zustand »enabled«
        2. 12.6.2. Immediate und Delayed Components
        3. 12.6.3. Lebenszyklus von Immediate Components
        4. 12.6.4. Lebenszyklus von Delayed Components
      7. 12.7. Component Properties und Factory Components
        1. 12.7.1. Component Properties
        2. 12.7.2. Factory Components
      8. 12.8. Zusammenfassung
    2. 13. Der Config Admin Service
      1. 13.1. Tutorial: Ein administrierbarer Translation Service
      2. 13.2. Überblick über den Config Admin Service
      3. 13.3. Die Persistent Identity (PID)
      4. 13.4. Managed Services
        1. 13.4.1. Das Interface ManagedService
        2. 13.4.2. Registrieren eines Managed Service
      5. 13.5. Managed Service Factories
        1. 13.5.1. Das Interface ManagedServiceFactory
        2. 13.5.2. Registrieren einer Managed Service Factory
      6. 13.6. Konfigurationen programmatisch verwalten
        1. 13.6.1. Die Interfaces ConfigurationAdmin und Configuration
        2. 13.6.2. Erzeugen und Abfragen von Konfigurationen
        3. 13.6.3. Ändern und Löschen von Konfigurationen
      7. 13.7. Zusammenfassung
    3. 14. Der Metatype Service
      1. 14.1. Tutorial: Den Translation Service konfigurieren
      2. 14.2. Überblick über den Metatype Service
      3. 14.3. Beschreibung von Metatyp-Informationen in XML
        1. 14.3.1. Object-Class- und Attribute-Definitionen
        2. 14.3.2. Zuordnung zu ManagedService und ManagedServiceFactory
        3. 14.3.3. Lokalisierung
      4. 14.4. Programmatische Abfrage von Metadaten
        1. 14.4.1. Das Interface MetaTypeService
        2. 14.4.2. Das Interface ObjectClassDefinition
        3. 14.4.3. Das Interface AttributeDefinition
      5. 14.5. Zusammenfassung
    4. 15. Der Event Admin Service
      1. 15.1. Tutorial: Ein Timer Service
      2. 15.2. Der Event Admin Service im Überblick
      3. 15.3. Die Klasse org.osgi.service.event.Event
        1. 15.3.1. Erzeugen von Events
        2. 15.3.2. Standard-Properties
        3. 15.3.3. Abfragen eventspezifischer Informationen
        4. 15.3.4. Mapping von Framework Events
      4. 15.4. Events veröffentlichen
        1. 15.4.1. Synchrones Versenden von Events
        2. 15.4.2. Asynchrones Versenden von Events
        3. 15.4.3. Fehlerbehandlung
      5. 15.5. Events empfangen
        1. 15.5.1. Das Interface org.osgi.event.EventHandler
        2. 15.5.2. Registrierung von Event Handlern
      6. 15.6. Zusammenfassung
    5. 16. Der Log Service
      1. 16.1. Tutorial: Logging in der OSGi Service Platform
      2. 16.2. Überblick über den Log Service
      3. 16.3. Verwenden des Log Service
      4. 16.4. Verwenden des Log Reader Service
        1. 16.4.1. Der LogReaderService
        2. 16.4.2. LogEntry
        3. 16.4.3. LogListener
      5. 16.5. Der Log Service in Eclipse Equinox
        1. 16.5.1. Log-Nachrichten auf der Equinox-Konsole ausgeben
        2. 16.5.2. Den Log Service konfigurieren
      6. 16.6. Zusammenfassung
    6. 17. Der User Admin Service
      1. 17.1. Tutorial: Ein Login-Kommando
      2. 17.2. Der User Admin Service im Überblick
      3. 17.3. Rollen, Benutzer und Gruppen
        1. 17.3.1. Rollen
        2. 17.3.2. Benutzer
        3. 17.3.3. Gruppen
      4. 17.4. Rollen, Benutzer und Gruppen verwalten
      5. 17.5. Authentifizierung
      6. 17.6. Autorisierung
      7. 17.7. Zusammenfassung
    7. 18. Der Preferences Service
      1. 18.1. Tutorial: Persistieren der letzten Login-Zeit
      2. 18.2. Überblick über den Preferences Service
      3. 18.3. Zugriff auf Preferences
        1. 18.3.1. Das Interface PreferencesService
        2. 18.3.2. Das Interface Preferences
        3. 18.3.3. Navigation durch den Preferences-Baum
        4. 18.3.4. Löschen von Preferences-Knoten
      4. 18.4. Schreiben und Lesen von Properties
        1. 18.4.1. Properties auslesen
        2. 18.4.2. Einfügen und Ändern von Properties
        3. 18.4.3. Entfernen von Properties
      5. 18.5. Nebenläufigkeit
      6. 18.6. Zusammenfassung
    8. 19. Der Http Service
      1. 19.1. Tutorial: »Hello World« öber Web
      2. 19.2. Überblick über den Http Service
      3. 19.3. Das Interface HttpService
        1. 19.3.1. Registrieren und Deregistrieren von statischen Ressourcen
        2. 19.3.2. Registrieren und Deregistrieren von Servlets
        3. 19.3.3. Abbildung von Http Requests auf Servlets und Ressourcen
      4. 19.4. Der Http Context
        1. 19.4.1. Das Interface HttpContext
        2. 19.4.2. Der Default Http Context
        3. 19.4.3. Http Context und Servlet Context
      5. 19.5. Konfigurieren des Http Service
      6. 19.6. Zusammenfassung
    9. 20. Der Application Admin Service
      1. 20.1. Tutorial: Externe Anwendungen starten
      2. 20.2. Der Application Admin Service im Überblick
      3. 20.3. Der Application Container
        1. 20.3.1. Der Application Descriptor
        2. 20.3.2. Der Application Handle
      4. 20.4. Application Manager
        1. 20.4.1. Anwendungen ermitteln
        2. 20.4.2. Anwendungen starten und stoppen
        3. 20.4.3. Scheduling
        4. 20.4.4. Anwendungen zeitgesteuert ausführen
        5. 20.4.5. Der Equinox Application Manager
      5. 20.5. Zusammenfassung
  7. III. Eclipse-Equinox-spezifische Erweiterungen
    1. 21. Erweiterungen des OSGi Class Loading
      1. 21.1. Tutorial: Grußbotschaften aus XML-Datei einlesen
      2. 21.2. Buddy Class Loading
        1. 21.2.1. Eclipse-BuddyPolicy: dependent
        2. 21.2.2. Eclipse-BuddyPolicy: registered
        3. 21.2.3. Eclipse-BuddyPolicy: global
        4. 21.2.4. Verwenden der Standard-Java-Class-Loader
        5. 21.2.5. Buddy Class Loading vs. DynamicImport-Package
        6. 21.2.6. Konsequenzen des Buddy Class Loading
      3. 21.3. Die Sichtbarkeit exportierter Packages beschränken
        1. 21.3.1. Die Export-Package-Direktive x-friend
        2. 21.3.2. Die Export-Package-Direktive x-internal
      4. 21.4. Zusammenfassung
    2. 22. Extension Points und Extensions
      1. 22.1. Tutorial: Ein erweiterbarer Dialog
      2. 22.2. Extension Points und Extensions im Überblick
      3. 22.3. Extension Points definieren
        1. 22.3.1. Deklarative Beschreibung
        2. 22.3.2. Definition von Extension Points im PDE
      4. 22.4. Extension definieren
        1. 22.4.1. Eine Extension definieren
        2. 22.4.2. Definition von Extensions im PDE
      5. 22.5. Die Extension Registry
        1. 22.5.1. Das Interface IExtensionRegistry
        2. 22.5.2. Programmatischer Zugriff auf Extension Points, Extensions und Konfigurationselemente
      6. 22.6. Executable Extensions
        1. 22.6.1. Executable Extensions erzeugen
        2. 22.6.2. Zugriff auf Konfigurationsdaten: IExecutableExtension
        3. 22.6.3. IExecutableExtensionFactory
      7. 22.7. Dynamische Extensions
        1. 22.7.1. Das Interface IRegistryChangeListener
        2. 22.7.2. Das Interface IExtensionTracker
        3. 22.7.3. Das Interface IextensionChangeHandler
      8. 22.8. Extension Points vs. OSGi Services
      9. 22.9. Zusammenfassung
    3. 23. Das Equinox Application Model
      1. 23.1. Tutorial: Eine »Hello World« Application
      2. 23.2. Das Equinox Application Model im Überblick
      3. 23.3. Equinox-Anwendungen implementieren
        1. 23.3.1. Das Interface IApplication
        2. 23.3.2. Der Extension Point org.eclipse.core.runtime.applications
      4. 23.4. Ausführen von Anwendungen
        1. 23.4.1. Ausführen einer Anwendung beim Start des Frameworks
        2. 23.4.2. Verwendung des Application Admin Service
      5. 23.5. Zusammenfassung
    4. 24. Webanwendungen mit Eclipse Equinox
      1. 24.1. Tutorial: Eine Webanwendung mit JSPs und Extensions
      2. 24.2. Überblick Über die webspezifischen
      3. 24.3. Verwenden der Extension Registry
        1. 24.3.1. Registrieren von Ressourcen
        2. 24.3.2. Registrieren von Servlets
        3. 24.3.3. Registrieren von Http-Context-Instanzen
      4. 24.4. Verwendung der Jasper JSP Engine
        1. 24.4.1. Programmatische Registrierung von JSPs
        2. 24.4.2. Registrierung von JSPs über die Extension Registry
      5. 24.5. Servlet Container in Eclipse Equinox einbetten
        1. 24.5.1. Das Http Service Servlet
        2. 24.5.2. Der Jetty Webserver als eingebetteter Servlet Container
      6. 24.6. Eclipse Equinox in einen Servlet Container einbetten
        1. 24.6.1. Installieren der Servlet Bridge
        2. 24.6.2. Konfiguration
        3. 24.6.3. Administration
      7. 24.7. Zusammenfassung
    5. 25 Links und Literatur

Product information

  • Title: Die OSGi Service Platform: Eine Einführung mit Eclipse Equinox
  • Author(s): Gerd Wütherich, Nils Hartmann, Bernd Kolb, Matthias Lübken
  • Release date: April 2008
  • Publisher(s): dpunkt
  • ISBN: 9783898644570