Я использую OSGI, Weld и Glassfish3.1
У меня есть модуль OSGI с ServiceListener.В ServiceListener мне нужно ввести зарегистрированные сервисы в мою базу данных.Первоначально я думал написать EJB, который идет в DB, и в ServiceListener добавить поиск / EJB-инъекцию, которая принесет EJB (EJB и ServiceListener находятся в одном пакете).Однако поиск / EJB-инъекция не работает:
@EJB
private AdminService adminService;
private class MyServiceListener implements ServiceListener {
private AdminService adminService;
public MyServiceListener(){
adminService = (AdminService) ctx.lookup("java:global/com.war_1.0.0.SNAPSHOT/AdminService");
...
}
public synchronized void serviceChanged(ServiceEvent event) {
switch (event.getType()) {
case ServiceEvent.REGISTERED:
ServiceReference reference = event.getServiceReference();
adminService.installService(...);
break;
default:
break;
}
}
Я также пытался получить EJB в качестве службы OSGI, но безуспешно.Есть ли способ решить эту проблему?Может быть, я не буду делать это с ServiceListener?
спасибо
UPD: я нашел решение для этого: добавить загрузочный синглтон EJB, который внедряет службу DAO и добавляет прослушиватель в OSGI,но он берет bundleContext от статического члена от активатора.Но иногда выдается исключение IllegalStateException (bundleContext, который не активен)