SlideShare une entreprise Scribd logo
Portails & Portlets Java
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
Qu’est-ce qu’un Portail ? L’exemple sûrement le plus connu …
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

Recommandé pour vous

Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine

presentation du micro framework spring boot

springspring bootweb development
Déploiement d'applications Java EE
Déploiement d'applications Java EEDéploiement d'applications Java EE
Déploiement d'applications Java EE

Déploiement d'applications JavaEE. Par Antoine DILIGENT, le 5/01/2011

java deploiement javaee
Redeploiement d’une plateforme eZpublish multisites internationale
Redeploiement d’une plateforme eZpublish multisites internationaleRedeploiement d’une plateforme eZpublish multisites internationale
Redeploiement d’une plateforme eZpublish multisites internationale
ez publish
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 …)
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
Cheminement d’une request Schéma issu de la JSR-286
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

Recommandé pour vous

20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven

Session Nantes JUG en duo avec Olivier Jacob (OCTO Technology)

mavenjug
PHPotes: Codeigniter
PHPotes: CodeigniterPHPotes: Codeigniter
PHPotes: Codeigniter

Présentation de Bernard Trévisan (bt-logiciels) sur le framework CodeIgniter. PHPotes du 8/10/13.

phpframwork
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & Techniques

GWT Principes & Techniques Des IHM avec GWT Des IHM avec GWT + Communiquer avec le serveur Internationalisation I18n Développer un composant graphique Historique du navigateur Logging Tester avec JUNIT Divers principes avancées JavaScript overlay types Intégrer une appli GWT dans JavaScript Code Splitting Étendre la JRE Émulation Sérialisation spécifique Compile Reports

gwt
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
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
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
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 >

Recommandé pour vous

#6 Outils De Developpement
#6 Outils De Developpement#6 Outils De Developpement
#6 Outils De Developpement

Attribution: Francois Fornaciari

jonasnetbeanseclipse
Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...
Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...
Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...

Et si une même librairie Java permettait de s’authentifier sur Facebook, Twitter, Google, myopenid.com, un serveur CAS, en basic auth… aussi bien dans une application Java protégée par Spring Security ou Shiro que dans une application Play en Scala ? C’est exactement ce que permet la librairie pac4j : www.pac4j.org...

openidspringsecuritypac4j
Portails Etat De L'art
Portails  Etat De L'artPortails  Etat De L'art
Portails Etat De L'art
exoweb20mashups
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
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 >
Les différentes phases Rappel Schéma issu de la JSR-286
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

Recommandé pour vous

[Nuxeo World 2013] Construire un portail pour Nuxeo (in French)
[Nuxeo World 2013] Construire un portail pour Nuxeo (in French) [Nuxeo World 2013] Construire un portail pour Nuxeo (in French)
[Nuxeo World 2013] Construire un portail pour Nuxeo (in French)

Loic Marteau présente son connecteur avancé vers Nuxeo. Il permet de publier et partager les contenus web et bureautique de Nuxeo vers des sites Web, Intranet, et ENT.

Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)

My presentation of GWT 2.4 (in French). Main topics : RPC, MVP, Activities and places, Dart, etc. This is the PDF version.

dartgwtjava
Communiqué de presse
Communiqué de presseCommuniqué de presse
Communiqué de presse
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
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
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); } }
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

Recommandé pour vous

Picture presentation!!
Picture presentation!!Picture presentation!!
Picture presentation!!
EXTERNAL- Better Self Enablement Overview
EXTERNAL- Better Self Enablement OverviewEXTERNAL- Better Self Enablement Overview
EXTERNAL- Better Self Enablement Overview

This document describes the features of MuskHost's content delivery network (CDN) that allow for better self-enablement and customization. The CDN is built to empower customers with control, visibility, agility and faster development. It provides tools like APIs, a rules engine, analytics and a media control center to allow customers to automate processes, customize configurations, and gain insights into content delivery.

100 & 101 Thanet Circle presentation 12 15 15
100 & 101 Thanet Circle presentation  12  15 15100 & 101 Thanet Circle presentation  12  15 15
100 & 101 Thanet Circle presentation 12 15 15

Thanet Circle will consist of two office buildings, 100 Thanet and 101 Thanet, totaling 110,000 square feet in Princeton, NJ. Building 100 Thanet will be a single tenant building of 55,000 square feet while Building 101 Thanet will be a multi-tenant building of the same size. The developer, King Realty Group LLC, is exploring renovations to the lobby areas and can be contacted for additional information.

