Взаимодействие Non osgi с пучками osgi

Я использую Struts2 для своего веб-приложения, и я хочу использовать архитектуру OSGI для сервиса и дао слоя. Теперь я не хочу оборачивать свои движения struts2 как пакеты osgi, но хочу, чтобы сервис и слой dao были упакованы как пакеты. Теперь кто-нибудь может сказать мне, как мои действия без osgi могут потреблять пакеты osgi (сервис и слой дао). И я хочу развернуть свое веб-приложение struts2 в веб-контейнере, чтобы в этом случае веб-контейнер взаимодействовал с контейнером osgi (где развернут мой сервис и dao). Пожалуйста помоги.

2 ответа

Вам нужен так называемый "мост" между вашим веб-контейнером и средой OSGi. И Felix, и Equinox имеют такую ​​возможность, но для меня реализация Felix работала намного лучше.

Что вы в основном хотите сделать, это:

  • Добавьте прослушиватель контекста к вашему ServletContext
  • Запуская OSGi при запуске ServletContext, остановите его, когда ServletContext будет уничтожен.
  • Передайте ServletContext в контекст OSGi, зарегистрировав его как сервис
  • Сохраните объект инфраструктуры OSGi в ServletContext, зарегистрировав его в качестве атрибута.

Итак, чтобы получить доступ к веб-контексту из OSGi: получите сервис ServletContext и перейдите оттуда.

Чтобы получить доступ к OSGi из веб-контекста: Извлеките инфраструктуру OSGi из атрибута ServletContext и перейдите оттуда.

Посмотрите документацию Феликса, также я недавно сделал пример на GitHub

Наверняка это не сработает. Как вы думаете, почему стоит переместить половину вашего приложения в OSGi? Либо вы должны переместить все это или ни одного.

Возможно, вы сможете развернуть слой Struts в файле war и получить к нему доступ к службам OSGi. Я думаю, что это возможно в Деве и Апаче Карафе. Это означает усиление войны со структурами OSGi. Например, в Karaf вы можете использовать wab-файл, который является военным файлом с манифестом.

Другие вопросы по тегам