© 2011 IBA CZ, s.r.o. Vývoj portletů František Hartman Aleš Rybák IBA CZ, s.r.o. Vývoj portletů © 2011 IBA CZ, s.r.o.2 Agenda  Úvod do vývoje portletů  Portletové specifikace  JSR-168 / JSR-286  API objects  Tag library  Praktické cvičení  Jednoduchý portlet Využití portálu © 2011 IBA CZ, s.r.o.3 Integrační platforma  Integrace existujících aplikací Vývojová platforma  Standardizované prostředí • Správa uživatelů, rolí, oprávnění, autorizace, autentizace, single sign-on • Správa vzhledu, rozložení • Hierarchie prostorů a stránek • Cache • Personalizace stránek • Ukládání nastavení Kdy portál nepoužít? Portletové standardy © 2011 IBA CZ, s.r.o.4 Proč? - situace před 10 lety  Různí dodavatelé portálů mají různá API  Není možná spolupráce mezi portlety a různými portálovými servery  Poskytovatelé služeb musí implementovat několik různých portletů pro různé portály  Zákazníci jsou “uzamčeni” do konkrétního portálového řešení  Neexistuje jednoduchá cesta jak připojit aplikaci do portálu. Dnes  Standardy JSR-168 a JSR-286 Portlety 1.0 - JSR-168 © 2011 IBA CZ, s.r.o.5 Portletový standard pro lokální java portlety  Dokončeno říjen 2003  http://jcp.org/en/jsr/detail?id=168 Cíle  Jednoduchý programovací model  Přenositelnost  Využití a kooperace s technologiemi J2EE  Interoperabilita s dalšími Java technologiemi Portlety 2.0 - JSR-286 © 2011 IBA CZ, s.r.o.6 Druhá verze standardu  Dokončeno říjen 2008  http://jcp.org/en/jsr/detail?id=286 Rozšíření JSR-168  Zpětná kompatibilita  Meziportletová komunikace • Veřejné parametry (public render parameters) • Události (events)  Poskytování obsahu • Obrázky, datové soubory • AJAX  Filtry  Zjednodušení integrace webových rámců Portlety 2.0 - JSR-286 © 2011 IBA CZ, s.r.o.7 Rozsah specifikací  Portletové API  Portletový kontejner  Kontrakt mezi API a kontejnerem  Struktura aplikace, způsob nasazení • Deskriptory Portlety vs. Servlety  Portlety jsou webové komponenty  PortletAPI je vytvořeno podle Servlet API  Portlety oddělují zpracování požadavku a zobrazení výsledku  Portlety mají stav (portletový mód, stav okna, render parametry, preference..)  Portlety poskytují pouze fragmenty zatímco servlety se typicky starají o vykreslení celé stránky Portletové aplikace Portletová aplikace  Sada portletů a dalších zdrojů sdílejících stejný context  Zabalená jako WAR soubor  Instalovaná prostřednictvím portálu Deskriptory  web.xml • Nastavení webové aplikace • Servlety a JSP stránky • Bezpečnostní role • ...  portlet.xml • Obsahuje informace týkající se portletů  Další „vendor specific“ deskriptory • Např. liferay-portlet.xml – css, javascript © 2008 IBA CZ, s.r.o.8 Portletové aplikace © 2011 IBA CZ, s.r.o.9 portlet.xml  Obsahuje konfigurační informace přímo pro portál  Podporované módy a stavy oken  Podporované jazyky  Popis a označení portletu  Konfigurace preferencí  Veřejné parametry  Události  Filtry  A další Životní cyklus portletu © 2011 IBA CZ, s.r.o.10 Životní cyklus portletu © 2011 IBA CZ, s.r.o.11 Použití portletu © 2011 IBA CZ, s.r.o.12 Použití portletu © 2011 IBA CZ, s.r.o.13 GenericPortlet  Standardní implementace rozhraní Portlet  Abstraktní třída, jenž je nejčastěji rozšiřována  Vlastní portlety by měly přepisovat • doView() pro zpracování požadavků ve VIEW módu • processAction() pro zpracování požadavků a změnu stavu portletu • doEdit() • doHelp() • init() a destroy() pro práci se zdroji  Běžně se nepřepisují metody • render() a • doDispatch(), která volá doView(), doEdit() nebo doHelp() na základě požadovaného portletového módu Stav portletu © 2011 IBA CZ, s.r.o.14 Stav okna portletu (window state)  Stav okna definuje, jak bude portlet zobrazen na stránce • Normal – jako součást stránky • Maximized – daný portlet je na stránce sám nebo zabírá většinu plochy • Minimized – většinou pouze záhlaví portletu • Existují další stavy specifické pro konkrétní portály Portletové módy (portlet mode)  Portletové módy umožňují zobrazení různých pohledů • View – základní mód • Edit – většinou pro úpravu uživatelských nastavení • Help – zobrazení nápovědy k portletu • Existují další módy specifické pro konkrétní portály – Configure – administrace portletu Významné objekty PortletConfig  Poskytuje portletu jeho nastavení z portlet.xml PortletContext  Definuje pohled portletu na portletový kontejner  Inicializační parametry jsou pouze ke čtení a nastavují se v deskriptoru web.xml  Důležité metody  getRequestDispatcher(java.lang.String path)  getInitParameter(java.lang.String name)  getInitParameterNames() © 2008 IBA CZ, s.r.o.15 Významné objekty © 2011 IBA CZ, s.r.o.16 PortletRequest  Vytvářeny a spravovány portletovým kontejnerem  Předávány jako argument protletovým metodám  Jsou využívány pro komunikaci mezi portletovým kontejnerem a portletem a zároveň k předávání dat v rámci zpracování požadavku  Data • Parametry • Atributy • Relace (sezení, session) • Preference • Informace o uživateli – getRemoteUser() - login uživatele (nebo id) – Atribut USER_INFO Map userInfo = (Map)request.getAttribute(PortletRequest.USER_INFO); String givenName = (String)userInfo.get(“user.name.given”); Významné objekty © 2011 IBA CZ, s.r.o.17 PortletResponse  Rozhraní pro odesílání odpovědí na požadavek  encodeUrl() - Vrací zakódované URL požadovaného zdroje (např. servlet, JSP, obrázky nebo jiný statický obsah) RenderResponse  create*URL() - vytváření URL ActionResponse  sendRedirect()  setPortletMode()  setWindowState()  setRenderParameter()  setRenderParameters() • Parametry viditelné v processAction() se automaticky nepropagují do render() Významné objekty © 2011 IBA CZ, s.r.o.18 PortletPreferences  Perzistentní úložiště dat spravované kontejnerem  Výchozí hodnoty jsou definované v portlet.xml  Pro každé portletové okno se nastavují samostatně  Pro uložení dat je zapotřebí volat metodu store() • Nelze volat během render fáze PortletSession  Úložiště pro informace déle než na dobu jednoho požadavku  Session se vytváří pro uživatele pro každou portletovou aplikaci  Pozor na velikost objektů, které do session ukládáte – velké objekty mohou mít dopad na výkonnost  getAttribute(String name)  getAttribute(String name, int scope)  setAttribute(String name, Object value)  setAttribute(String name, Object value, int scope) • APPLICATION_SCOPE a PORTLET_SCOPE Data se kterými portlety pracují © 2008 IBA CZ, s.r.o.19 Knihovna značek (Tag library) • Značky pro – Generování odkazů – Přístup k objektům v request a response • Definované značky – defineObjects – renderURL – actionURL – resourceURL – namespace – param © 2009 IBA CZ, s.r.o.20 Knihovna značek (Tag library) Vytváření odkazů Show detail Značka  Vrací jednoznačné označení portletu  Používá se pro odlišení entit na stránce v případě, že je na ní více stejných portletů  Využití  Javascript  Element ID © 2009 IBA CZ, s.r.o.21 © 2011 IBA CZ, s.r.o.22 Příště  Meziportletová komunikace  Obsluha zdrojů  Filtry