Портлет-контейнер JSR-168, JSR-286, WSRP Alexey Zavizionov
Servlet/JSP HTML страницы Интегрирование  веб-сервисов Эволюция сайтов. 1 3 2
Пользователю нужна иформация от  разных  источников. Представленная в едином  и  настраиваемом интерфейсе.
От  простого  сайта...
до  WebOS  портала.
...и разных  систем управления  сайтами*? СКОЛЬКО  ссылок   в интернете ...? *  CMS – content management system Многообразие.
Тысячи  разных CMS систем Один  триллион уникальных  ссылок в индексе Google* Десятки  Java порталов Результат эволюции. *  25.07.2008 1 3 2
Основная  проблема ? Выбираем портал.
1998 – 2002 У каждого портала  свой  API. Что же дальше?
JSR-168 JCP cтандарт  первой   портлетной спецификации. Jan. 2002 –  27 Oct. 2003
Expert group of JSR-168 * *  сокращенный список
Определения Портлет контейнер  - содержит  портлеты и управляет  их жизненным циклом Портлет  - приложение, которое предоставляет определенную  часть контента Портал  - веб приложение для  предоставления персонализации,  аутентификации и контент агрегации 1 3 2
Аутентификация Агрегация Персонализация Описание Portlet 1. 1 3 2 Кастомизация 4
Динамические ресурсы AJAX Взаимодействие портлетов Q: Что ещё не хватает? 1 2
JSR-286 JCP cтандарт  второй   портлетной спецификации. Nov. 2005 –  12 Jun. 2008
Expert group of JSR-286 * *  сокращенный список
События Взаимодействие портлетов * Публичные параметры Описание Portlet 2. 1 3 2 Сессии 4 Ресурсы 5 *  IPC - inter portlet communication Фильтры 6
eXo  Portlet Container
Концепция
Портлеты и сервлеты Отличия Сходства Экстра функциональность 1 3 2 P&S : Portlets and Servlets
P&S: Сходства Портлеты - java технология, базирующаяся на веб компонентах. Портлетами и их жизненным циклом управляет специальный контейнер. Портлеты производят динамический контент. Взаимодействуют с веб клиентами через парадигму запрос/ответ.
P&S: Отличия Только часть разметки. Вызываются через URLs сконструированные portlet API. Взаимодействие через портал. Обработка: action, event, render и resource. Предопределенные portlet mode и window state. Несколько на одной странице.
P&S:  Экстра функциональность Портлеты могут сохрнять persistent configuration. Портлеты имеют доступ к user profile. Могут сохранять временную информацию в двух областях видимости: application-wide scope и portlet private scope. Могут отправлять и получать события (events).
Архитектура
Архитектура
Конфигурация: portlet.xml Минимальная конфигурация портлетного приложения. <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> < portlet-app   xmlns=&quot; http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd &quot; xmlns:xsi=&quot; http://www.w3.org/2001/XMLSchema-instance &quot; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd  http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd&quot;  version=&quot;1.0&quot;> < portlet > < portlet-name >HelloWorldPortlet</portlet-name> < portlet-class > org.exoplatform.HelloWorldPortlet </portlet-class> < supports > < mime-type >text/html</mime-type> </supports> </portlet> </portlet-app>
Конфигурация: web.xml <listener> <listener-class> org.exoplatform.services.portletcontainer.impl.servlet. PortletApplicationListener </listener-class> </listener> <servlet> <servlet-name>PortletWrapper</servlet-name> <servlet-class> org.exoplatform.services.portletcontainer.impl.servlet . ServletWrapper </servlet-class> </servlet> <servlet-mapping> <servlet-name>PortletWrapper</servlet-name> <url-pattern> /PortletWrapper </url-pattern> </servlet-mapping>
Жизненный цикл processAction()‏ init()‏ processEvent() * 1 3 2 render()‏ 4 serveResource() * 5 destroy()‏ 6 *  в JSR-286
Портлет API PortletRequest GenericPortlet PortletResponse 1 3 2
API: GenericPortlet
API: PortletRequest
API: PortletResponse
Архитектура взаимодействия Event Action Resource 1 3 2
Process ACTION
Process EVENT
Serve RESOURCE
Попробуем в действии Event   пример. Action   пример. Render   пример.
Пример: Render public class HelloWorldPortlet extends GenericPortlet { public void  doView (RenderRequest renderRequest, RenderResponse renderResponse)‏ throws PortletException, IOException { renderResponse.setContentType(&quot;text/html; charset=UTF-8&quot;); PrintWriter w = renderResponse.getWriter(); w.println(&quot;Hello, World!&quot;); } }
Пример: Action public class HelloWorldPortlet extends GenericPortlet { public void  processAction (ActionRequest actionRequest, ActionResponse actionResponse)‏ throws PortletException, IOException { actionRequest.setAttribute(&quot;test_attribute&quot;, &quot;test&quot;); actionResponse.setRenderParameter(&quot;test_render_param&quot;, &quot;168&quot;); } }
Пример: Event public void  processAction (ActionRequest actionRequest, ActionResponse actionResponse)‏ throws PortletException, IOException { MyEventPub sampleAddress = new MyEventPub(); sampleAddress.setStreet(&quot;myStreet&quot;); sampleAddress.setCity(&quot;myCity&quot;); actionResponse.setEvent (new QName(&quot;MyEventPub&quot;), sampleAddress); } public void  processEvent (EventRequest req, EventResponse resp)‏ throws PortletException, IOException { Event event =  req.getEvent() ; MyEventPub sampleAddress = (MyEventPub) event.getValue(); resp.setPortletMode(PortletMode.EDIT); } }
Пример: Resource public void  serveResource (ResourceRequest request, ResourceResponse response) throws PortletException, IOException { String goal = request.getParameter(&quot;goal&quot;); if (goal != null && goal.equals(&quot;image&quot;)) { response.setContentType(&quot; image/jpeg &quot;); Graphics2D graphics; OutputStream stream =  response.getPortletOutputStream() ; JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(stream); BufferedImage bi = new BufferedImage(...); ... encoder.encode(bi); } else { response.setContentType(&quot; text/html ; charset=utf-8&quot;); PrintWriter w =  response.getWriter() ; w.println(&quot;Here's the markup in serveResource&quot;); } }
Пример: Dispatcher private static final String VIEW_PAGE = &quot;/WEB-INF/jsp/view.jsp&quot;; public void  doView (RenderRequest request, RenderResponse response)‏ throws PortletException, IOException { response.setContentType(&quot;text/html&quot;); getPortletContext (). getRequestDispatcher (VIEW_PAGE). include (request, response); }
Пример: Taglib <%@taglib uri=&quot;http://java.sun.com/portlet_2_0&quot; prefix=&quot;portlet&quot;%> < portlet:defineObjects  /> <br/> < portlet:renderURL  var=&quot;renderURL&quot;/> <br/> Link to render: <a href=&quot;<%=renderURL %>&quot;>here</a> WindowState is <br/> <%=  renderRequest.getWindowState() .toString()%> <br/> PortletMode is <br/> <%=  renderRequest.getPortletMode() .toString()%> <br/>
Пример: Preferences ---portlet.xml------------------------------------------------------------------------------- < portlet-preferences > <preference> <name>message</name> <value>Defaut message</value> <read-only>false</read-only> </preference> </portlet-preferences> ---PreferencesPortlet.java--------------------------------------------------------------- PortletPreferences prefs =  actionRequest.getPreferences() ; prefs.setValue(&quot;message&quot;, &quot;My New Message&quot;); prefs.store(); ... String message = prefs.getValue(&quot;message&quot;, “&quot;); -------------------------------------------------------------------------------------------------
Пример: Session portletRequest.getPortletSession(); setAttribute(name, value, PortletSession.APPLICATION_SCOPE); setAttribute(name, value, PortletSession.PORTLET_SCOPE);
Пример: Public parameters <portlet-app ... version=&quot;2.0&quot;> <portlet> <description xml:lang=&quot;EN&quot;>PublicParameterPortlet</description> <portlet-name>PublicParamterPortlet</portlet-name> ... < supported-public-render-parameter > country </supported-public-render-parameter> </portlet> < public-render-parameter > <identifier>country</identifier> <name>country</name> </public-render-parameter> </portlet-app>
Пример: Cache Expiration ... <expiration-cache>10</expiration-cache> ... Validation response.getCacheControl().setETag(someID);
WSRP WSRP - удаленные портлеты
Итог
Ресурсы www.exoplatform.com Документация wiki.exoplatform.org Просмотр исходников fisheye.exoplatform.org Блог blog.exoplatform.org jira.exoplatform.org builder.exoplatform.org

More Related Content

PPT
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
PDF
Как мы делаем модули PHP в Badoo – Антон Довгаль
PDF
Чуть сложнее чем Singleton: аннотации, IOC, АОП
PPT
Средства разработки web приложений (Web frameworks)
PDF
Zend Framework и мультиязычность
PDF
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
PDF
Релиз PHP7 - что нас ждет в октябре 2015
PDF
Component Inspector
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Как мы делаем модули PHP в Badoo – Антон Довгаль
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Средства разработки web приложений (Web frameworks)
Zend Framework и мультиязычность
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Релиз PHP7 - что нас ждет в октябре 2015
Component Inspector

What's hot (10)

PPT
Perl Debugger и mod_perl
ODP
Документирование исходных текстов (javadoc)
PDF
Zend framework 2
PDF
Контроль качества верстки или как начать делать Makeup
PPTX
Enterprise flex pure mvc, slides, russian
PDF
Лекция #6. Введение в Django web-framework
PPT
ZFConf 2010: Zend Framework and Multilingual
PPT
бегун
PPTX
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Perl Debugger и mod_perl
Документирование исходных текстов (javadoc)
Zend framework 2
Контроль качества верстки или как начать делать Makeup
Enterprise flex pure mvc, slides, russian
Лекция #6. Введение в Django web-framework
ZFConf 2010: Zend Framework and Multilingual
бегун
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Ad

Viewers also liked (11)

PDF
Grafico semanal del ibex 35 para el 30 03 2012
DOCX
Prueba guia fechas
PPT
The Metropolitan - Reaching New Heights in Mixed-Income and Mixed-Use Develop...
PPTX
Custom connector development using mule DevKit
PDF
Next Ventures' Corporate Brochure 2016
DOC
Instrument Engg Resume
PPTX
Stored procedure in Mule
PPTX
Mule high availability (ha) cluster
PPTX
Living and non living things
PPT
Anthony Michael Profile
PPTX
The plant kingdom
Grafico semanal del ibex 35 para el 30 03 2012
Prueba guia fechas
The Metropolitan - Reaching New Heights in Mixed-Income and Mixed-Use Develop...
Custom connector development using mule DevKit
Next Ventures' Corporate Brochure 2016
Instrument Engg Resume
Stored procedure in Mule
Mule high availability (ha) cluster
Living and non living things
Anthony Michael Profile
The plant kingdom
Ad

Similar to The Best Portlet (20)

PPT
Alexander manuhin selenium_php_v2.0
PDF
Превышаем скоростные лимиты с Angular 2
PDF
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
ODP
Building corporate portals with liferay JEEConf 2011
PDF
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
PPT
Eugene Lisitsky Web Sockets
PDF
Phalcon - самый быстрый PHP Framework
PDF
Aspect Oriented Approach
PPT
XForms новое поколение веб-форм
PDF
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
PDF
JavaScript Базовый. Занятие 02.
PDF
servlets.pdf
PPT
Обзор платформы B4
ODP
Yandex Lego олег оболенский
ODP
анализ кода: от проверки стиля до автоматического тестирования
PPT
RESTful Architechture (Highload++ 2008)
PPT
!2hl++2008 Restful Architechture
PPT
Eugene Lisitsky Web Sockets
PPT
Web sockets
Alexander manuhin selenium_php_v2.0
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Building corporate portals with liferay JEEConf 2011
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Eugene Lisitsky Web Sockets
Phalcon - самый быстрый PHP Framework
Aspect Oriented Approach
XForms новое поколение веб-форм
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
JavaScript Базовый. Занятие 02.
servlets.pdf
Обзор платформы B4
Yandex Lego олег оболенский
анализ кода: от проверки стиля до автоматического тестирования
RESTful Architechture (Highload++ 2008)
!2hl++2008 Restful Architechture
Eugene Lisitsky Web Sockets
Web sockets

The Best Portlet

  • 2. Servlet/JSP HTML страницы Интегрирование веб-сервисов Эволюция сайтов. 1 3 2
  • 3. Пользователю нужна иформация от разных источников. Представленная в едином и настраиваемом интерфейсе.
  • 4. От простого сайта...
  • 5. до WebOS портала.
  • 6. ...и разных систем управления сайтами*? СКОЛЬКО ссылок в интернете ...? * CMS – content management system Многообразие.
  • 7. Тысячи разных CMS систем Один триллион уникальных ссылок в индексе Google* Десятки Java порталов Результат эволюции. * 25.07.2008 1 3 2
  • 8. Основная проблема ? Выбираем портал.
  • 9. 1998 – 2002 У каждого портала свой API. Что же дальше?
  • 10. JSR-168 JCP cтандарт первой портлетной спецификации. Jan. 2002 – 27 Oct. 2003
  • 11. Expert group of JSR-168 * * сокращенный список
  • 12. Определения Портлет контейнер - содержит портлеты и управляет их жизненным циклом Портлет - приложение, которое предоставляет определенную часть контента Портал - веб приложение для предоставления персонализации, аутентификации и контент агрегации 1 3 2
  • 13. Аутентификация Агрегация Персонализация Описание Portlet 1. 1 3 2 Кастомизация 4
  • 14. Динамические ресурсы AJAX Взаимодействие портлетов Q: Что ещё не хватает? 1 2
  • 15. JSR-286 JCP cтандарт второй портлетной спецификации. Nov. 2005 – 12 Jun. 2008
  • 16. Expert group of JSR-286 * * сокращенный список
  • 17. События Взаимодействие портлетов * Публичные параметры Описание Portlet 2. 1 3 2 Сессии 4 Ресурсы 5 * IPC - inter portlet communication Фильтры 6
  • 18. eXo Portlet Container
  • 20. Портлеты и сервлеты Отличия Сходства Экстра функциональность 1 3 2 P&S : Portlets and Servlets
  • 21. P&S: Сходства Портлеты - java технология, базирующаяся на веб компонентах. Портлетами и их жизненным циклом управляет специальный контейнер. Портлеты производят динамический контент. Взаимодействуют с веб клиентами через парадигму запрос/ответ.
  • 22. P&S: Отличия Только часть разметки. Вызываются через URLs сконструированные portlet API. Взаимодействие через портал. Обработка: action, event, render и resource. Предопределенные portlet mode и window state. Несколько на одной странице.
  • 23. P&S: Экстра функциональность Портлеты могут сохрнять persistent configuration. Портлеты имеют доступ к user profile. Могут сохранять временную информацию в двух областях видимости: application-wide scope и portlet private scope. Могут отправлять и получать события (events).
  • 26. Конфигурация: portlet.xml Минимальная конфигурация портлетного приложения. <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> < portlet-app xmlns=&quot; http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd &quot; xmlns:xsi=&quot; http://www.w3.org/2001/XMLSchema-instance &quot; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd&quot; version=&quot;1.0&quot;> < portlet > < portlet-name >HelloWorldPortlet</portlet-name> < portlet-class > org.exoplatform.HelloWorldPortlet </portlet-class> < supports > < mime-type >text/html</mime-type> </supports> </portlet> </portlet-app>
  • 27. Конфигурация: web.xml <listener> <listener-class> org.exoplatform.services.portletcontainer.impl.servlet. PortletApplicationListener </listener-class> </listener> <servlet> <servlet-name>PortletWrapper</servlet-name> <servlet-class> org.exoplatform.services.portletcontainer.impl.servlet . ServletWrapper </servlet-class> </servlet> <servlet-mapping> <servlet-name>PortletWrapper</servlet-name> <url-pattern> /PortletWrapper </url-pattern> </servlet-mapping>
  • 28. Жизненный цикл processAction()‏ init()‏ processEvent() * 1 3 2 render()‏ 4 serveResource() * 5 destroy()‏ 6 * в JSR-286
  • 29. Портлет API PortletRequest GenericPortlet PortletResponse 1 3 2
  • 37. Попробуем в действии Event пример. Action пример. Render пример.
  • 38. Пример: Render public class HelloWorldPortlet extends GenericPortlet { public void doView (RenderRequest renderRequest, RenderResponse renderResponse)‏ throws PortletException, IOException { renderResponse.setContentType(&quot;text/html; charset=UTF-8&quot;); PrintWriter w = renderResponse.getWriter(); w.println(&quot;Hello, World!&quot;); } }
  • 39. Пример: Action public class HelloWorldPortlet extends GenericPortlet { public void processAction (ActionRequest actionRequest, ActionResponse actionResponse)‏ throws PortletException, IOException { actionRequest.setAttribute(&quot;test_attribute&quot;, &quot;test&quot;); actionResponse.setRenderParameter(&quot;test_render_param&quot;, &quot;168&quot;); } }
  • 40. Пример: Event public void processAction (ActionRequest actionRequest, ActionResponse actionResponse)‏ throws PortletException, IOException { MyEventPub sampleAddress = new MyEventPub(); sampleAddress.setStreet(&quot;myStreet&quot;); sampleAddress.setCity(&quot;myCity&quot;); actionResponse.setEvent (new QName(&quot;MyEventPub&quot;), sampleAddress); } public void processEvent (EventRequest req, EventResponse resp)‏ throws PortletException, IOException { Event event = req.getEvent() ; MyEventPub sampleAddress = (MyEventPub) event.getValue(); resp.setPortletMode(PortletMode.EDIT); } }
  • 41. Пример: Resource public void serveResource (ResourceRequest request, ResourceResponse response) throws PortletException, IOException { String goal = request.getParameter(&quot;goal&quot;); if (goal != null && goal.equals(&quot;image&quot;)) { response.setContentType(&quot; image/jpeg &quot;); Graphics2D graphics; OutputStream stream = response.getPortletOutputStream() ; JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(stream); BufferedImage bi = new BufferedImage(...); ... encoder.encode(bi); } else { response.setContentType(&quot; text/html ; charset=utf-8&quot;); PrintWriter w = response.getWriter() ; w.println(&quot;Here's the markup in serveResource&quot;); } }
  • 42. Пример: Dispatcher private static final String VIEW_PAGE = &quot;/WEB-INF/jsp/view.jsp&quot;; public void doView (RenderRequest request, RenderResponse response)‏ throws PortletException, IOException { response.setContentType(&quot;text/html&quot;); getPortletContext (). getRequestDispatcher (VIEW_PAGE). include (request, response); }
  • 43. Пример: Taglib <%@taglib uri=&quot;http://java.sun.com/portlet_2_0&quot; prefix=&quot;portlet&quot;%> < portlet:defineObjects /> <br/> < portlet:renderURL var=&quot;renderURL&quot;/> <br/> Link to render: <a href=&quot;<%=renderURL %>&quot;>here</a> WindowState is <br/> <%= renderRequest.getWindowState() .toString()%> <br/> PortletMode is <br/> <%= renderRequest.getPortletMode() .toString()%> <br/>
  • 44. Пример: Preferences ---portlet.xml------------------------------------------------------------------------------- < portlet-preferences > <preference> <name>message</name> <value>Defaut message</value> <read-only>false</read-only> </preference> </portlet-preferences> ---PreferencesPortlet.java--------------------------------------------------------------- PortletPreferences prefs = actionRequest.getPreferences() ; prefs.setValue(&quot;message&quot;, &quot;My New Message&quot;); prefs.store(); ... String message = prefs.getValue(&quot;message&quot;, “&quot;); -------------------------------------------------------------------------------------------------
  • 45. Пример: Session portletRequest.getPortletSession(); setAttribute(name, value, PortletSession.APPLICATION_SCOPE); setAttribute(name, value, PortletSession.PORTLET_SCOPE);
  • 46. Пример: Public parameters <portlet-app ... version=&quot;2.0&quot;> <portlet> <description xml:lang=&quot;EN&quot;>PublicParameterPortlet</description> <portlet-name>PublicParamterPortlet</portlet-name> ... < supported-public-render-parameter > country </supported-public-render-parameter> </portlet> < public-render-parameter > <identifier>country</identifier> <name>country</name> </public-render-parameter> </portlet-app>
  • 47. Пример: Cache Expiration ... <expiration-cache>10</expiration-cache> ... Validation response.getCacheControl().setETag(someID);
  • 48. WSRP WSRP - удаленные портлеты
  • 50. Ресурсы www.exoplatform.com Документация wiki.exoplatform.org Просмотр исходников fisheye.exoplatform.org Блог blog.exoplatform.org jira.exoplatform.org builder.exoplatform.org