Внедрение службы Blueprint OSGi в bean-компонент JSF/PrimeFaces

У меня есть проект, построенный на топовом сервере OSGi и Karaf. Для внедрения зависимостей мы используем Aries Blueprint. Основная часть проекта — это маршруты Apache Camel и вещи для интеграции, но теперь мне нужно создать веб-интерфейс обслуживания. Поэтому я пробую реализацию JSF — PrimeFaces. Мне удалось создать демку, которая работает в OSGi под Karaf, это нормально.

Теперь я хотел бы знать, можно ли здесь использовать Blueprint, чтобы сослаться на некоторые уже существующие службы OSGi, которые у нас есть, и внедрить службу в JSF Bean, чтобы мы могли извлечь выгоду из уже написанного кода.

Не могли бы вы мне помочь?


person stibi    schedule 31.07.2013    source источник


Ответы (1)


Мы решили это следующим образом:

  • We created a listener that:
    • Creates a ServiceTracker that tracks the BlueprintContainer service attached to the same bundle
    • Помещает сервистрекер в атрибуты ServletContext
  • Мы создали ELResolver, который использует этот ServiceTracker, и если есть доступный BlueprintContainer, он использует его getComponentInstance для получения значения.
  • Слушатель открывает servicetracer во время инициализации приложения и закрывает его во время уничтожения приложения.

Наш класс слушателя: https://source.everit.biz/svn/everit-util/trunk/core/src/main/java/org/everit/util/core/servlet/ServiceLoaderListener.java

Наш класс преобразователя EL: https://source.everit.biz/svn/everit-util/trunk/core/src/main/java/org/everit/util/core/el/OsgiELResolver.java

Пользователь/пароль: гость/гость

После того, как вы зарегистрируете свой собственный el-resolver, все el-выражения будут оцениваться так, как id-ы экземпляров компонентов будут искаться внутри контейнера чертежа. Если вы скажете, что у вас есть bean-свойство в файлеfaces-config.xml со значением #{myComponent}, оно будет найдено внутри BlueprintContainer.

person Balazs Zsoldos    schedule 31.07.2013