SPRING WEBFLOW Cours JEE - Master 2 Université de Marne-la-Vallée 1 dimanche 14 novembre 2010

Documents pareils
Alfstore workflow framework Spécification technique

Architecture Orientée Service, JSON et API REST

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmer en JAVA. par Tama

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Une Histoire de Migration Agile

Web Tier : déploiement de servlets

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Auto-évaluation Programmation en Java

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Cours en ligne Développement Java pour le web

RMI le langage Java XII-1 JMF

BPEL Orchestration de Web Services

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Programmation Par Objets

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Programmation par les Objets en Java

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2015 SECONDE ÉPREUVE

Convertisseur BBAN/IBAN

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

IFIPS 5 / Nouvelles Architectures Logicielles Projet : Bus de web services avec «moteur» BPEL

Les processus métiers : concepts, modèles et systèmes

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Corrigé des exercices sur les références

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Remote Method Invocation Les classes implémentant Serializable

2 Chapitre 1 Introduction

Bases Java - Eclipse / Netbeans

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Composants Logiciels. Le modèle de composant de CORBA. Plan

Premiers Pas en Programmation Objet : les Classes et les Objets

Programmation en Java IUT GEII (MC-II1) 1

JavaServer Pages (JSP)

Environnements de développement (intégrés)

Développement Logiciel

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Moteur DC: Comment faire varier sa vitesse?

Devenez un véritable développeur web en 3 mois!

Single Sign-On open source avec CAS (Central Authentication Service)

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Once the installation is complete, you can delete the temporary Zip files..

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Objectif : Passer de l analyse métier et fonctionnelle à la définition des applications qui

Business Process Execution Language

Programmation Web. Madalina Croitoru IUT Montpellier

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Tolérance aux Fautes des Grappes d Applications J2EE. Applications Internet dynamiques

Remote Method Invocation en Java (RMI)

Technologie Web. Conception de sites Web. Alexandre Pauchet. INSA Rouen - Département ASI. INSA - ASI TechnoWeb : Rappels UML 1/21

Héritage presque multiple en Java (1/2)

TP1 : Initiation à Java et Eclipse

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Remote Method Invocation (RMI)

GECKO Software. Introduction à MOBIDICK. Modular But Integrated Application Framework

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Corrigés des premiers exercices sur les classes

Ingénierie des Modèles. Méta-modélisation

Arbres binaires de recherche

Maîtriser le menu contextuel dans un OfficeBean

Nuxeo 5.4 : les nouveautés

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Chapitre VI- La validation de la composition.

Les frameworks au coeur des applications web

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

TrustedBird, un client de messagerie de confiance

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

les techniques d'extraction, les formulaires et intégration dans un site WEB

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Refonte front-office / back-office - Architecture & Conception -

ACTIVITÉ DE PROGRAMMATION

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Iyad Alshabani SysCom - CReSTIC Université de Reims 17/02/2011 1

21 mars Simulations et Méthodes de Monte Carlo. DADI Charles-Abner. Objectifs et intérêt de ce T.E.R. Générer l'aléatoire.

Java Licence Professionnelle CISII,

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

OCL - Object Constraint Language

Android et le Cloud Computing

Présentation Alfresco

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Mise en oeuvre d un Serveur de CD AXIS StorPoint

4. Groupement d objets

Le moteur de workflow JBPM

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Design patterns. Design patterns - définition. Design patterns - avantages

LOG4430 : Architecture logicielle et conception avancée

RULE 5 - SERVICE OF DOCUMENTS RÈGLE 5 SIGNIFICATION DE DOCUMENTS. Rule 5 / Règle 5

4. SERVICES WEB REST 46

INF 321 : mémento de la syntaxe de Java

openarchitectureware & transformation de modèle Yannick Lizzi Architecte Logiciel itemis France Mail: lizzi@itemis.de

Transcription:

SPRING WEBFLOW 1

RAPPEL D ARCHITECTURE Persistance des données 2