real estateprincetonoffice space
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
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…
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 !
Des questions sur les Portails ?

Recommandé pour vous

UNLEASH NO FEAR: HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...
UNLEASH NO FEAR:  HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...UNLEASH NO FEAR:  HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...
UNLEASH NO FEAR: HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...

The Coalition For Change, Inc. (C4C) advocates for protecting federal employees from workplace abuse and discrimination. The No FEAR Act of 2002 was passed to increase accountability for discrimination and retaliation, but federal officials continue violating civil rights laws without consequences. Several cases are described where officials found guilty of discrimination and misconduct faced no discipline, undermining the goal of the No FEAR Act to protect employees and ensure accountability. C4C calls on the President to close loopholes and mandate discipline for officials who violate civil rights.

bullyingfederal governmentdiscrimination
Portail d'entreprise / eXo Platform
Portail d'entreprise / eXo PlatformPortail d'entreprise / eXo Platform
Portail d'entreprise / eXo Platform

- Portail d'entreprises: - nouveaux besoins / nouveaux outils - quoi de neuf pour les développeurs - retour d'experience - eXo Platform - présentation du projet open source et de la société - l'offre eXo

exoportailsweb
Productivité et sites web de l'administration
Productivité et sites web de l'administrationProductivité et sites web de l'administration
Productivité et sites web de l'administration
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
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
Présentation d’un Portail : Liferay DEMO Présentation
Présentation d’un Portail : Liferay Architecture générale Image issue du site http://selfcare.utl.co.uk

Recommandé pour vous

Enterprise digital transformation process
Enterprise digital transformation processEnterprise digital transformation process
Enterprise digital transformation process

If you're serious in Enterprise Digital Transformation, this deck will provide some insight into the scope of need to have a successful transition. http://oxygn.co http://www.slideshare.net/OxygnCo/digital-maturity-model-indicator - Three simple steps to sucessful transition

mobileiostransformation
Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...
Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...
Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...

De nombreuses industries sont susceptibles d’être transformées par la technologie blockchain. Après une introduction rappelant ce qu’est la technologie blockchain, cette session vous donnera un aperçu sur la façon dont ce nouveau paradigme de gestion de la confiance peut bénéficier à des secteurs comme l’assurance, l’industrie (IoT, chaîne d’approvisionnement.), distribution d’énergie, services publics…

iotblockchain
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 20167 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016

La communauté Liferay est très active et alimente sans cesse la Marketplace avec des plugins de qualité, mais la plupart de ces pépites sont trop souvent méconnues. Cette session sera l’occasion de présenter une sélection de 7 plugins qui sont d’une aide précieuse dans la plupart des contextes projets !

communityuser importquartz
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
Présentation d’un Portail : Liferay DEMO Portlet
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 !)
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 ?)

Recommandé pour vous

Driving cultural changes to improve Customer Experience
Driving cultural changes to improve Customer Experience Driving cultural changes to improve Customer Experience
Driving cultural changes to improve Customer Experience

Christopher Brooks, Lexden's MD delivered this presentation at The Financial Services Forum, alongside Direct Line

customer experiencefinancial servicesfinance
Sa introduction to big data pipelining with cassandra &amp; spark west mins...
Sa introduction to big data pipelining with cassandra &amp; spark   west mins...Sa introduction to big data pipelining with cassandra &amp; spark   west mins...
Sa introduction to big data pipelining with cassandra &amp; spark west mins...

This document provides an overview and outline of a 1-hour introduction to building a big data pipeline using Docker, Cassandra, Spark, Spark-Notebook and Akka. The introduction is presented as a half-day workshop at Devoxx November 2015. It uses a data pipeline environment from Data Fellas and demonstrates how to use scalable distributed technologies like Docker, Spark, Spark-Notebook and Cassandra to build a reactive, repeatable big data pipeline. The key takeaway is understanding how to construct such a pipeline.

akkacassandradocker
Inservice
InserviceInservice
Inservice

Assistance animals, including dogs, horses, and miniature horses, work in various settings such as nursing homes, hospitals, schools, and private residences. They perform roles as comfort animals, therapy assistants, service animals, and guide animals. Their duties can include lowering blood pressure, decreasing anxiety, acting as a distraction, and improving quality of life. Training for assistance animals takes 6-12 months and involves desensitization to various environments and sounds. Miniature horses specifically can work as service and guide animals due to their size, vision, memory, and ability to work well with people with disabilities.

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 !
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)
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
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/

Recommandé pour vous

