Нужно установить компендиум для установки EventAdmin?

У меня есть приложение, которое получает события большого объема (некоторые данные метрик) из веб-приложений. У меня есть приложение, отличное от osgi, которое получает эти события и отвечает за пересылку этих событий в пакет osgi. Я пытаюсь использовать EventAdmin для этого сообщения. Я посмотрел EventAdmin имеет значение null в проекте maven-osgi, но не четко ответить на несколько вопросов.

Я хочу установить службу EventAdmin (на уровне приложения, отличного от OSGI). Я использую "org.osgi.service.event.EventAdmin". Однако отдельной баночки для этого нет. Является частью компендиума. Нужно ли устанавливать банку компендиума?

Если я не сделаю выше, ссылка, которую я возвращаю из этого вызова, всегда будет нулевой: ServiceReference ref = context.getServiceReference(EventAdmin.class.getName());

Любые указатели высоко ценятся

Спасибо, Масти.


person Masti    schedule 02.02.2014    source источник


Ответы (1)


Администратор событий предназначен для общения внутри одного фреймворка OSGi. Вы не можете использовать его вне OSGi или для связи между контейнерами OSGi. В вашем случае я рекомендую использовать jms для связи или, если это слишком медленно, то RabbitMQ или HornetQ могут работать. Также ведется работа по определению удаленных событий для OSGi, но пока она недоступна. Одной из возможных комбинаций администратора событий и jms может быть получение jms в одном пакете и пересылка события через администратора событий. Таким образом, ваш пакет бизнес-кода может абстрагироваться от jms.

person Christian Schneider    schedule 02.02.2014
comment
Спасибо, Кристиан. Я использовал это для связи между моим приложением и пакетом osgi: bundleContext.registerService(DATA_TYPE, dataHolderMap, null); Это хорошо работает для небольшого количества звонков. Я подумал, что аналогичным образом вы можете использовать EventAdmin на одной JVM. - person Masti; 02.02.2014
comment
Если вы находитесь в той же виртуальной машине, то у вас, по крайней мере, есть возможность использовать службы OSGi. Извне среды OSGi вы можете получить доступ только к тем классам и интерфейсам, которые не входят в пакеты. Таким образом, вы можете попробовать добавить jar спецификации предприятия в свой обычный путь к классам и экспортировать пакет службы администрирования событий, используя параметр org.osgi.framework.system.packages.extra фреймворка. Затем вы сможете получить службу из-за пределов фреймворка. - person Christian Schneider; 03.02.2014