PROBLÉMATIQUE Comment faire le lien entre mes vues graphiques et ma logique métier en respectant les contraintes (maintenance, coût & temps de dev., performance, portabilité,...) de développement d applications d entreprise? 3

LE DESIGN PATTERN FRONT-CONTROLLER Lorsque l on accède directement à une vue sans passer par un système centralisé, deux problèmes peuvent apparaître: Chaque vue va fournir ses propres services, ce qui entraîne une duplication du code; On mélange la partie navigation et la partie affichage De plus, le contrôleur est plus compliqué à maintenir car il est dilué dans plusieurs endroits de l application. 4

FRONT-CONTROLLER Utilisation d un contrôleur comme point d entrée de traitement des requêtes. Le contrôleur va gérer le traitement des requêtes (authentification et droits d accès), la délégation des traitements métier, la gestion du choix de la vue appropriée, le traitement des erreurs et la gestion des stratégies de création de contenu. 5

FRONT-CONTROLLER Le contrôleur va être couplé avec un dispatcheur en charge de la gestion des vues et de la navigation. Le dispatcheur peut être directement encapsulé dans le contrôleur ou peut être vue comme un composant séparé. 6

SCHÉMA UML 7

SPRING WEBFLOW Spring WebFlow est une extension du pattern MVC permettant de définir la navigation entre les différentes pages d une application Web. C est un front-controller! 8

SPRING WEBFLOW mécanisme (Work Flow) permettant: décrire la navigation limiter les portées au sein d un processus DSL permettant de décrire le processus de navigation (XML) séparation claire entre: logique de navigation et logique applicative logique métier 9

POUR RAPPEL... logique de navigation sans état! vs. logique applicative avec état! 10

AVANTAGES règles de navigation encapsulées dans un seul endroit découpage en couche des développements suivre la logique applicative sans entrer dans l implantation réutilisation d un processus à plusieurs endroits limitation des portées (optimisation de la mémoire) principe de conversation: plus longue qu une simple requête; plus courte qu une session 11

ENRICHISSEMENT DE JSF comble certaines limitations de JSF: navigation trop verbeuse difficilement maintenable sur de gros projets pas de variables de portées «Conversation» 12

AMELIORE LES COÛTS les flows sont rechargeables à chaud en phase de dev. syntaxe des flows est compréhensible par des non techniques réutilisation des flows sous forme de sous-flow modularisation de pans entiers de navigation intégration naturelle avec Spring 13

DESCRIPTION D UN FLOW Un flow ou processus de navigation est tout simplement une machine à états finie! 14

DESCRIPTION D UN FLOW décrit dans un fichier xml le nom du fichier est de la forme (*-flow.xml) paradigm «Convention over Configuration» dans le répertoire src/main/webapp/web-inf/flows les vues sont placées au même endroit les fichiers de localisation aussi les sous-flows dans un sous-répertoire 15

DESCRIPTION D UN FLOW le fichier xml va décrire: les états de la machine à états finie les transitions entre ses états les différentes actions déclenchées 16

EXEMPLE 17

EXEMPLE <flow> <view-state id=«products»> <transition on=«add»>...</transition> <transition on=«checkout» to=«checkout»>...</transition> </view-state> <view-state id=«checkout»> <transition on=«delete»>...</transition> <transition on=«bill» to=«bill»>...</transition> </view-state> <view-state id=«bill»> <transition on=«valid» to=«end»>...</transition> </view-state> <end-state id=«end»>... </end-state> </flow> 18

DIFFÉRENTS TYPES D ÉTATS start-state view-state end-state decision-state action-state 19

START-STATE état de départ d un flow il peut ne pas être défini le premier état sera alors l état de départ regroupe les traitements à faire pour initialiser un flow renseigné les valeurs des variables par exemple <start-state>...</start-state> 20

