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?
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
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! –
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