Bundles automatisch installieren

OSGi - Provisioning


Aufbauend auf die Artikel „Generisches Ressourcenmodell“ und „Resolving“ ­betrachtet dieser Artikel die Möglichkeit des Provisionings: die Art und Weise, wie OSGi verwendet werden kann, um Bundles automatisch zu installieren.

Project Jigsaw

Im letzten Artikel wurde die Art und Weise, wie OSGi die Abhängigkeiten zwischen Bundles auflöst, betrachtet. Dieser Artikel soll eine Übersicht geben, wie die „Repository-Service-Spezifikation“ [1] den Vorgang des „Resolvings“ unterstützt, um Abhängigkeiten auch mittels Bundles aus externen Repositories auflösen zu können.

Artikelserie

Teil 1: Beschreibung von Abhängigkeiten auf Basis des Requirement-and-Capability-Modells

Teil 2: Requirement-Capability-Modell unter Verwendung der Resolver-Spezifikation

Teil 3: Provisioning-Spezifikation

Teil 4: Coordinator-Spezifikation

Repository

Ein Repository ist ein physikalischer Ort, an dem Bun­dles verfügbar gemacht werden. OSGi definiert nicht, in welcher Form Bundles abgelegt werden bzw. wie ein Index für den Zugriff aufgebaut sein muss, sondern beschreibt nur einen Vorschlag in der Spezifikation.

Der OSGi Service Repository ist so einfach wie möglich aufgebaut und bietet nur eine Methode an. Diese hat den Charakter einer Abfragemethode: Dem Repository wird eine Menge an Requirements übergeben und das Repository liefert eine Menge an Capabilities für jede Resource zurück:

interface Repository { Map<Requirement, Collection<Capability>> findProviders(Collection<? extends Requirement> requirements); }

Die Art und Weise, wie die Repository-Implementierung die Anfrage bearbeitet, ist nicht Teil der Spezifikation, sondern wird der Implementierung überlassen. Die Spezifikation definiert folgende OSGi Service Properties am Repository-Service:

  • service.pid – die eindeutige ID des Service

  • service.description – der Name/die Beschreibung

  • repository.url – eine oder mehrere URLs des Repositorys

Resource

Konnten zu einem gegebenen Requirement passende Capabilities gefunden werden, dann ist die Frage berechtigt, wie die damit verbundene Resource ermittelt werden kann. Wie im letzten Artikel zu „Resolving“ beschrieben, ist eine Capability immer mit einer Resource verbunden, welche diese Fähigkeit zur Verfügung stellt. Somit kann die Resource mittels der Methode getResource() von der Capability abgefragt werden. Da der Repository-Service alle Capabilities zu einem Requirement liefert, kann ein Requirement natürlich auch von verschiedenen Resources befriedigt werden.

Von der Resource z...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang