• Save
BordeauxJUG : Portails & Portlets Java
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

BordeauxJUG : Portails & Portlets Java

on

  • 3,293 views

 

Statistics

Views

Total Views
3,293
Views on SlideShare
3,281
Embed Views
12

Actions

Likes
3
Downloads
0
Comments
0

3 Embeds 12

http://www.slideshare.net 5
https://twitter.com 4
http://www.linkedin.com 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Un portail est censé fédérer l’ensemble des applications de l’entreprise => d’où le bundle qui permet de fournir, sans avoir à le configurer, l’environnement d’exécution du portail … quitte à y intégrer ensuite les webapps à déployer sur le portail

BordeauxJUG : Portails & Portlets Java Presentation Transcript

  • 1. Portails & Portlets Java
  • 2. Frédéric Camblor (@fcamblor) [email_address]
    • Expert Technique et Formateur chez SQLI
    • S’intéresse à tout ce qui touche à l’écosystème Java
      • Monde Spring
      • TDD et Tests unitaires automatisés en général
      • Builds Ant/Maven et Intégration continue
      • Portails J2EE
    • Une plu-value : A déjà travaillé sous plusieurs Portails J2EE
      • Liferay
      • Apache Pluto
      • Websphere Portal
  • 3. Qu’est-ce qu’un Portail ?
    • L’exemple sûrement le plus connu …
  • 4. Qu’est-ce qu’un Portail ? Quelques points clés
    • Une WebApp J2EE « standard »
      • Peut fonctionner dans n’importe quel servlet container
    • Agrégateur de contenus divers
      • Fédération d’applications via des « mini-applications » : les Portlets
      • Contenu statique (CMS)
    • Fonctionnalités unifiées
      • Authentification & Sécurité
      • Navigation
      • Look’n’feel
    • Personnalisation
      • Spécialisation des contenus par utilisateur
  • 5. Qu’est-ce qu’une Portlet ?
    • Pour l’utilisateur :
      • Répond à un besoin spécifique
      • Fournit des informations
    • Pour le développeur :
      • Composant web java
      • Géré au sein d’un conteneur
      • Possède son propre cycle de vie
      • Génère un fragment de page (HTML, XML, WML …)
  • 6. Qu’est-ce qu’un Conteneur de Portlets ?
    • Un médiateur entre le Portail et les Portlets
      • Cible principale : la couche présentation
    • Pour le Portail :
      • Reçoit les requêtes et les dispatch aux portlets cibles
      • Renvoie les fragments générés par les portlets
    • Pour les Portlets :
      • Gestion de leur cycle de vie
      • Fournit un moyen de persister des informations
        • Portlet preferences
      • @since JSR286 Gère le cache du rendu des portlets
  • 7. Cheminement d’une request Schéma issu de la JSR-286
  • 8. Historique des JSR
    • 27/10/2003 : JSR-168 « Portlet 1.0 »
      • ~1 an et demi avant la final release
      • Première standardisation des portails
      • De nombreuses lacunes
    • 12/06/2008 : JSR-286 « Portlet 2.0 »
      • ~3 ans avant la final release
      • Rétro compatibilité ascendante
      • Enrichissement de l’API
        • Apport des annotations de Java5
      • Adoption rapide auprès des portails existants
  • 9. Par rapport à la spécification servlet … De nombreuses similarités
    • Un portail est une webapp décrite via son web.xml
    • La Gestion du cycle de vie via un conteneur
      • Une portlet est stateless tout comme une servlet
    • La Génération de contenu dynamique
    • Le Paradigme request/response
    • Le Classloading
    • La Gestion des sessions
      • Attention : quelques spécificités !
    • Le Dispatching des requêtes
  • 10. Par rapport à la spécification servlet … Des différences
    • La Génération partielle de document
    • Les URL utilisées
      • Portlet invoquée via une URL construite avec l’API Portlet
    • La granularité d’une requête est plus fine
      • 4 phases distinctes : Action, Event, Render, Resource
    • Les portlets possèdent
      • Un état : normal, maximisé, minimisé etc…
      • Un mode : view, edit, config etc…
    • Les portlets peuvent apparaître plusieurs fois sur une page
      • Notion d’instance de portlet
  • 11. Par rapport à la spécification servlet … Des nouveautés
    • Un descripteur spécifique : le portlet.xml
    • Les portlets peuvent persister des données liées à l’utilisateur
      • Notion de Portlet Preferences
        • Charge au conteneur de portlet de persister ces données
    • La session utilisateur est divisé en deux scopes
      • Scope application : données partagées entre portlets
      • Scope portlet : données spécifiques à une portlet
    • @since JSR286 Les portlets sont « event aware »
      • Elles peuvent envoyer des évènements …
      • … et en recevoir du conteneur ou d’autres portlets
    • @since JSR286 Le rendu généré peut être mis en cache
    • L’invocation à distance des portlets : WSRP 1.0 et 2.0 de l’OASIS
  • 12. Le portlet.xml Exemple
    • < portlet-app xmlns = &quot;http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd&quot; version = &quot;2.0&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; >
    • < portlet >
    • < portlet-name > Hello world </ portlet-name >
    • < display-name > Hello world </ display-name >
    • < portlet-class > com.sample.jsp.portlet.HelloWorldPortlet </ portlet-class >
    • < init-param >
    • < name > foo </ name >
    • < value > bar </ value >
    • </ init-param >
    • < expiration-cache > 0 </ expiration-cache >
    • < supports >
    • < mime-type > text/html </ mime-type >
    • </ supports >
    • < security-role-ref >
    • < role-name > administrator </ role-name >
    • </ security-role-ref >
    • < security-role-ref >
    • < role-name > guest </ role-name >
    • </ security-role-ref >
    • </ portlet >
    • </ portlet-app >
  • 13. Gestion des URL du Portail
    • La création d’URL portail peut se faire
      • Dans les JSP : à l’aide de taglib portlet
      • Dans les Portlets : via la PortletResponse
    • 3 familles d’URLs
      • Les actionURL : Fait appel à la phase d’action de la portlet cible
        • Puis aux phases de rendering des portlets de la page
      • Les renderURL : Force le rendering de la portlet cible
        • Même si render mis en cache
      • @since JSR286 Les resourceURL : Fait appel à la phase de resource serving de la portlet cible
  • 14. Gestion des URL du Portail Exemples
    • <%@ taglib uri = &quot;http://java.sun.com/portlet&quot; prefix = &quot;portlet&quot; %>
    • < portlet:defineObjects />
    • < portlet:actionURL name = &quot;submitCustomerForm&quot; windowState = &quot;maximized&quot;
    • var = &quot;formURL&quot; >
    • < portlet:param name = &quot;foo&quot; value = &quot;bar&quot; />
    • </ portlet:actionURL >
    • < form action = &quot; ${formURL} &quot; method = &quot;post&quot; >
    • Prénom : < input type = &quot;text&quot; name = &quot; < portlet:namespace /> custFirstName&quot; />< br />
    • Nom : < input type = &quot;text&quot; name = &quot; < portlet:namespace /> custLastName&quot; />< br />
    • < input type = &quot;submit&quot; value = &quot;Valider&quot; />
    • </ form >
  • 15. Les différentes phases Rappel Schéma issu de la JSR-286
  • 16. Les différentes phases Action & Event phases
    • Phase d’action
      • Appelée en réaction à une action utilisateur
        • Clic sur un lien, soumission de formulaire …
      • Invocation de processAction(ActionRequest, ActionResponse)
      • Possibilité d’influer sur la phase de rendering
        • Changer le mode ou l’état de la portlet
        • Faire une redirection d’URL
    • @since JSR286 Phase de réaction à un évènement
      • Lors de la réception d’un évènement scruté par la portlet
        • Cette phase reste exceptionnelle (scénario alternatif)
      • Invocation de processEvent(EventRequest, EventResponse)
      • Là aussi, possibilité d’influer sur la phase de rendering
  • 17. Les différentes phases Rendering phase
    • Phase de rendering
      • Objectif : Générer le fragment de la portlet en fonction du mode de la Portlet
      • Invocation de render(RenderRequest, RenderResponse)
      • Phase systématiquement appelée lorsque la portlet doit être affichée
      • @since JSR286 La phase n’est plus systématiquement appelée grâce au cache du conteneur de portlet
      • Peut écrire dans un Stream ou dispatcher vers une JSP ou une Servlet
      • Beaucoup moins de possibilités qu’en phase d’action
        • Pas de changement de mode / d’état
        • Pas de redirect possible
  • 18. Les différentes phases Serving Resource phase
    • @since JSR286 Phase de Resource Serving
      • Objectif : Générer un contenu « non aggrégé » par le portail
        • Généralement utilisé en asynchrone (pdf, image dynamique …)
      • Appel de serveResource(ResourceRequest, ResourceResponse)
    Schéma issu de la JSR-286
  • 19. Un exemple de portlet
    • public class HelloWorldPortlet extends GenericPortlet {
    • // Logger de la portlet
    • private static Log log = LogFactoryUtil. getLog (HelloWorldPortlet. class );
    • // Méthode appelée lors de l'action nommée &quot;submitCustomerForm&quot;
    • @ProcessAction (name= &quot;submitCustomerForm&quot; )
    • public void submitCustomerFormAction(ActionRequest actionRequest,
    • ActionResponse actionResponse)
    • throws IOException, PortletException {
    • log .info( &quot;Je suis dans le process action !&quot; );
    • }
    • // Méthode appelée lors du rendering du mode view
    • @RenderMode (name= &quot;view&quot; )
    • public void renderView(RenderRequest renderRequest,
    • RenderResponse renderResponse)
    • throws IOException, PortletException {
    • log .info( &quot;Je suis dans le mode view !&quot; );
    • getPortletContext().getRequestDispatcher( &quot;/view.jsp&quot; )
    • .include(renderRequest, renderResponse);
    • }
    • }
  • 20. Quelques problématiques
    • Quels serveurs d’application utiliser ?
      • Généralement, un (ou des) bundle est fourni avec AppServer + Portal fonctionnant « out of the box »
      • Théoriquement , un portail devrait fonctionner sous n’importe quel servlet container
      • Dans la pratique , il existe des matrices de compatibilité
        • Pour gérer des spécificités liés à certains serveurs d’application
  • 21. Quelques problématiques
    • Puis-je partager des informations entre portlets ?
      • Attention : Une portlet est normalement un composant isolé
      • Possibilité de communication via la session de scope application
        • Pas vraiment très propre
        • Si portlet dans une webapp différente (WSRP) : cela ne fonctionne pas !
      • @since JSR286 Possibilité de propager des informations entre portlet via des évènements
        • Une limite : la durée de l’évènement est de 1 request
          • Pas de gestion de queue d’évènements
  • 22. Quelques problématiques
    • Pourrai-je utiliser mon framework de présentation favori ?
      • « Ca dépend »
      • La plupart des frameworks « connus » fonctionnent
        • En standard : Wicket 1.2, GWT-Portlet
        • A l’aide de bridges : Struts (1) Bridges, JSF Portlet Bridge (JSR301)
        • @since JSR286 A l’aide d’un servlet dispatcher : Wicket 1.3, Struts 2, SpringMVC
      • Une application portlet fonctionnera difficilement en mode servlet sans aménagements !
        • Gestion des URLs, fragments de page…
  • 23. Quelques problématiques
    • Une portlet développée sous un portail est-elle portable sous un autre ?
      • En théorie, « oui »
        • C’est le but de la JSR 168 !
      • En pratique « c’est compliqué »
        • Car il arrive d’avoir à se reposer sur des mécanismes « spécifiques » du portail dans lequel on se trouve
          • Ex: Gestion des permissions de Liferay
      • Il est tout à fait possible de se passer de ces mécanismes spécifiques
        • Mais cela peut limiter fonctionnellement les développements !
    • Dommage qu’il n’y ait pas de standardisation « fonctionnelle » des fonctionnalités d’un portail !
      • La JSR se mouille un peu avec les modes … mais cela ne va pas plus loin !
  • 24. Des questions sur les Portails ?
  • 25. Présentation d’un Portail : Liferay
    • Créé en 2000 pour une église
      • V5.2 depuis 9 mois … v6.0 en approche !
    • Fait intervenir plusieurs JSR
      • JSR 168 et 286 (Portlet 1.0 & 2.0) implémentées
      • JSR 170 (JCR) via Jackrabbit
      • JSR 127, 314 et 301 (JSF 1.0, 2.0 et JSF Portlet Bridge)
    • 22 Langues supportées
    • (Feu) Sun a rejoint la communauté Liferay en 2008
  • 26. Présentation d’un Portail : Liferay Positionnement
    • Opensource
    • Monétisation
      • Community Edition : Gratuit, Fonctionnalités en incubation
      • Enterprise Edition : Releases stables, Support, Réactivité
    • Un certain nombre de portlets « out of the box »
      • Administration Liferay
      • Communautaires : Forum, Wiki, Blog, News
      • Contenu : Documents, Images
      • En tout ~60 aine de portlets bundlées
  • 27. Présentation d’un Portail : Liferay
    • DEMO Présentation
  • 28. Présentation d’un Portail : Liferay Architecture générale Image issue du site http://selfcare.utl.co.uk
  • 29. Présentation d’un Portail : Liferay Le SDK
    • Outillage à base de scripts Ant
    • Environnement EXT
      • Permet de modifier les classes de Liferay
      • Lourd et long en temps de build
      • Pas de déploiement à chaud
      • Environnement EXT abandonné dans la 6.0 … (cf extlets)
    • Plugin SDK
      • Déploiement à chaud
      • Développement de portlets/thèmes spécifiques
      • Depuis peu, possibilité de développer des hooks
      • Bientôt : les extlets
        • Permettra de développer un plugin similaire à ext
  • 30. Présentation d’un Portail : Liferay
    • DEMO Portlet
  • 31. Présentation d’un Portail : Liferay Les forces
    • Sa richesse fonctionnelle
      • Customisation du contenu du portail via son CMS
      • Gestion de la sécurité très fine
      • Fédération des identités : SSO & Intégration LDAP, CAS …
    • Sa customisation ergonomique (Thèmes)
    • Développements facilités par le Plugin SDK
      • Environnement à part des sources du portail
      • Déploiement à chaud
      • Génération de code métier & persistance (Service Builder)
      • Plugin Netbeans (mais pas Eclipse !)
  • 32. Présentation d’un Portail : Liferay Les faiblesses
    • Sa richesse fonctionnelle
      • Ne pas négliger la formation fonctionnelle !
      • Formation à l’API de Liferay en plus de la JSR !
      • Adhérence des développements à Liferay
    • Nouvelles versions majeures à éviter
      • Dans le passé : très buggées …
        • Politique de Tests de Non Régression assez nébuleuse
      • … Et peu documentées
        • Aujourd’hui, la version 5.2 ne possède plus cette faiblesse
    • Son support
      • Dans le passé, communauté très réactive
      • Aujourd’hui, peu de réponses sur le forum (monétisation ?)
  • 33. Présentation d’un Portail : Liferay Attention aux idées reçues
    • La montée en compétence est loin d’être immédiate
      • JSRs Portlet, Fonctionnel Liferay, API Liferay
      • => (Auto)Formation incontournable ! ( http://bit.ly/bJMC3k )
    • Liferay permet de faire beaucoup de choses
      • Cependant, un portail ne permettra jamais de répondre à un besoin métier « out of the box »
      • Attention à ne pas sous-estimer les coûts de développement d’une portlet Liferay !
        • Aspect « bling bling » de Liferay séduit facilement la gouvernance
        • Bien souvent, cette dernière sous-estime la complexité de l’API !
  • 34. La petite phrase …
    • “ By 2011, Gartner expects at least 15% of new enterprise portal projects in Global 2000 firms to use open-source horizontal portal frameworks.”
    • […]
    • “ By 2014, horizontal portal products based on portal containers will be used for no more than 60% of new enterprise portal projects.”
    • Source : Magic Quadrant for Horizontal Portals ( http://bit.ly/HDuPD ) de Gartner (09/2009)
  • 35. Références
    • La JSR-286 (276p) : http://jcp.org/en/jsr/detail?id=286
    • Quelques sites de portails
      • Les Open Source
        • Apache Pluto : http://portals.apache.org/pluto/
        • Liferay : http://www.liferay.com
        • Jahia : http://www.jahia.org
        • GateIn (Fusion JBoss+Exo Portal) : http://www.jboss.org/gatein/
        • uPortal : http://www.jasig.org/uportal
      • Les propriétaires
        • Websphere portal : http://bit.ly/2El5hR
        • Oracle portal : http://bit.ly/DSglS
  • 36. Licence & Copyright
    • Les photos & logos appartiennent à leurs auteurs respectifs
    • Le contenu de la présentation est sous licence Creative Commons 2.0
      • Paternité  — Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'oeuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'oeuvre).
      • Pas d'Utilisation Commerciale  — Vous n'avez pas le droit d'utiliser cette création à des fins commerciales.
      • Partage des Conditions Initiales à l'Identique  — Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat identique à celui-ci.
    • http://creativecommons.org/licenses/by-nc-sa/2.0/fr/