Модульные веб-приложения - PullRequest
31 голосов
/ 24 сентября 2008

Я недавно изучил OSGi и думаю, что это выглядит действительно хорошей идеей для модульных приложений Java.

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

На работе мы создаем приложение, которое имеет несколько «вкладок», каждая из которых является одной частью приложения. Я думаю, что это может быть действительно полезно при использовании подхода OSGi - однако я действительно не уверен, что будет лучшим способом справиться со всеми обычными ресурсами веб-приложений.

Я не уверен, имеет ли это какое-то значение, но мы используем JSF и IceFaces (что добавляет еще один уровень проблем, потому что у вас есть правила навигации и вы должны указать все файлы конфигурации лиц в ваш web.xml ... дох!)

Редактировать: в соответствии с этой цепочкой файлы FaceS-config.xml могут быть загружены из файлов JAR - так что на самом деле можно включить несколько файлов FaceS-config.xml без изменения файла web.xml. при условии, что вы разбиты на файлы JAR.

Любые предложения будут с благодарностью: -)

Ответы [ 8 ]

36 голосов
/ 24 сентября 2008

Вы совершенно правы, считая, что здесь есть синергизм, у нас есть модульное веб-приложение, в котором само приложение автоматически собирается из независимых компонентов (пакетов OSGi), где каждый пакет предоставляет свои собственные страницы, ресурсы, CSS и, возможно, JavaScript.

Мы не используем JSF (здесь Spring MVC), поэтому я не могу комментировать дополнительную сложность этой инфраструктуры в контексте OSGi.

Большинство фреймворков или подходов по-прежнему придерживаются «старого» мышления: один WAR-файл, представляющий ваше веб-приложение, а затем множество пакетов и сервисов OSGi, но почти ни один из них не занимается модульностью самого GUI.

Предпосылки для дизайна

С OSGi первый вопрос, который нужно решить: каков ваш сценарий развертывания и кто является основным контейнером? Я имею в виду, что вы можете развернуть свое приложение во время выполнения OSGi и использовать его инфраструктуру для всего. Кроме того, вы можете встроить среду выполнения OSGi в традиционный сервер приложений, а затем вам потребуется повторно использовать некоторую инфраструктуру, в частности, вы хотите использовать механизм сервлетов AppServer.

Наш дизайн в настоящее время основан на OSGi в качестве контейнера, и мы используем HTTPService, предлагаемый OSGi, в качестве нашего контейнера сервлета. Мы ищем какой-то прозрачный мост между внешним контейнером сервлета и OSTG HTTPService, но эта работа продолжается.

Архитектурный очерк модульного веб-приложения Spring MVC + OSGi

Таким образом, цель состоит не только в том, чтобы обслуживать веб-приложение поверх OSGi, но и в том, чтобы также применить компонентную модель OSGi к самому веб-интерфейсу, чтобы сделать его составным, повторно используемым, динамичным.

Это компоненты системы:

  • 1 центральный пакет, который заботится о соединении Spring MVC с OSGi, особенно он использует код Бернда Колба , чтобы позволить вам зарегистрировать Spring DispatcherServlet с OSGi в качестве сервлета.
  • 1 пользовательский URL Mapper, который внедряется в DispatcherServlet и обеспечивает сопоставление входящих HTTP-запросов с правильным контроллером.
  • 1 центральный JSP-декоратор на основе Sitemesh, который определяет глобальный макет сайта, а также центральные библиотеки CSS и Javascript, которые мы хотим предложить по умолчанию.
  • Каждый пакет, который хочет добавить страницы в наш веб-интерфейс, должен опубликовать 1 или более контроллеров в качестве служб OSGi и обязательно зарегистрировать свой собственный сервлет и свои собственные ресурсы (CSS, JSP, изображения и т. Д.). ) с сервисом OSGi HTTPService. Регистрация выполняется с помощью HTTPService, а ключевые методы:

    httpService.registerResources () а также httpService.registerServlet ()

Когда пакет, вносящий вклад в веб-интерфейс, активирует и публикует свои контроллеры, они автоматически выбираются нашим центральным пакетом веб-интерфейса, и вышеупомянутый настраиваемый сопоставитель URL-адресов собирает эти службы контроллера и сохраняет актуальную карту URL-адресов для экземпляров контроллера.

Затем, когда приходит HTTP-запрос для определенного URL-адреса, он находит связанный контроллер и отправляет запрос туда.

