Blueprint: Wie überprüfe ich, ob eine optionale Abhängigkeit erfüllt ist?

8

In blueprint.xml deklariere ich eine optionale Abhängigkeit auf diese Weise:

%Vor%

und in RepositoryImpl , ich habe

%Vor%

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?

%Vor%

funktioniert nicht, da repositoryListener nicht null ist, sondern ein Blueprint-Proxy.

    
Alexey Romanov 29.05.2012, 06:25
quelle

1 Antwort

14

Es gibt drei Möglichkeiten.

  • Wenn Sie versuchen, den (fehlenden) optionalen Dienst zu verwenden, erhalten Sie normalerweise eine Verzögerung von fünf Minuten, während Blueprint auf die Anzeige eines Sicherungsdienstes wartet, gefolgt von einem ServiceUnavailableException . Eine Option besteht also darin, ein sehr kurzes Blueprint-Timeout festzulegen und die ServiceUnavailableException abzufangen.
  • Eine sauberere Option ist die Verwendung eines Referenz-Listeners zur Überwachung des Lebenszyklus des Dienstes. Dies hat den Nachteil, dass zusätzlicher Code benötigt wird.
  • Die einfachste - und daher faulste - Option ist die Verwendung einer optionalen Referenzliste anstelle einer optionalen Referenz. Wenn keine zufriedenstellenden Dienste vorhanden sind, ist die Liste leer. Natürlich müssen Sie darüber nachdenken, was Sie tun möchten, wenn mehrere zufrieden stellende Dienste vorhanden sind.

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.

    
Holly Cummins 29.05.2012, 08:41
quelle

Tags und Links