Die Antwort auf Ihre Frage ist sehr einfach: NEIN. Es gibt KEINE Garantien für die Verfügbarkeit in OSGi, weder auf der Grundlage des Timings noch der Bestellung. Die einzigen Garantien sind in den Service-Ereignissen angegeben.
Es ist eine der größten Ursachen für Komplexität, Timing-/Ordnungsannahmen in Ihrem Code zu treffen, weil sie immer auf die dunkelste Art und Weise verletzt werden.
DS macht es trivial, Code zu schreiben, der korrekt auf die Dienstabhängigkeiten reagiert, wenn sie kommen und gehen. Sicherzustellen, dass Sie diese mit den Diensten verbundenen Garantien erhalten, ist unglaublich komplex und Sie zerstören diesen ganzen Wert, wenn Sie anfangen, Annahmen zu machen, dass nach dem Aufruf einer Methode verfügbar sein sollte.
In Ihrem Beispiel, verlassen Sie sich einfach auf einen Service, den Sie brauchen. Wenn dieser Dienst verfügbar ist, sind Sie sicher, dass die Initialisierung abgeschlossen ist.
Wenn Sie sich an Serviceabhängigkeiten halten, ist die Lebensdauer in OSGi ziemlich einfach und sehr robust.
mit Beispiel AKTUALISIERT nach Fragen
Einer der nicht-OSGi Seite:
systemBundleContext = ... create framework
systemBundleContext.registerService(
BundleActivator.class,
new BundleActivator() {
public void start(BundleContext c) {
// start non-OSGi code
}
public void stop(BundleContext c) {
// stop non-OSGi code
}
},
null);
DS Komponente:
@Component
public class Initiator {
@Reference
BundleActivator ba;
@Referenc
MyService myService;
@Activate void activate(BundleContext context) throws Exception {
ba.start(context);
}
@Deactivate void deactivate(BundleContext context) throws Exception {
ba.stop(context);
}
}
Diejenigen viele Annahmen sind, die Sie wirklich sind in keiner Position zu machen. –