2012-07-13 4 views
5

Ich habe ein Fragment-Bundle, das ich erstellt habe, um auf einige Add-Funktionen zu einem Jar of Second-Party zuzugreifen. Mein Fragment sollte einen Dienst registrieren, um diese neue Funktionalität verfügbar zu machen. Es scheint nicht zu funktionieren. Bevor ich mich mit der Fehlersuche beschäftige, möchte ich wissen, ob dies überhaupt erlaubt ist. Das heißt, schaut Felix SCR's Bundle Watcher Fragmente an oder ignoriert sie?Kann ein OSGi-Fragmentpaket einen deklarativen Dienst veröffentlichen?

Antwort

8

Aha, ich fand die Antwort selbst in der Spezifikation, Abschnitt 112.4.2: "Ein Manifest-Header einer Service-Komponente, der in einem Fragment angegeben ist, wird von SCR ignoriert." Dies steht im Einklang mit 3.14.3: "Die folgende Liste enthält die Header, die nicht in einem Fragmentbündel verwendet werden dürfen: Bündel-Aktivator"

+1

Siehe auch http://stackoverflow.com/questions/8592860/component-inside-a-fragment-never-activated, das bestätigt, was Sie gerade gesagt haben, aber mit den zusätzlichen Informationen, die Blaupause funktioniert für Fragmente. –

2

Ja. Dafür muss das Host-Bundle offen sein. Mit "offen" meine ich, dass das Host-Paket den Header Service-Components so konfigurieren muss, dass alle Deskriptoren im Fragment gefunden werden. Zum Beispiel:

Service-Components: OSGI-INF/*.xml 

alle .xml Dateien im OSGi-INF/ Ordner des Host-Bündels all beigefügten Fragmente finden.

Ich sah Eclipse SmartHome Projekt diese Lösung verwenden, um ihre Benutzeroberfläche anpassbarer zu machen.

Weitere Informationen: http://apache-felix.18485.x6.nabble.com/DS-amp-fragments-td5004610.html

Verwandte Themen