After 911_final
After 911_finalAfter 911_final
After 911_final

The document analyzes terrorist attacks data from 1993-2009 to assess the effectiveness of policies enacted after 9/11. It finds: 1) The number and severity of terrorist attacks significantly increased after 9/11, with monthly attacks rising from 41 to 217 and deaths per attack doubling from 0.89 to 1.60. 2) Both the use of explosive devices and suicide attacks significantly increased the severity of attacks, with explosive attacks having over 10 deaths per attack versus 2.57 without, and suicide attacks resulting in 22.57 deaths versus 3.34 for other tactics. 3) While policies aimed to reduce terrorism, their implementation may have unintentionally provoked extremist groups, necessitating an increase in

icmi2015_ChaZhang
icmi2015_ChaZhangicmi2015_ChaZhang
icmi2015_ChaZhang

This document summarizes a research paper on image-based static facial expression recognition using multiple deep convolutional neural networks. The researchers used an ensemble of face detectors to locate faces in images, then classified the facial expressions using an ensemble of CNN models pre-trained on a larger dataset and fine-tuned on the SFEW 2.0 dataset. They proposed two methods for learning the ensemble weights of the CNN models by minimizing log likelihood or hinge loss. Their method achieved state-of-the-art results on the FER dataset and 61.29% accuracy on the SFEW 2.0 test set, significantly above the baseline.

Meet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaire

Base pour créer son premier formulaire avec Symfony, ainsi qu'une présentation des avantages de les utiliser.

validationformsexemple de code

Contenu connexe

Tendances

Installation et Configuration ee JDK et de Tomcat
Installation et Configuration ee JDK et de TomcatInstallation et Configuration ee JDK et de Tomcat
Installation et Configuration ee JDK et de Tomcat
Mohamed Ben Bouzid
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancer
tarkaus
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
Syrine Ben aziza
 
Déploiement d'applications Java EE
Déploiement d'applications Java EEDéploiement d'applications Java EE
Déploiement d'applications Java EE
javalabsf
 
Redeploiement d’une plateforme eZpublish multisites internationale
Redeploiement d’une plateforme eZpublish multisites internationaleRedeploiement d’une plateforme eZpublish multisites internationale
Redeploiement d’une plateforme eZpublish multisites internationale
Kaliop-slide
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
Arnaud Héritier
 
PHPotes: Codeigniter
PHPotes: CodeigniterPHPotes: Codeigniter
PHPotes: Codeigniter
AnDaolVras
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & Techniques
Rachid NID SAID
 
#6 Outils De Developpement
#6 Outils De Developpement#6 Outils De Developpement
#6 Outils De Developpement
Guillaume Sauthier
 
Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...
Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...
Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...
Jérôme Leleu
 

Tendances (11)

Installation et Configuration ee JDK et de Tomcat
Installation et Configuration ee JDK et de TomcatInstallation et Configuration ee JDK et de Tomcat
Installation et Configuration ee JDK et de Tomcat
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancer
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
 
Déploiement d'applications Java EE
Déploiement d'applications Java EEDéploiement d'applications Java EE
Déploiement d'applications Java EE
 
Redeploiement d’une plateforme eZpublish multisites internationale
Redeploiement d’une plateforme eZpublish multisites internationaleRedeploiement d’une plateforme eZpublish multisites internationale
Redeploiement d’une plateforme eZpublish multisites internationale
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
PHPotes: Codeigniter
PHPotes: CodeigniterPHPotes: Codeigniter
PHPotes: Codeigniter
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & Techniques
 
#6 Outils De Developpement
#6 Outils De Developpement#6 Outils De Developpement
#6 Outils De Developpement
 
Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...
Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...
Devoxx france 2014 - Jérôme LELEU - One java library to rule all security pro...
 

En vedette

Portails Etat De L'art
Portails  Etat De L'artPortails  Etat De L'art
Portails Etat De L'art
Tugdual Grall
 
[Nuxeo World 2013] Construire un portail pour Nuxeo (in French)
[Nuxeo World 2013] Construire un portail pour Nuxeo (in French) [Nuxeo World 2013] Construire un portail pour Nuxeo (in French)
[Nuxeo World 2013] Construire un portail pour Nuxeo (in French)
Nuxeo
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)
Celinio Fernandes
 
Communiqué de presse
Communiqué de presseCommuniqué de presse
Communiqué de presse
pirottm
 
Picture presentation!!
Picture presentation!!Picture presentation!!
Picture presentation!!
Nin Tut
 
