Рекомендуемое решение DI для комплектов, используемых внутри и снаружи OSGi - PullRequest
3 голосов
/ 04 марта 2012

Мы используем смешанную среду OSGi и не OSGi. Поэтому все производимые нами JAR-файлы являются пакетами, чтобы обеспечить возможность развертывания и выполнения как внутри, так и снаружи контейнера OSGi. Таким образом, все наши написаны без какой-либо интеграции OSGi API, и мы используем один пакет расширения OSGi для регистрации всех сервисов как сервисов OSGi.

Я хотел бы использовать одно решение DI (то есть один и тот же файл (ы) конфигурации) при соединении системы вместе как внутри, так и снаружи контейнера OSGi. Это, довольно эффективно, мешает мне использовать простой проектный DI.

Что бы вы порекомендовали здесь? Есть ли лучшие практики, собранные для такого сценария?

Ответы [ 3 ]

4 голосов
/ 04 марта 2012

Я предлагаю взглянуть на pojosr

Реестр служб, который позволяет программам реестра служб в стиле OSGi без использования инфраструктуры OSGi.

Идея состоит в том, чтобы создатьчто-то, что сделало бы сервис и части уровня жизненного цикла OSGi доступными в средах, где его обычно нет.

Это позволяет вам использовать обычный реестр служб OSGi и декларативные сервисы, даже внеофициальная структура OSGi, если вам не нужно больше, чем то, что предлагается декларативными услугами

3 голосов
/ 04 марта 2012

Пара вариантов;

  1. Google Guice будет работать как внутри ( неявно и явно используя Peaberry ), так и снаружи.
  2. Apache Camel - Связывание бобов Camel будет работать в OSGi, spring (AFAIK) во всех контейнерах EJB (даже JBoss ) а также будет хорошо работать с Guice.

Вероятно, вы работаете с несколькими JVM, со смесью новых приятных OSGi и устаревших версий, * Camel EIP может быть действительно подходящим вариантом. Но вы всегда можете начать работу с Guice и интегрировать Camel позже.

Что бы вы ни решили, было бы разумно убедиться, что любые изготовленные банки содержат манифест OSGi.

2 голосов
/ 08 марта 2012

Используйте Spring.

Очевидно, что он будет работать за пределами OSGi, и вы можете использовать Spring dm, чтобы адаптировать его для работы внутри OSGi. Это просто требует добавления файла контекста osgi для привязки bean-компонентов к / из реестра служб.

Мы использовали его в нескольких проектах в течение нескольких лет для приложений Eclipse RCP. Он также может быть использован для привязки вещей на уровне пользовательского интерфейса в данном конкретном случае.

...