В OSGi нет начального заказа ... хотя есть механизмы, влияющие на первоначальный порядок запуска, проблема в том, что любой комплект может остановиться в любое время. Таким образом, единственное решение - фактически обрабатывать вашу зависимость от Admin Admin.
С декларативными услугами (DS) это на самом деле очень мало работы. Кроме того, пожалуйста, забудьте о активаторах пучков, они представляют собой единичные пакеты и, таким образом, являются плохими идеями. Таким образом, в DS вы должны сделать следующее (с помощью аннотаций):
@Component(immediate=true)
public class MyTask extends Thread {
EventAdmin ea;
public void run() {
while (!isInterrupted()) {
// do something
ea.postEvent(...);
}
}
@Activate void activate() { this.start();}
@Deactivate void deactivate() { this.interrupt(); }
@Reference void setEventAdmin(EventAdmin ea) { this.ea = ea;}
}
Есть редкие случаи, вы не должны использовать DS и застревают с Bundle-активаторов, но они редки и должны стать более редкими. Если вы застряли в таком действительно плохом случае, вы также можете создать трекер службы в методе запуска активатора Bundle и отслеживать службы Event Admin. Как только вы его получите, вы создаете поток для запуска своего кода. Когда служба исчезает, вы прерываете поток. Однако это гораздо более сложное решение.
Есть и другой менеджер зависимости службы, но я настоятельно рекомендую декларативные услуги с их аннотациями.