EXTERNAL- Better Self Enablement Overview
EXTERNAL- Better Self Enablement OverviewEXTERNAL- Better Self Enablement Overview
EXTERNAL- Better Self Enablement Overview
Dhaneesh ..
 
100 & 101 Thanet Circle presentation 12 15 15
100 & 101 Thanet Circle presentation  12  15 15100 & 101 Thanet Circle presentation  12  15 15
100 & 101 Thanet Circle presentation 12 15 15
Victor B. Murray
 
UNLEASH NO FEAR: HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...
UNLEASH NO FEAR:  HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...UNLEASH NO FEAR:  HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...
UNLEASH NO FEAR: HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...
Tanya Ward Jordan
 
Portail d'entreprise / eXo Platform
Portail d'entreprise / eXo PlatformPortail d'entreprise / eXo Platform
Portail d'entreprise / eXo Platform
Tugdual Grall
 
Productivité et sites web de l'administration
Productivité et sites web de l'administrationProductivité et sites web de l'administration
Productivité et sites web de l'administration
ch.ch
 
Enterprise digital transformation process
Enterprise digital transformation processEnterprise digital transformation process
Enterprise digital transformation process
Oxygn
 
Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...
Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...
Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...
Microsoft Ideas
 
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 20167 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
Sébastien Le Marchand
 
Driving cultural changes to improve Customer Experience
Driving cultural changes to improve Customer Experience Driving cultural changes to improve Customer Experience
Driving cultural changes to improve Customer Experience
Christopher Brooks
 
Sa introduction to big data pipelining with cassandra &amp; spark west mins...
Sa introduction to big data pipelining with cassandra &amp; spark   west mins...Sa introduction to big data pipelining with cassandra &amp; spark   west mins...
Sa introduction to big data pipelining with cassandra &amp; spark west mins...
Simon Ambridge
 
Inservice
InserviceInservice
Inservice
Alexia Kritsonis
 
After 911_final
After 911_finalAfter 911_final
After 911_final
Tony Molina
 
icmi2015_ChaZhang
icmi2015_ChaZhangicmi2015_ChaZhang
icmi2015_ChaZhang
Zhiding Yu
 
Meet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaire
Julien Vinber
 
Resume-James Gordon4
Resume-James Gordon4Resume-James Gordon4
Resume-James Gordon4
James Gordon
 

En vedette (20)

Portails Etat De L'art
Portails  Etat De L'artPortails  Etat De L'art
Portails Etat De L'art
 
[Nuxeo World 2013] Construire un portail pour Nuxeo (in French)
[Nuxeo World 2013] Construire un portail pour Nuxeo (in French) [Nuxeo World 2013] Construire un portail pour Nuxeo (in French)
[Nuxeo World 2013] Construire un portail pour Nuxeo (in French)
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)
 
Communiqué de presse
Communiqué de presseCommuniqué de presse
Communiqué de presse
 
Picture presentation!!
Picture presentation!!Picture presentation!!
Picture presentation!!
 
EXTERNAL- Better Self Enablement Overview
EXTERNAL- Better Self Enablement OverviewEXTERNAL- Better Self Enablement Overview
EXTERNAL- Better Self Enablement Overview
 
100 & 101 Thanet Circle presentation 12 15 15
100 & 101 Thanet Circle presentation  12  15 15100 & 101 Thanet Circle presentation  12  15 15
100 & 101 Thanet Circle presentation 12 15 15
 
UNLEASH NO FEAR: HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...
UNLEASH NO FEAR:  HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...UNLEASH NO FEAR:  HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...
UNLEASH NO FEAR: HOLD PUBLIC OFFICIALS ACCOUNTABLE FOR BREAKING CIVIL RIGHTS...
 
Portail d'entreprise / eXo Platform
Portail d'entreprise / eXo PlatformPortail d'entreprise / eXo Platform
Portail d'entreprise / eXo Platform
 
Productivité et sites web de l'administration
Productivité et sites web de l'administrationProductivité et sites web de l'administration
Productivité et sites web de l'administration
 
Enterprise digital transformation process
Enterprise digital transformation processEnterprise digital transformation process
Enterprise digital transformation process
 
Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...
Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...
Blockchain au-delà de la finance : pourquoi toutes les industries sont concer...
 
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 20167 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
 
Driving cultural changes to improve Customer Experience
Driving cultural changes to improve Customer Experience Driving cultural changes to improve Customer Experience
Driving cultural changes to improve Customer Experience
 
