OSGi: Ressourcen gezielt aus bestimmten Modulen laden?

Novanic

Bekanntes Mitglied
Hallo Leute,

ich möchte für mein Projekt eine Art Plugin-Mechanismus entwickeln und stelle mir das so vor, dass jedes Plugin in einem OSGi-Modul/Bundle umgesetzt ist und so in mein Projekt eingebunden werden kann. Ich glaube OSGi wäre dafür die richtige Wahl. Dabei möchte ich z.B. festlegen, dass jedes Modul einen "img"-Ordner mit einer "icon.png"-Datei hat und diese von meinem Projekt geladen werden kann. Dazu müsste die img/icon.png natürlich pro Modul direkt eindeutig adressiert werden können, was im Normalfall nicht so einfach möglich ist, weil die Ressource ja nicht in einem Package liegt. Ist das per OSGi möglich indem z.B. mit "bundle-name/img/icon.png" zugegriffen wird oder wie lässt sich das über einen anderen Weg geschickt per OSGi lösen? Und kann man per OSGi auch direkt Konventionen festlegen, sodass ein Modul validiert werden kann (z.B. dass jedes Modul eines bestimmten Typs die Datei "img/icon.png" besitzen muss)?

Danke schonmal im Voraus.

Gruß Sven
 
Ja, OSGi ist für sowas ideal, aber ich würde die empfehlen direkt Eclipse RCP zu verwenden (basiert auf OSGi). Dort sind solche Dinge schon fertig eingebaut und du sparst dir viel Zeit.
 
Danke für die schnelle Antwort. Welche Möglichkeiten gibt es denn mit OSGi um die Ressourcen pro Modul/Bundle zu laden bzw. zu adressieren? Wie sieht das in der Praxis aus? Wie oben beschrieben mit "bundle-name/img/icon.png" oder gibt es noch elegantere Methoden?

Eclipse RCP ist für mein Projekt leider nicht das richtige. Es soll eine schlanke Lösung bleiben. ;-)
 
Welche Möglichkeiten gibt es denn mit OSGi um die Ressourcen pro Modul/Bundle zu laden bzw. zu adressieren?
Hier:
Bundle (OSGi Service Platform Release 4 Version 4.2)

Eclipse RCP ist für mein Projekt leider nicht das richtige. Es soll eine schlanke Lösung bleiben
Wie groß hast du dir denn vorgestellt? Das noch sinnvolle Minimum dürfte so bei 3-5MB liegen, also auch nicht viel größer als zB Equinox alleine.
Viele Sachen gehen mit dem Eclipse Aufbau deutlich einfacher durch das Extension Point/Extension Konzept und die vielen Hilfsklassen. Wenn eine GUI im Spiel ist würde ich auf jeden Fall Eclipse RCP verwenden.
 
Wenn es nicht sehr sehr viele sind würde ürde es sich anbieten einen Extender zu schreiben. Einfach mal nach OSGi Extender Pattern googlen.

Bundle#findEntries() und Bundle#getEntry() sind das was du suchst
 

Zurück
Oben