Спецификация Java-портлетов — Википедия

Спецификация Java-портлетов (англ. Java Portlet Specification) описывает модель взаимодействия между портлетом и портлетным контейнером. Эта спецификация очень похожа на спецификацию Java-сервлетов (англ. Java Servlet Specification) и, фактически, разработана на основе Java Servlet Specification версии 2.3 и Java Server Pages версии 1.2[1].

Первая версия спецификации Java-портлетов (V1.0) была разработана в рамках Java Community Process, как ответ на запрос на спецификацию JSR 168[1]. Запрос был инициирован представителями компаний IBM и Sun Microsystems, Inc. в январе 2002 года. Финальная версия спецификации была представлена 27 октября 2003 года[2].

Спецификация предоставляет описание базовой программной модели портлета, в том числе:

  • две фазы жизненного цикла портлета: фазу действий и фазу рендеринга, что позволяет использовать шаблон проектирования Model-View-Controller
  • режимы портлета, при помощи которых портал может указать портлету, какую задачу тот должен выполнить и какое содержание отобразить
  • параметры отображения, описывающие место на странице, в котором будет размещен контент, генерируемый портлетом
  • модель данных портлета, позволяющая хранить информацию о виде в параметрах отображения, сессионные данные в параметрах сессии портлета, а пользовательские настройки в параметрах самого портлета
  • компоновка в пакеты, что подразумевает группировку нескольких портлетов и артефактов Java EE, необходимых для функционирования этих портлетов, в единое портлетное приложение, которое можно установить на сервер приложений одним блоком

В 2005 году представителем компании IBM был инициирован запрос на спецификацию JSR 286, в котором предлагалось создать новую версию спецификации Java-портлетов для согласования с концепциями J2EE версии 1.4, а также другими JSR (например, c JSR 188) и спецификацией WSRP второй версии.[3]. Предыдущая версия спецификации JSR 168 никак не затрагивала проблемы интеграции, определяя только компонентную модель. Поэтому вопросы интеграции и межпортлетной коммуникации предлагалось специфицировать в новой версии. Работы над второй версией (V2.0) продлились до 12 июня 2008 года, когда её финальный релиз был утверждён экспертной группой, включающей в себя всех значимых разработчиков порталов, как коммерческих, так и с открытым кодом, разработчиков средств интеграции портлетов и разработчиков сред разработки портлетов[4].

Вторая версия спецификации привносит целый ряд новых возможностей для разработчиков портлетов, в том числе:

  • два способа взаимодействия между различными портлетами:
    • через систему событий, что реализовано моделью слабой связи вида «публикатор-подписчик», когда один портлет может получить извещение о выполнении другим портлетом каких-либо действий
    • через публикуемые параметры отображения, что позволяет совместно использовать параметры запроса в различных портлетах или других артефактах
  • возможность использования динамически генерируемых ресурсов посредством ресурсных URL, поддерживающих несколько уровней кеширования
  • полноценное использование AJAX, с прохождением запроса непосредственно через портальный сервлет, и, как следствие, получением полного доступа к контексту портлета — параметрам отображения, режиму работы, состоянию окна, настройкам портлета и портлетной сессии
  • возможность вызова forward и полноценного include из всех методов жизненного цикла портлета
  • расширенный список слушателей жизненного цикла, по сравнению с определённым в Java Servlet Specification V2.5
  • новые фильтры и слушатели (англ. listeners) портлетов
  • управляемые портлетом режимы, которые не определяются в портале, а управляются непосредственно портлетом
  • опции времени выполнения контейнера портлетов

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

В 2013 году работа над спецификацией была продолжена, и в апреле 2017 года была выпущена версия 3.0. Основными её особенностями стали:

  • ресурсные зависимости;
  • явной состояние рендеринга;
  • интеграция с CDI 1.2;
  • поддержка Servlet 3.1;
  • Portlet Hub & XHR IPC;
  • интеграция с FacesBridge (JSR 378).

Обратная совместимость

[править | править код]

Третья версия бинарно совместима со второй, которая, в свою очередь, бинарно обратно совместима с первой версией и даже сохраняет совместимость поведения всех методов API. Это значит, что все портлеты, разработанные в рамках версии 1.0, могут быть запущены без всяких изменений в контейнере версии 2.0[4].

Примечания

[править | править код]
  1. 1 2 David DeWolf. Introduction to the Java Portlet Specification (англ.). developer.com (8 сентября 2005). Дата обращения: 24 апреля 2013. Архивировано 1 мая 2013 года.
  2. JSR 168: Portlet Specification Архивная копия от 27 октября 2020 на Wayback Machine (англ.)
  3. Java Specification Requests — detail JSR# 286 Архивная копия от 8 июня 2012 на Wayback Machine (англ.)
  4. 1 2 Стефан Хеппер. Что нового в Java Portlet Specification V2.0 (JSR 286)? developerWorks. IBM (3 апреля 2009). Дата обращения: 25 апреля 2013. Архивировано 1 мая 2013 года.