Sa introduction to big data pipelining with cassandra &amp; spark west mins...
Sa introduction to big data pipelining with cassandra &amp; spark   west mins...Sa introduction to big data pipelining with cassandra &amp; spark   west mins...
Sa introduction to big data pipelining with cassandra &amp; spark west mins...
 
Inservice
InserviceInservice
Inservice
 
After 911_final
After 911_finalAfter 911_final
After 911_final
 
icmi2015_ChaZhang
icmi2015_ChaZhangicmi2015_ChaZhang
icmi2015_ChaZhang
 
Meet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaire
 
Resume-James Gordon4
Resume-James Gordon4Resume-James Gordon4
Resume-James Gordon4
 

Similaire à BordeauxJUG : Portails &amp; Portlets Java

Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
Nathaniel Richand
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
François Charoy
 
WebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet ApplicationsWebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet Applications
Vincent Perrin
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
Abdelhakim Bachar
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
Korteby Farouk
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
Winslo Nwan
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
Horacio Gonzalez
 
Resource Oriented Architecture
Resource Oriented ArchitectureResource Oriented Architecture
Resource Oriented Architecture
DNG Consulting
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
Mejdeddine Bouzouita
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
JS Bournival
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
goldoraf
 
Fondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application FlexFondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application Flex
david deraedt
 
Fondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application FlexFondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application Flex
david deraedt
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
Horacio Gonzalez
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon
 
Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09
Claude Coulombe
 
webservicesfhjtrddktkddflfddddddyuldydulyulfyul_RESTU.pdf
webservicesfhjtrddktkddflfddddddyuldydulyulfyul_RESTU.pdfwebservicesfhjtrddktkddflfddddddyuldydulyulfyul_RESTU.pdf
webservicesfhjtrddktkddflfddddddyuldydulyulfyul_RESTU.pdf
KHALIDBENABBES1
 
sqcq<svdsdvezsfvkjezbkjfb ckjhs;dvbqcjkhbazvuyaz.pdf
sqcq<svdsdvezsfvkjezbkjfb ckjhs;dvbqcjkhbazvuyaz.pdfsqcq<svdsdvezsfvkjezbkjfb ckjhs;dvbqcjkhbazvuyaz.pdf
sqcq<svdsdvezsfvkjezbkjfb ckjhs;dvbqcjkhbazvuyaz.pdf
KHALIDBENABBES1
 
Ajax en Java - GTI780 & MTI780 - ETS - A08
Ajax en Java - GTI780 & MTI780 - ETS - A08Ajax en Java - GTI780 & MTI780 - ETS - A08
Ajax en Java - GTI780 & MTI780 - ETS - A08
Claude Coulombe
 

Similaire à BordeauxJUG : Portails &amp; Portlets Java (20)

Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
 
WebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet ApplicationsWebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet Applications
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
 
Resource Oriented Architecture
Resource Oriented ArchitectureResource Oriented Architecture
Resource Oriented Architecture
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Fondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application FlexFondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application Flex
 
Fondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application FlexFondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application Flex
 
Tapestry
TapestryTapestry
Tapestry
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09
 
webservicesfhjtrddktkddflfddddddyuldydulyulfyul_RESTU.pdf
webservicesfhjtrddktkddflfddddddyuldydulyulfyul_RESTU.pdfwebservicesfhjtrddktkddflfddddddyuldydulyulfyul_RESTU.pdf
webservicesfhjtrddktkddflfddddddyuldydulyulfyul_RESTU.pdf
 
sqcq<svdsdvezsfvkjezbkjfb ckjhs;dvbqcjkhbazvuyaz.pdf
sqcq<svdsdvezsfvkjezbkjfb ckjhs;dvbqcjkhbazvuyaz.pdfsqcq<svdsdvezsfvkjezbkjfb ckjhs;dvbqcjkhbazvuyaz.pdf
sqcq<svdsdvezsfvkjezbkjfb ckjhs;dvbqcjkhbazvuyaz.pdf
 
Ajax en Java - GTI780 & MTI780 - ETS - A08
Ajax en Java - GTI780 & MTI780 - ETS - A08Ajax en Java - GTI780 & MTI780 - ETS - A08
Ajax en Java - GTI780 & MTI780 - ETS - A08
 

Plus de Camblor Frédéric

Back to Basics - Ne perdez plus votre Temps avec les Dates - JUG SummerCamp ...
Back to Basics  - Ne perdez plus votre Temps avec les Dates - JUG SummerCamp ...Back to Basics  - Ne perdez plus votre Temps avec les Dates - JUG SummerCamp ...
Back to Basics - Ne perdez plus votre Temps avec les Dates - JUG SummerCamp ...
Camblor Frédéric
 