VIEW-STATE correspond à une page que l on souhaite afficher quand on entre dans un view-state on affiche la page correspondant à l état l utilisateur va générer des événements ces événements vont faire changer le flow d état Lors de l affichage le flow est en pause! 21

EXEMPLE <view-state id=«toto» view=«toto»> <transition on=«connect» to=«connect»> <evaluate expression=«...» value=«...»/> </transition> </view-state> 22

VIEW-STATE Action effectuée lors de l entrée d un view-state <on-entry></on-entry> Action effectuée avant l affichage de la vue <on-render></on-render> Action effectuée lors de la sortie d un view-state <on-exit></on-exit> 23

ACTIONS VIEW-STATE 24

RENDERING DE FRAGMENTS on peut demander de ne réafficher qu une partie d une vue <transition on="next"> <evaluate expression="..." /> <render fragments="totofragment" /> </transition> Très important pour les performances! 25

END-STATE permet de définir la page à afficher ou les actions à effectuer à la fin d un flow lors du passage dans un end-state les données liées à l instance du flow ne sont plus accessibles <end-state>... </end-state> 26

DECISION-STATE exécution d un code non visuel dépend de données présentes dans le flow peut être associé au contrôleur dans un MVC <decision-state>... </decision-state> 27

EXEMPLE <decision-state id="istoto"> <if test="t.istoto()" then="toto" else="titi" /> </decision-state> 28

ACTION-STATE exécution d un code non visuel fait appel à des méthodes d actions à l entrée de ce type d état comparable à la partie contrôleur dans un MVC va chercher de l information pour réaliser son routage <action-state> <evaluate expression=«...» value=«...» />... </action-state> 29

APPEL À UNE ACTION Dans l action state du flow: <evaluate expression="multiaction.actionmethod1" /> Code Java de l action: public class CustomMultiAction extends MultiAction { public Event actionmethod1(requestcontext context) {... } } public Event actionmethod2(requestcontext context) {... } 30

TRAITEMENT DES EXCEPTIONS public class BookingAction { public String makebooking(booking booking, RequestContext context) { try { BookingConfirmation confirmation = bookingservice.make(booking); context.getflowscope().put("confirmation", confirmation); return "success"; } catch (RoomNotAvailableException e) { context.addmessage(new MessageBuilder().error()..defaultText("No room is available at this hotel").build()); return "error"; } } } 31

ACTION-STATE VS. DECISON-STATE decision-state permet de prendre une décision de routage en fonction d éléments existants action-state permet de prendre une décision de routage en fonction du résultat de l exécution d une ou plusieurs actions 32

TRANSITIONS GLOBALES Transitions valides quelque soit l état du flow! Exemple: <global-transitions> <transition on=«toto» to=«titi» /> </global-transitions> 33

VARIABLES & PORTÉES Traditionnellement, 4 types de portée: portée application portée session portée request portée page 34

PROBLÉMATIQUE La portée session est trop étendue car elle couvre l ensemble des interactions d un utilisateur avec l application! La portée request est souvent trop brève car elle se limite à une interaction requête / réponse! 35

DE NOUVELLES PORTÉES... De la plus restreinte à la plus globale: request flash view flow conversation 36

LES PORTÉES WEBFLOW Ces nouvelles portées permettent: réduction du risque d erreurs dus à un partage trop global réutilisation d une partie de l application dans un autre contexte pas d impact ou remise en cause du reste de l application Une portée est définie pour chaque variable déclarée au sein du flow! 37

PORTÉE FLOW un flow est un processus métier indépendant représentant un cas d utilisation particulier de l application un flow est constitué de quelques vues et des données associées qui sont stockées la portée flow correspond de l état de départ du flow à l état fin du flow 38

PORTÉE VIEW une vue correspond à une page qui visualise des informations une portée vue correspond à l entrée dans le view-state à la sortie du view-state 39

PORTÉE CONVERSATION une conversation est stockée dans la session HTTP une variable à une durée de vie de l état de départ du flow parent à l état fin du flow parent elle est partagée par le flow parent et tout ses sous-flows 40

