2010-10-27 11 views
10

Ich bin gerade kürzlich auf die Tatsache gestoßen, dass deklarative Dienste in OSGi die Konfiguration einer Komponente auf "erforderlich" setzen können, sodass die Komponente sie bei der Aktivierung erhält, wodurch die Lücke zwischen der Aktivierung der Komponenten und der Konfiguration geschlossen wird. Ich habe auch festgestellt, dass Sie Konfigurations-Updates über die modified -Methode erhalten können.OSGi Deklarative Services vs. ManagedService zum Konfigurieren von Service?

Es scheint mir wie diese Funktionalität ist sehr ähnlich zu der durch die Implementierung der ManagedService Schnittstelle und die Veröffentlichung als eine der "Dienste", die Sie zur Verfügung stellen.

Es scheint, als könnte ich ManagedService & einfach ignorieren verwenden Sie einfach die DS-Konfiguration Injektion.

Ist eine dieser Techniken gegenüber der anderen bevorzugt oder gibt es andere Kompromisse, die ich nicht sehe?

Antwort

11

Ja, Sie können ManagedService und ManagedServiceFactory vollständig ignorieren und nur deklarative Services-Komponenten verwenden. Und ja, ich würde diesen Ansatz empfehlen.

Man denke nur an verschiedene Abstraktionsniveaus. MS/MSF ist die Low-Level-API für den Konfigurationsadministrator und ist auch verfügbar, wenn Sie kein DS-Bundle ausführen. Der Vorteil besteht darin, dass Sie konfigurierbare Services schreiben können, ohne eine Abhängigkeit von DS zu haben, was für bestimmte Komponenten auf Systemebene wünschenswert sein kann.

Wenn Sie jedoch glücklich sind, auf DS, z. Für Komponenten auf "Anwendungsebene" wird die Verwendung der integrierten Integration von DS mit dem Konfigurations-Admin Ihr Leben erheblich vereinfachen.

+0

Ok, das war, was ich tun wollte, aber ich bemerkte/war ein wenig besorgt darüber, wenn eine DS-Komponente nicht erstellt werden kann, da ihre Konfiguration ungültig ist und eine Ausnahme auslöst, weil Equinox versucht, es zu instanziieren Ausnahmen werden geworfen und protokolliert. Es schien nicht sauber zu sein. – oconnor0

+1

Equinox sollte nicht versuchen, die Komponente zu instanziieren, wenn die Methode activate eine Ausnahme auslöst. Es sollte nur erneut versuchen, die Komponente neu zu erstellen, wenn sich die Konfiguration ändert. Wie beim Loggen - natürlich sollte die von der Komponente ausgelöste Ausnahme protokolliert werden! –

+0

Was ist der richtige Weg, um DS dazu zu bringen, eine Komponente als 'ManagedServiceFactory' und nicht als' ManagedService' zu ​​behandeln? Mit anderen Worten, wenn DS eine neue Instanz einer Komponente für * jede * anwendbare Konfigurationsinstanz erstellen möchte, was ist der Trick? Ist es erforderlich, eine Metatype-Definition zu schreiben? – seh

Verwandte Themen