Back to basics - Ne perdez plus votre Temps avec les Dates - GDG Tours Edition
Back to basics  - Ne perdez plus votre Temps avec les Dates - GDG Tours EditionBack to basics  - Ne perdez plus votre Temps avec les Dates - GDG Tours Edition
Back to basics - Ne perdez plus votre Temps avec les Dates - GDG Tours Edition
Camblor Frédéric
 
Back to basics - Ne perdez plus votre Temps avec les Dates - Devoxx FR Edition
Back to basics  - Ne perdez plus votre Temps avec les Dates - Devoxx FR EditionBack to basics  - Ne perdez plus votre Temps avec les Dates - Devoxx FR Edition
Back to basics - Ne perdez plus votre Temps avec les Dates - Devoxx FR Edition
Camblor Frédéric
 
Back to Basics - Ne perdez plus votre Temps avec les Dates - Bordeaux JS Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - Bordeaux JS EditionBack to Basics - Ne perdez plus votre Temps avec les Dates - Bordeaux JS Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - Bordeaux JS Edition
Camblor Frédéric
 
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG EditionBack to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG Edition
Camblor Frédéric
 
Back to Basics - Ne perdez plus votre Temps avec les Dates - 4SH Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - 4SH EditionBack to Basics - Ne perdez plus votre Temps avec les Dates - 4SH Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - 4SH Edition
Camblor Frédéric
 
Devoxx 2011 - Jenkins BOF on Plugin compatibility tester
Devoxx 2011 - Jenkins BOF on Plugin compatibility testerDevoxx 2011 - Jenkins BOF on Plugin compatibility tester
Devoxx 2011 - Jenkins BOF on Plugin compatibility tester
Camblor Frédéric
 
Jenkins users meetup plugins overview
Jenkins users meetup plugins overviewJenkins users meetup plugins overview
Jenkins users meetup plugins overview
Camblor Frédéric
 

Plus de Camblor Frédéric (8)

Back to Basics - Ne perdez plus votre Temps avec les Dates - JUG SummerCamp ...
Back to Basics  - Ne perdez plus votre Temps avec les Dates - JUG SummerCamp ...Back to Basics  - Ne perdez plus votre Temps avec les Dates - JUG SummerCamp ...
Back to Basics - Ne perdez plus votre Temps avec les Dates - JUG SummerCamp ...
 
Back to basics - Ne perdez plus votre Temps avec les Dates - GDG Tours Edition
Back to basics  - Ne perdez plus votre Temps avec les Dates - GDG Tours EditionBack to basics  - Ne perdez plus votre Temps avec les Dates - GDG Tours Edition
Back to basics - Ne perdez plus votre Temps avec les Dates - GDG Tours Edition
 
Back to basics - Ne perdez plus votre Temps avec les Dates - Devoxx FR Edition
Back to basics  - Ne perdez plus votre Temps avec les Dates - Devoxx FR EditionBack to basics  - Ne perdez plus votre Temps avec les Dates - Devoxx FR Edition
Back to basics - Ne perdez plus votre Temps avec les Dates - Devoxx FR Edition
 
Back to Basics - Ne perdez plus votre Temps avec les Dates - Bordeaux JS Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - Bordeaux JS EditionBack to Basics - Ne perdez plus votre Temps avec les Dates - Bordeaux JS Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - Bordeaux JS Edition
 
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG EditionBack to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - BordeauxJUG Edition
 
Back to Basics - Ne perdez plus votre Temps avec les Dates - 4SH Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - 4SH EditionBack to Basics - Ne perdez plus votre Temps avec les Dates - 4SH Edition
Back to Basics - Ne perdez plus votre Temps avec les Dates - 4SH Edition
 
Devoxx 2011 - Jenkins BOF on Plugin compatibility tester
Devoxx 2011 - Jenkins BOF on Plugin compatibility testerDevoxx 2011 - Jenkins BOF on Plugin compatibility tester
Devoxx 2011 - Jenkins BOF on Plugin compatibility tester
 
Jenkins users meetup plugins overview
Jenkins users meetup plugins overviewJenkins users meetup plugins overview
Jenkins users meetup plugins overview
 

BordeauxJUG : Portails &amp; 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/

Notes de l'éditeur

  1. Un portail est censé fédérer l’ensemble des applications de l’entreprise =&gt; 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