Контроллер выполняет свою работу, а затем возвращает любые данные, которые должны быть обработаны и имя представления (в нашем случае JSP). Этот JSP находится в комплекте контроллера и может быть доступен и обработан центральным пакетом веб-интерфейса именно потому, что мы пошли и зарегистрировали расположение ресурса в HTTPService. Наш централизованный распознаватель затем объединяет этот JSP с нашим центральным декоратором Sitemesh и выплевывает полученный HTML-код клиенту.

Насколько нам известно, это довольно высокий уровень, но без полной реализации его сложно объяснить полностью.

Нашей ключевой целью для этого было посмотреть , что сделал Бернд Колб со своим примером преобразования JPetstore в OSGi, и использовать эту информацию для проектирования нашей собственной архитектуры.

ИМХО, в настоящее время слишком много шумихи и упора на то, чтобы каким-то образом встроить OSGi в традиционные приложения на основе Java EE, и очень мало мыслей о том, чтобы реально использовать идиомы OSGi и его превосходную модель компонентов, чтобы действительно позволить проектировать составные веб-компоненты. приложения.

2 голосов
/ 18 мая 2009

Знайте о сервере Spring DM Лицензирование .

2 голосов
/ 19 января 2009

Check SpringSource dm Server - сервер приложений, полностью построенный на основе OSGi и поддерживающий модульные веб-приложения. Он доступен в бесплатной, открытой и коммерческой версиях.

Вы можете начать с развертывания стандартного файла WAR, а затем постепенно разбивать ваше приложение на модули OSGi или «связки» в OSGi-говорят. Как и следовало ожидать от SpringSource, сервер имеет отличную поддержку среды Spring и связанных продуктов Spring.

Отказ от ответственности: я работаю над этим продуктом.

1 голос
/ 05 декабря 2009

SpringSource, похоже, работает над интересной модульной веб-средой, построенной на основе OSGi, которая называется SpringSource Slices . Более подробную информацию можно найти в следующих сообщениях в блоге:

1 голос
/ 24 сентября 2008

Мы использовали Restlet с OSGi для хорошего эффекта со встроенным сервисом Http (под прикрытием это на самом деле Jetty, но tomcat также доступен).

Restlet имеет минимальные или минимальные потребности в конфигурации XML, и любая конфигурация, которую мы делаем, находится в BundleActivator (регистрация новых сервисов).

При создании страницы мы просто обрабатываем соответствующие реализации сервиса для генерации вывода в стиле декоратора. При подключении новых пакетов будут добавлены новые элементы оформления / виджеты при следующем отображении.

REST дает нам красивые чистые и содержательные URL, множественные представления одних и тех же данных и кажется расширяемой метафорой (несколько глаголов, много существительных).

Бонусной функцией для нас стала обширная поддержка кеширования, в частности ETag.

0 голосов
/ 05 февраля 2009

Интересный набор постов. У меня есть веб-приложение, которое настраивается для каждого клиента. Каждый клиент получает основной набор компонентов и дополнительных компонентов в зависимости от того, на что они подписаны. Для каждого выпуска мы должны «собрать» правильный набор услуг и применить правильную конфигурацию меню (мы используем меню Struts) в зависимости от клиента, что по меньшей мере утомительно. По сути, это та же самая база кода, но мы просто настраиваем навигацию, чтобы открывать или скрывать определенные страницы. Это явно не идеально, и мы хотели бы использовать OSGi для компонентизации сервисов. Хотя я вижу, как это делается для сервисных API, и понимаю, как можно связывать ресурсы, такие как CSS, java-скрипты и контроллеры (мы используем Spring MVC), как бы вы решили справляться с «сквозными» проблемами, такими как навигация по страницам и общий рабочий процесс, особенно в сценарии, в котором вы хотите динамически развернуть новый сервис и должны добавить навигацию к этому сервису. Могут быть и другие «сквозные» проблемы, такие как услуги, которые охватывают другие услуги. Спасибо, Деклан.

0 голосов
/ 12 января 2009

Взгляните на http://www.ztemplates.org, который прост и легок в освоении. Этот позволяет вам поместить все связанные шаблоны, javascript и css в один jar и использовать его прозрачно. Это означает, что вам даже не нужно заботиться о том, чтобы объявить необходимый javascript на своей странице при использовании предоставленного компонента, так как фреймворк сделает это за вас.

0 голосов
/ 12 ноября 2008

Посмотрите на RAP! http://www.eclipse.org/rap/

...