In blueprint.xml
deklariere ich eine optionale Abhängigkeit auf diese Weise:
und in RepositoryImpl
, ich habe
Diese Methode wird von Blueprint aufgerufen, auch wenn kein RepositoryListener
-Dienst wie erwartet verfügbar ist. Das Problem ist, wie kann ich später überprüfen, ob ein Service ist?
funktioniert nicht, da repositoryListener
nicht null
ist, sondern ein Blueprint-Proxy.
Es gibt drei Möglichkeiten.
ServiceUnavailableException
. Eine Option besteht also darin, ein sehr kurzes Blueprint-Timeout festzulegen und die ServiceUnavailableException abzufangen. Um ein kürzeres Zeitlimit festzulegen, fügen Sie einfach ein Attribut zu Ihrer optionalen Servicereferenz hinzu:
%Vor%Um einen Referenz-Listener zu verwenden, fügen Sie Ihrer Blueprint-XML-Datei etwa Folgendes hinzu (in Kapitel 6 von Enterprise OSGi in Aktion ):
%Vor% Die Methoden bind
und unbind
werden aufgerufen, wenn Ihr Service erscheint und verschwindet (oder wenn Services in Ihrer Referenzliste hinzugefügt und entfernt werden, wenn Sie eine Referenzliste verwenden).
Bei der Verwendung einer Referenzliste ist kein Codebeispiel erforderlich. Verwenden Sie einfach ein <reference-list
-Element und stellen Sie sicher, dass Ihre Setter-Methode eine Liste annimmt.
Tags und Links osgi blueprint-osgi