OSGI: получить ссылку на EJB от ServiceListener - PullRequest
0 голосов
/ 15 марта 2011

Я использую 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, который не активен)

Ответы [ 2 ]

0 голосов
/ 07 апреля 2013

вам нужно объявить Export-EJB:ALL в MENIFEST.MF, который будет экспортировать весь EJB как сервис, затем вы можете использовать @OSGiService для получения сервиса, для подробностей вы можете обратиться к "Разработка приложений OSGi с Сервер GlassFish "

надеюсь, что это поможет вам

0 голосов
/ 21 марта 2011

Я нашел решение для этого: добавить загрузочный одноэлементный EJB, который внедряет службу DAO и добавляет прослушиватель OSGI.Но мне все еще любопытно, есть ли лучший подход

...