2013-07-31 2 views
1

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

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

Помогите мне, пожалуйста?

ответ

1

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

  • Мы создали слушатель, что:
    • Создает ServiceTracker, который отслеживает службу BlueprintContainer прикрепленной к одной связке
    • Переводят servicetracker в ServletContext атрибуты
  • Мы создали ELResolver, который использует этот ServiceTracker, и если имеется BlueprintContainer availabl е он использует 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-компонента в ваших лицах-config.xml со значением # {myComponent}, он будет искать внутри BlueprintContainer.

Смежные вопросы