2016-07-03 20 views
0

Angenommen, ich habe einen OSGi-Dienst A, der mit DS- und Metatypkonfiguration deklariert wurde.OSGi DS-Dienstkonfiguration und ServiceTracker

Dann nennen wir B einen anderen Dienst, der jedes Objekt auf der Grundlage eines Eigenschaftsfilters verfolgt, der nicht zur Konfiguration von A gehört.

Gibt es in A die Möglichkeit, auf die Diensteigenschaften zuzugreifen und sie zur Laufzeit zu aktualisieren, sodass B die Änderung bemerkt?

Beachten Sie, dass die Eigenschaft, die von B verfolgt wird, keine Konfigurationskomponente ist, sondern dass A die eigene Konfiguration ableiten kann. Daher würde A seine Diensteigenschaften in seiner @Activate-Methode nach der Analyse der Konfiguration aktualisieren.

Antwort

0

Sie können den Dienst programmgesteuert in der Activate-Methode von A registrieren, damit Sie entscheiden können, welche Diensteigenschaften hinzugefügt werden sollen.

+0

Würde A nicht zweimal registriert? – cyberz

+0

@cyberz Nein, Sie müssen nur sicherstellen, dass Ihre Komponente die Service-Schnittstelle nicht direkt implementiert. –

+0

Wenn Sie nicht angeben, dass die Komponente einen OSGi-Dienst automatisch registrieren soll, wird sie nicht zweimal registriert. Normalerweise bedeutet dies, dass Sie die @ Service Annotation nicht verwenden sollten. –

1

Wenn Sie die direkte Verbindung der Konfigurationssyntax mit der Eigenschaft nicht interessieren, dann gibt es eine viel einfachere Lösung.

Legen Sie einfach die Service-Eigenschaft in der Konfiguration der Komponente A fest. Sie wird direkt als Service-Eigenschaft wiedergegeben, nach der B dann filtern kann.