Deklarative Service-bedingte Bindung von Osgi

8

Ich habe dieses Szenario, ich habe drei deklarative Dienste, die die gleiche Schnittstelle zur Verfügung stellen (sagen wir eine Leser-Schnittstelle und ich habe leserimpl1-database-readerimpl2-flache Datei-readerimpl3-Speicher). Ich möchte einen Verbraucher haben, der nur an die Datenbankimplementierung bindet. In der Komponentendefinition geben wir ihm einen Namen, so dass ich ziemlich sicher bin, dass der Name in der Registrierung ist. Wenn ich also eine Aktivierungsmethode hinzufügen soll, kann ich mit dem Namen aus dem Komponentenkontext suchen.

Ich möchte es über Bind / Unbind versuchen, obwohl ich den Dienstnamen als Parameter verwende. Ich bin mir ziemlich sicher, dass der "target" -Parameter im Komponentenreferenzelement dazu verwendet werden kann, aber ich habe nicht gefunden, wie man es benutzt.

Hat jemand anderes das getan?

Dies wäre ähnlich zu verwenden @Referenz (mapped-name="foo")

    
el_eduardo 27.07.2011, 19:57
quelle

1 Antwort

14

Target ist einfach ein OSGi Filter . Sie können es verwenden, um nach jeder Serviceeigenschaft zu filtern. Wenn Ihre Dienste also die Eigenschaft backend mit den Werten file oder database haben, können Sie mit dem folgenden Ziel binden:

%Vor%

Und der Dienst mit dem Datenbank-Backend selbst registriert sich als:

%Vor%     
Ivan Dubrov 28.07.2011 03:57
quelle

Tags und Links