Ответ на ваш вопрос очень прост: НЕТ. Нет никаких гарантий относительно доступности в OSGi, когда-либо основанного ни на сроках, ни на заказе. В сервисных событиях указаны только гарантии.
Это одна из величайших причин сложности делать предположения о сроках/заказах в вашем коде, потому что они всегда нарушаются самым неясным образом.
DS делает тривиальным писать код, который правильно реагирует на зависимости службы при их входе и выходе. Удостовериться, что вы получаете эти гарантии, связанные с услугами, невероятно сложно, и вы уничтожаете все это значение, если начинаете делать предположения, что что-то должно быть доступным после вызова метода.
В вашем примере просто полагайтесь на услугу, которая вам нужна. Если эта услуга доступна, вы уверены, что вся инициализация завершена.
Если вы придерживаетесь зависимости от службы, жизнь в OSGi довольно проста и очень надежна.
ОБНОВЛЕНО с примерами вопросов после
Один не-OSGi сторона:
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 Компонент:
@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);
}
}
Те много предположений, которые вы действительно не положение. –