Comment passer des paramètres à un flow? 41

INPUT / OUTPUT D UN FLOW Chaque flow peut définir un contrat bien définie de variables en entrée et en sortie Chaque flow peut récupérer des variables en entrée quand il commence Chaque flot peut retourner des variables en sortie quand il s arrête 42

INPUT / OUTPUT D UN FLOW on utilise l élément input pour déclarer une variable d entrée d un flow on utilise l élement output pour déclarer une variable de sortie d un flow dans les deux cas on peut déclarer un type dans les deux cas on peut déclarer une valeur 43

EXEMPLES: INPUT <input name="hotelid" type="long" /> <input name="hotelid" value="flowscope.hotels.hotelid" /> <input name="hotelid" type="long" value="flowscope.hotelid" required="true" /> 44

EXEMPLES: OUTPUT <end-state id="bookingconfirmed"> <output name="bookingid" /> </end-state> <output name="confirmation" value="booking.confirmation" /> 45

VARIABLES IMPLICITES flowscope requestscope viewscope requestscope flashscope requestparameters currentuser currentevent messagecontext resourcebundle conversationscope 46

EXEMPLE FLOWSCOPE <evaluate expression="searchservice.findhotel(id)" result="flowscope.hotel" /> <evaluate expression="searchservice.findhotel(id)" result="conversationscope.hotel" /> 47

EXEMPLE CURRENTUSER <evaluate expression="bookingservice.createbooking(id, currentuser.name)" result="flowscope.booking" /> 48

CONVERTIR conversion des données dans le form (string) vers le bon type de données dans le modèle des convertisseurs sont déjà définis pour les types de données primitifs (entiers, réels, énumérations et dates) on peut souhaiter rajouter un convertisseur spécifique 49

CONVERTIR étendre d une classe déjà définie StringToObject deux méthodes sont à implanter: protected abstract Object toobject(string s, Class Clazz) throws Exception; protected abstract String tostring(object object) throws Exception; 50

EXEMPLE public class StringToMonetaryAmount extends StringToObject { public StringToMonetaryAmount() { super(monetaryamount.class); } @Override protected Object toobject(string string, Class clazz) { return MonetaryAmount.valueOf(string); } }! @Override protected String tostring(object object) { MonetaryAmount amount = (MonetaryAmount) object; return amount.tostring(); } 51

ENREGISTREMENT D UN CONVERTISSEUR ajout d un service fournissant la ou les nouvelles conversions @Component("conversionService") public class ApplicationConversionService extends DefaultConversionService { @Override protected void adddefaultconverters() { super.adddefaultconverters(); this.addconverter(new StringToMonetaryAmount()); this.addconverter("monetaryamount", new StringToMonetaryAmount()); } } 52

ENREGISTREMENT D UN CONVERTISSEUR modification du fichier xxx-webflow-config.xml <faces:flow-builder-services id="facesflowbuilderservices" development="true" conversion-service="conversionservice"/> 53

VALIDER validation des objets saisis par les utilisateurs implantation d un valideur ${model}validator convention over configuration! @Component méthode validate${state} state correspond à l id du view-state 54

EXEMPLE @Component public class BookingValidator { public void validateenterbookingdetails(booking booking, ValidationContext context) { MessageContext messages = context.getmessagecontext(); if (booking.getcheckindate().before(today())) { messages.addmessage(new MessageBuilder().error ().source("checkindate"). defaulttext("check in date must be a future date").build()); } else if (!booking.getcheckindate().before (booking.getcheckoutdate())) { messages.addmessage(new MessageBuilder().error ().source("checkoutdate"). defaulttext("check out date must be later than check in date").build()); } } } 55

SUPPRESSION DE LA VALIDATION <view-state id="chooseamenities" model="booking"> <transition on="proceed" to="reviewbooking"> <transition on="back" to="enterbookingdetails" validate="false" /> </view-state> 56