2016-06-02 25 views
1

Ich habe einen OSGi-Service mit zwei Implementierungen. Eine für Prod und eine für Test.OSGi Profile wie Spring Profile

Gibt es eine Möglichkeit, sie in verschiedenen envs über Code zu wechseln? So etwas wie Spring profiles

+0

Wie registrieren Sie Ihren OSGi-Dienst jetzt? Programmatisch? –

Antwort

3

Es gibt keine direkte Übereinstimmung mit Profilen. Sie können beide Dienste mit unterschiedlichen Diensteigenschaften veröffentlichen. Auf dem Dienstverbraucher können Sie dann einen Filter verwenden, um zu entscheiden, welcher Dienst verwendet werden soll.

In deklarativen Services kann dieser Filter zur Laufzeit geändert werden, indem eine Konfiguration für Ihre Komponente bereitgestellt wird. Im Code setzen Sie den Filter auf Ihren Standard wie "prod" unten.

@Reference(target="(profile=prod)") 
MyService myService; 

In der Config für die Komponente in dem Sie den Service injizieren Sie eine Eigenschaft hinzufügen können diesen Filter ändern:

myService.target=(profile=dev) 

Ein weiterer noch häufiger Ansatz ist verschiedene Dienste für Entwickler und prod einfach zu implementieren . In Ihrem Test stellen Sie einen Dummy-Dienst bereit, während Sie den richtigen Dienst bereitstellen. Dieser Ansatz hat den Vorteil, dass er mit jedem DI-Framework in OSGi funktioniert.