Skip to main content

Портлеты. Жизненный цикл.

Смесь из wiki, http://cloud-cuckoo.com.ua/node/111http://cloud-cuckoo.com.ua/node/114 и других источников.

Определения

Портал - веб-приложение, которое обычно обеспечивает персонализацию, аутентификацию, предоставляют различную информацию (возможно из разных источников) в едином виде (и на одной странице). Портал может быть персонализирован: отображать разную информацию (или отображать по-разному) в зависимости от пользователя. Страницы портала содержат набор портлетов.

Портлет - подключаемый, сменный компонент пользовательского интерфейса веб-портала. Благодаря существующим стандартам, разработчики могут создавать портлеты, встраиваемые в любой портал, следующий этим стандартам. Портлет управляется Портлет Контейнером: он обрабатывает запросы и генерирует динамический контент.

Портлет Контейнер выполняет портлеты, предоставляет им среду для выполнения, управляет жизненным циклом портлета, предоставляет хранилище для настроек портлета. Портлет Контейнер получает запросы от Портала на выполнение запроса конкретным Портлетом с портала.

Жизненный цикл

Каждый портлет имеет четыре метода, описывающих его жизненный цикл:
  • init(PortletConfig config) - вызывается один раз, сразу после того, как создается объект нового портлета. Может быть использован для выполнения изначальных заданий. Этот метод сродни одноименному методу сервлета. PortletConfig представляет конфигурационные данные только для чтения, описанные в дескрипторе портлета (portlet.xml). 
  • processAction(ActionRequest request, ActionResponse response) - вызывается в ответ на различные действия пользователя, такие как клик по ссылке или отправка формы. В этом методе, портлет может вызывать компоненты бизнес логики, такие как JavaBeans. Интерфейсы ActionRequest и ActionResponse унаследованы от PortletRequest и PortletResponse. В методе processAction портлет может модифицировать свое собственное состояние также, как и информацию о портлете.
  • render(RenderRequest request, RenderResponse response) - следует за processAction() в цепочке выполнения методов. Генерирует разметку, которая будет доступна пользователю портала. 
  • destroy() - последний метод в жизненном цикле портлета, вызываемый прямо перед вызовом сборщика мусора и обеспечивает последний шанс для освобождения ресурсов портлета.


Обработка запросов

После того, как портлет был инициализирован, портлет контейнер может обратиться к портлету для обработки запроса.
Предположим, у вас есть два портлета, названные A и B, на одной странице. Портлет A может получить запрос в двух случаях:
  1. Пользователь нажал на ссылку или отослал форму на портлете А. В таком случае, портлет А должен производить какие-то действия, как выполнение некоторой бизнес логики и генерации разметки. Это называется action processing, поскольку пользователь производит какое-то действие над портлетом А.
  2. Пользователь производит действие над портлетом В, и как результат, вся страница должна быть перегенерирована заново. Заметьте, что когда пользователь производит действия, браузер не только обновит контент портлета В, но запросит полную перерисовку страницы. В этом случае, портлет А не должен выполнять никакой бизнес логики, а вместо того он должен перегенерировать разметку. Эта процедура называется render phase.
Интерфейс портлета содержит два метода для обработки запросов:
  • processAction(ActionRequest actionRequest, ActionResponse actionResponse): Контейнер портлета будет вызывать этот метод, когда какое-то действие будет произведено над портлетом. Оно передаст информацию, отосланную пользователем, такую как значения, введенные в форму, объект ActionRequest. Также можно использовать ActionResponse для редиректа пользователя на новую страницу.
  • render(RenderRequest renderRequest, RenderResponse renderResponse): Этот метод аналогичный методу serivce() в Servlet API. Он вызывается в render phase, но его нельзя переопределить напрямую. Вместо этого, необходимо переопределить методы doView(), doHelp(), doEdit(). render() метод определит режим, запрашиваемый пользователем и вызовет нужный метод. Контейнер портлета передаст RenderRequest и RenderResponse в этот метод. Результат возвращаем как в сервлете: renderResponse.getWriter(). Но RenderRequest не берет значения из html напрямую. Вместо этого он идет в PortletSession: renderRequest.getPortletSession().getAttribute("username")

Взаимодействие между портлетами

Возможны 3 способа:
  • Данные можно хранить в сессии в application scope
  • Используя public render параметры можно разделять render состояние между портлетами
  • Портлеты умеют получать и посылать portlet events

Comments

Popular posts from this blog

Блочный, строчный, ...

Сборник советов: 1. Прижать элемент к нижнему краю контейнера: 2 . Две колонки: 3 . Что означает символ ">" в селекторе? Означает, что будут выбраны только прямые потомки. По-умному, direct descendant combinator. Иными словами, если есть: То "div a {color: blue;}" изменит цвет всех ссылок, а "div > a {color: blue;}" - только первой и третьей. 4 . TODO

Hibernate

1. Hibernate Session . Javadoc называет её главным интерфейсом между java-приложением и Hibernate. Иногда её называют единицей работы или логической транзакцией. Основная функция сессии - обеспечить операции создания, чтения, удаления объектов. Объекты могут находиться в одном из 3 состояний (см. 2) Сессия создается с помощью SessionFactory. SessionFactory знает конфигурацию ORM, её внутреннее состояния immutable. При вызове Configuration().configure() загружается файл hibernate.cfg.xml. После того, как конфигурация загружена, можно изменить настройки программно. Данные корректировки возможны только до создания экземпляра фабрики сессий. // Initialize the Hibernate environment Configuration cfg = new Configuration().configure(); // Create the session factory ServiceRegistryBuilder srb = new ServiceRegistryBuilder(); ServiceRegistry sr = srb.applySettings(cfg.getProperties()).buildServiceRegistry(); SessionFactory factory = cfg.buildSessionFactory(sr); // Obtain the new session obj...

Первые шаги в Selenium

Цель расплывчата: понять и сделать хоть что-нибудь =) Selenium Selenium - группа продуктов. Отличное описание в статье Что такое Selenium? Selenium IDE - плагин для Firefox, позволяет записать тест, выполняя действия в браузере. Казалось бы, Selenium WebDriver должен дать больше возможностей: всё таки не из графического интерфейса тесты пишем, а с помощью языка программирования, но интересная мысль в другой статье того же автора  Что такое Selenium WebDriver? : "... WebDriver не имеет прямого отношения к тестированию. Он всего лишь предоставляет автотестам доступ к браузеру. На этом его функции заканчиваются.Структурирование, группировку и запуск тестов, а также генерацию отчётов о тестировании, обеспечивает фреймворк тестирования, такой как JUnit или TestNG для Java, .."  Локаторы Выбрать элемент на странице можно используя локаторы. Локаторы (в Selenium IDE в поле target) используют DOM, XPath или CSS (или просто ищут по id/name). Полезное: XPath: XML Path La...