2012-07-05 3 views
4

Я новичок в этом и читаю о WAB, но хочу очистить основное различие - Я имею в виду использование osgi, встроенного в tomcat, и создание WAR против создания WAB?разница между WAB и WAR

Когда следует учитывать каждый вариант?

1) OSGI встроенный в котом

2) кот в OSGI

3) с использованием WAB

+0

Существует 4-й вариант: наличие служб OSGi предоставляет сервис сервлета '<предоставить интерфейс =" javax.servlet.Servlet "/>' будет зарегистрировать их в службе HTTP вашего контейнера OSGi. Это простой OSGi и не требует артефактов WAR/WAB. – maasg

+0

@maasg, шаблон «whiteboard» не работает во всех реализациях OSGi HttpService. Это поддерживается только несколькими, а не стандартными. Но это хороший образец. – Gunnar

ответ

7

OSGi встроен в контейнер (не только Tomcat!), Вероятно, единственный вариант, когда вам вынуждены использовать традиционную модель развертывания JavaEE WAR, т. е. ИТ-отдел управляет контейнером, и вы можете делиться с ним файлами WAR. Это загружает всю инфраструктуру OSGi в веб-приложение и позволяет модульную разработку в веб-приложении. Затем веб-приложение составлено в виде набора пакетов OSGi. Его также можно использовать для переноса/переноса существующего унаследованного веб-приложения в модули OSGi. Однако это будет непросто.

Я бы назвал второй подход (Tomcat в OSGi) чистым подходом OSGi. Tomcat или любой другой контейнер сервлетов (например, Jetty) могут быть развернуты в виде пакета (или набора пакетов) в среде OSGi. Рамка OSGi - это контейнер. У вас больше нет полного отделения веб-приложения. Может пересекаться. Некоторые пакеты/модули могут реализовывать веб-функции, а другие - нет. Основные функциональные возможности (базовые пакеты) могут быть повторно использованы другими веб-узлами.

Третий вариант - результат новой спецификации в OSGi. В принципе, это веб-приложение с манифестом пакета OSGi. Таким образом, все веб-приложение может быть развернуто как единый пакет OSGi на любой платформе с поддержкой WAB. Технически пакет может быть развернут как веб-приложение в контейнер Servlet. Но он получает доступ к BundleContext. Это позволяет веб-приложению взаимодействовать с другими пакетами или веб-приложениями, работающими в одной и той же структуре.

+2

Хороший ответ. Обратите внимание, что артефакт может быть как WAR *, так и WAB, и поэтому должен быть развернут как в OSGi, так и в традиционном контейнере. Это может помочь в миграции. –