Внедрение зависимостей в среде OSGI

Сначала немного предыстории:

Я работаю над некоторым кодом прототипа веб-приложения на основе Apache Sling , который основан на OSGI и работает на Apache Felix. Я все еще относительно новичок в OSGI, хотя я думаю, что уже усвоил большинство концепций. Однако меня озадачивает то, что я не смог найти «полную» структуру внедрения зависимостей (DI ). Я успешно применил элементарный DI с помощью декларативных служб (DS ). Но насколько я понимаю, DS используются для ссылки --, как бы это сказать? --Службы и компоненты OSGI зарегистрированы вместе. И для этого он отлично работает, но я лично использую DI-фреймворки, такие как Guice , чтобы связать вместе целые графы объектов и поместить объекты в правильные области (думаю @RequestScopedили @SessionScoped, например ). Однако ни одна из специфических для OSGI платформ, которые я рассматривал, похоже, не поддерживает эту концепцию.

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

Будучи расширением Guice, я экспериментировал с Peaberry , однако мне было очень трудно найти документацию,и хотя у меня заработал базовый DI, многие графические -расширенные функции сервлета (автоматическое внедрение в фильтры, сервлеты и т. д. )вообще не работали.

Итак, мои вопросы следующие:

  1. Чем декларативные сервисы отличаются от «традиционных» DI, таких как Guice или Spring? Решают ли они одну и ту же проблему или предназначены для решения разных задач?
  2. Во всех конкретных решениях OSGI, которые я видел до сих пор, отсутствует концепция областей для DI. Например, сервлет Guice + guice -имеет зависимости области запроса, что делает написание веб-приложений действительно простым и понятным. Я просто пропустил это в документации или эти проблемы не охватываются ни одной из этих платформ?
  3. Являются ли JSR 330 и DI на основе OSGI двумя разными мирами? iPOJO, например, предлагает свои собственные аннотации и Felix SCR Аннотации кажутся совершенно другим миром.
  4. Есть ли у кого-нибудь опыт создания систем на основе OSGI и DI? Может быть, даже какой-нибудь пример кода на github?
  5. Кто-нибудь использует разные технологии, такие как Guice и iPOJO, вместе, или это просто сумасшедшая идея?

Извините за довольно длинный вопрос.

Любая обратная связь очень ценится.


Обновления

Объемный впрыск:Внедрение с заданной областью — полезный механизм для автоматического внедрения объектов из определенного жизненного цикла. Подумайте, например, что часть вашего кода зависит от объекта сеанса Hibernate, созданного как часть фильтра сервлета. Отметив зависимость, контейнер автоматически перестроит граф объекта. Может быть, просто разные подходы к этому?

JSR 330 против DS:из всех ваших отличных ответов я вижу, что это две разные вещи. Это ставит вопрос, как быть со сторонними библиотеками и фреймворками, которые используют аннотации JSR 330 при использовании в контексте OSGI? Какой хороший подход? Запуск контейнера JSR 330 в Bundle?

Я ценю все ваши ответы,вы очень помогли!

36
задан ilikeorangutans 23 June 2012 в 20:10
поделиться