SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Cours du soir GWT
     Mardi 3 Juin 2008
              Anthony Dahanne
   anthony.dahanne@valtech.fr
        http://blog.dahanne.net
           http://blog.valtech.fr
Sommaire du cours

  Présentation de GWT
  (TP) Mise en place de l’environnement de dév.
  (TP) Ecriture d’un 1er module GWT
  Présentation de widgets (+TP)
  Présentation des panels (+TP)
  Présentation d’extensions GWT (GXT, GWT Ext)
  Création d’un Widget (+TP)
  Appels distants via RPC (+TP)
  Plus loin dans GWT : cycle de vie du compilateur,
  tests unitaires, etc...
Présentation (1/5) : Pourquoi GWT ?

  Problème : Difficulté d’écriture du code JavaScript
      débug compliqué (alert !)
      interprétation différente selon le navigateur
      manque de compétence JS
      etc…
  Solution : Générer du code JavaScript à partir de
  code Java
     Compétences nombreuses (!)
     IDE (ex: Eclipse) au point, nombreux et riches
     Possibilité de débug pas à pas
     1 code source pour tous les navigateurs !
     Optimisation (code JS “compacté”, génération de ce qui est
     utile uniquement)
Présentation (2/5) : Historique

  Projet racheté à 1 start up
  Créé par Bruce Johnson
  Proposé en Open source fin 2006
  Dès le début, une forte communauté, nombreuses
  bibliothèques dont EXT GWT,
Présentation (3/5) : Performances

  Optimisation (temps de chargement réduits) au
  coeur de GWT :
     Fichiers échangés compressés avec gzip
     Allégement de la taille des fichiers grâce aux noms raccourcis
     de variables et fonctions JS
     Chargement des scripts dans une iframe cachée en tâche de
     fond
     Utilisation de la mise en cache des navigateurs
     Le navigateur ne charge que les fonctions dont il a besoin
     Lors de la compilation, le code JS pour chacun des
     navigateurs est généré : le navigateur gardera en cache le
     code approprié
Présentation (4/5) : Des limitations…

  GWT supporte les primitives Java, à l’exception de
  Long (pas de support 64 bits en JS) qui est mappé
  en float
  L’interpréteur JS est mono thread
  GWT ne supporte pas le chargement dynamique
  de classes
     Class c = Class.forName(“”);
     Object o =c.getInstance();
     Etc…
  Styles définis dans feuille CSS et réutilisés via
  GWT
Présentation (5/5) : Des concurrents…

  Microsoft Volta (C# , VB.NET) très en retard (moins
  performant)
  Morfik (http://www.morfik.com) approche orientée
  BDD et XML (!)
  GWT est aujourd’hui le framework de génération
  d’application web riches le plus avancé.
Environnement de développement

  Nous utiliserons :
     Eclipse 3.3
     Une jdk Sun moderne (>=5.0)
     Windows ou Linux ou Mac OS
     GWT 1.5 RC1 (sortie le 28/05/2008)
     Tomcat (embarqué dans le projet GWT)
     Navigateur Web (Firefox et ses plugins comme Firebug sera
     bienvenue !)
Mon premier projet GWT !

  Un projet GWT sous Eclipse en quelques
  commandes à partir de la racine de gwt-1.5.0
  fraîchement décompressé :
  Création d’un répertoire contenant le projet :
     >mkdir MonProjetGwt puis >cd MonProjetGwt
  Création du projet Eclipse :
     ..projectCreator.cmd -eclipse MaPremiereApplicationGwt
  Création de l’application :
     ..applicationCreator.cmd -eclipse MaPremiereApplicationGwt
     fr.valtech.client.MonApp
  Il n’y a plus qu’à lancer Eclipse et importer le
  projet créée !
Mon premier projet GWT !

  Structure du projet :
        Pour lancer le projet, il suffit d’
   utiliser le MonApp.launch et de le
   lancer en cliquant droit dessus
   “Run as Java Application”
   La console GWT ainsi qu’un
   navigateur GWT se lancent !
Mon premier projet GWT

  2 modes de lancement :
     Hosted (ou géré) : application exécutée en tant que bytecode
     Java : permet de faciliter le code-compile-test-debug (console
     de debug, permet d’exploiter les points d’arrêt dans Eclipse,
     etc…)
     Web : Le navigateur lit simplement le code généré par le
     compilateur GWT et l’interprète naturellement
Mon 1er module GWT

  Représenté par un fichier XML (MonApp.gwt.xml),
  il est composé de :
     Un ou plusieurs modules hérités
     Un point d’entrée (le “main”)
     Un chemin des sources, un autre des ressources
     Scripts JS et CSS
     Config vers les servlets RPC
     Etc…
Présentation de widgets

  Pleins de Widget : boutons, labels, cases à
  cocher, listes, arbres, etc…
  UIObject est la super classe , qui gère
  coordonnées, titre, visibilité et taille de tout objet
  graphique
  Les widgets héritent de la super classe Widget qui
  proposent en plus des opérations hiérarchiques
  attachement au parent, etc…)
  Les widgets proposent des événements basés sur
  des listeners Java
     FocusListener, MouseListener, KeyBoardListener, etc…
Présentation de Widgets

  TextBox : zone de saisie
  Button : bouton HTML
  Label : créer une zone de texte
  Hyperlink :lien “interne”
  ListBox : liste de valeurs
  HTMLTable, FlexTable, Grid
  MenuBar : création de menu pop-up
  Tree : décomposition d’une liste sous un arbre
  SuggestBox : interroge un oracle pour prédiction
Présentation de Widgets

  HTML : permet de place du code HTML
  Image : insère une portion d’image ou une image
  entière
  ImageBundle :
     permet d’atténuer les latences réseaux en évitant les aller et
     retour
     Regroupe plusieurs images en une : en JS + CSS, les images
     seront chargées sous la forme de portion d’une unique grosse
     image
     Nous rappelle le Keep Alive HTTP !
Présentation des Panels

  A comparer à Swing ou Windows.form
  En GWT, on a plutôt fusionné la notion de Layout
  et de Panel
  4 types de Panel :
     Simple
     Complexe
     Table
     Split
Présentation des Panels

  FocusPanel : les éléments fils gèrent le focus
  FormPanel : simule soumission d’un form. HTML ?
  PopUpPanel et DialogBox
  AbsolutePanel
  Les enfants de CellPanel : DockPanel,
  HorizontalPanel, VerticalPanel
  FlowPanel, StackPanel
  HTMLPanel : intégration de GWT dans sites
  existants
  DisclosurePanel : une encoche démasque les fils
Présentation d’extension GWT

  GWT plutôt sobre par rapport à Flex et SilverLight
  Les extensions rajoutent de l’AJAX (DnD,
  transitions, etc…)
  2 familles d’extensions :
     Les wrapper, widgets qui encapsulent du code JavaScript
     Les natives, directement écrites en GWT, n’importent pas de
     code JavaScript supplémentaire (permettent l’optimisation du
     code, d’être paramétrées, etc…)
  Des problèmes de licence apparaissent !
  GWT s’appuie sur GWT-WL, basé sur, entre autres,
  Scriptaculous
Présentation d’extension GWT

  GWT-DnD : le célèbre Glisser/Déplacer
  GWT-Ext, wrapper ExtJS
     la plus impressionnante, mais au coeur d’une polémique suite
     à son changement de licence Apache 2.0 vers double licence
     GPL + commerciale
  GXT ou ExtGWT, librairie native GWT, en retard par
  rapport à GWT-Ext
  GWT Window Manager
Création de Widgets

  Dériver de la classe Widget ou d’une de ses sous
  classes
     Bien observer la classe DOM
     Bien réfléchir aux événements gérés, notamment en utilisant
     sinkEvent, gestion unifiée des événements entre navigateurs
     UIObject ferait l’affaire, mais ne gère pas les événements
  Ou dériver de la classe Composite, pour contenir
  d’autres Widgets
Appels distants

  Tout appel distant passe par Remote Procedure
  Call, qui s’appuie sur JEE
  Appels asynchrones !
  Rappelle Corba !
     Une interface de service (signature de méthodes distantes)
     Implémentée côté serveur
     Une interface plus technique, représente l’interface de service
     mais en plus technique, faisant apparaître un AsyncCallBack
     qui contiendra les réponses de l’appel
Appels distants

  Attention aux types de retour des services!
  JavaScript n’est pas aussi riche que Java (long,
  etc…)
  Ils doivent être sérialisables
  Ne pas oublier le fichier des module XML dans
  lequel on explicite le service utilisée et son
  implémentation
Mais encore , GWT c’est …

  I18N
  Dynamic Binding :
     Chargement dynamique des classes
     Réflexion
     Impl I = Class.forName(ClassName).newInstance();
  Deferred Binding
     Alimentation de variables à l’exécution (runtime)
     Imp I = GWT.create(ClassName);
     Le compilateur a la visibilité du code lors de la compilation, il
     peut l’optimiser
     GWT génère le JS pour chaque navigateur, pour chaque
     d’implémentation de DOM.java
Mais encore , GWT c’est …

  Des tests unitaires, à travers GWTTestCase que
  l’on hérite
  On implémente getModuleName() pour récupérer
  son module
  On le teste (assertions)
FIN


Mais peut être ne s’agit il que du début !
Références

  Cours GWT par Sami Jaber (Valtech Training)
     http://www.dng-consulting.com
  GWT DnD :
     http://code.google.com/p/gwt-dnd/wiki/GettingStartedWith2_x
  GXT (ext GWT)
     http://extjs.com/products/gxt/
  Ongwt.com
  Une appli GWT riche
     http://www.queweb.com
  La démo de GWT
     http://gwt.google.com/samples/KitchenSink/KitchenSink.html
Licence du document

  Ce document est protégé par le contrat :
  Creative Commons Paternité-Pas d'Utilisation
  Commerciale-Partage des Conditions Initiales à
  l'Identique 2.0 France License.

Weitere ähnliche Inhalte

Was ist angesagt?

Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Jean-Michel Doudoux
 
Nantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenantNantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenantJean-Michel Doudoux
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de donnéesFranck SIMON
 
Introduction à GWT - GTI780 & MTI780 - ETS - A09
Introduction à GWT - GTI780 & MTI780 - ETS - A09Introduction à GWT - GTI780 & MTI780 - ETS - A09
Introduction à GWT - GTI780 & MTI780 - ETS - A09Claude Coulombe
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrenteFranck SIMON
 
Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)Cyrille Le Clerc
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...ENSET, Université Hassan II Casablanca
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitIppon
 
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 MavenArnaud Héritier
 
Programmation des Threads en java
Programmation des Threads en javaProgrammation des Threads en java
Programmation des Threads en javaEzéquiel Tsagué
 

Was ist angesagt? (20)

Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
Rapport tp3 j2ee
Rapport tp3 j2eeRapport tp3 j2ee
Rapport tp3 j2ee
 
Rapport tp2 j2ee
Rapport tp2 j2eeRapport tp2 j2ee
Rapport tp2 j2ee
 
Nantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenantNantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenant
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de données
 
Présentation1
Présentation1Présentation1
Présentation1
 
Introduction à GWT - GTI780 & MTI780 - ETS - A09
Introduction à GWT - GTI780 & MTI780 - ETS - A09Introduction à GWT - GTI780 & MTI780 - ETS - A09
Introduction à GWT - GTI780 & MTI780 - ETS - A09
 
Presentation de gwt maven
Presentation de  gwt mavenPresentation de  gwt maven
Presentation de gwt maven
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrente
 
Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)
 
Android ORMLite
Android   ORMLiteAndroid   ORMLite
Android ORMLite
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 
Multithreading
MultithreadingMultithreading
Multithreading
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur Git
 
UKO-JAVA1001-slides
UKO-JAVA1001-slidesUKO-JAVA1001-slides
UKO-JAVA1001-slides
 
Threads
ThreadsThreads
Threads
 
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
 
Programmation des Threads en java
Programmation des Threads en javaProgrammation des Threads en java
Programmation des Threads en java
 

Andere mochten auch

Orsys - Cycle certifiant - Développeur web en Java
Orsys - Cycle certifiant - Développeur web en JavaOrsys - Cycle certifiant - Développeur web en Java
Orsys - Cycle certifiant - Développeur web en JavaORSYS
 
Cleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionCleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionSylvain Leroy
 

Andere mochten auch (6)

Orsys - Cycle certifiant - Développeur web en Java
Orsys - Cycle certifiant - Développeur web en JavaOrsys - Cycle certifiant - Développeur web en Java
Orsys - Cycle certifiant - Développeur web en Java
 
Cleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionCleancode / Tocea / Introduction
Cleancode / Tocea / Introduction
 
Java Efficace
Java EfficaceJava Efficace
Java Efficace
 
Les tableaux en Java
Les tableaux en JavaLes tableaux en Java
Les tableaux en Java
 
Java collection
Java collection Java collection
Java collection
 
uml
umluml
uml
 

Ähnlich wie Cours du soir_gwt

Présentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflinePrésentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflineDNG Consulting
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
Google Web Toolkit 1.5 Presentation Web Creative Common
Google Web Toolkit 1.5 Presentation Web Creative CommonGoogle Web Toolkit 1.5 Presentation Web Creative Common
Google Web Toolkit 1.5 Presentation Web Creative CommonStéphane Liétard
 
Google App Engine For Java
Google App Engine For JavaGoogle App Engine For Java
Google App Engine For Javatcouery
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lroxmed
 
retour sur confoo2011 et Symfony2
retour sur confoo2011 et Symfony2retour sur confoo2011 et Symfony2
retour sur confoo2011 et Symfony2Saad Tazi
 
Lyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenantLyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenantJean-Michel Doudoux
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introductionsabrine_hamdi
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders BattleArnaud Héritier
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache MavenArnaud Héritier
 
Du développement à la livraison avec JavaFX et le JDK9
Du développement à la livraison avec JavaFX et le JDK9Du développement à la livraison avec JavaFX et le JDK9
Du développement à la livraison avec JavaFX et le JDK9Thierry Wasylczenko
 
Java uik-chap1-intro java
Java uik-chap1-intro javaJava uik-chap1-intro java
Java uik-chap1-intro javaAmel Morchdi
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsAntoine Rey
 

Ähnlich wie Cours du soir_gwt (20)

Présentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflinePrésentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'Offline
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Google Web Toolkit 1.5 Presentation Web Creative Common
Google Web Toolkit 1.5 Presentation Web Creative CommonGoogle Web Toolkit 1.5 Presentation Web Creative Common
Google Web Toolkit 1.5 Presentation Web Creative Common
 
Google App Engine For Java
Google App Engine For JavaGoogle App Engine For Java
Google App Engine For Java
 
Gdd07 Gwt Dig
Gdd07 Gwt DigGdd07 Gwt Dig
Gdd07 Gwt Dig
 
Chapitre 4 Java script
Chapitre 4 Java scriptChapitre 4 Java script
Chapitre 4 Java script
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lr
 
retour sur confoo2011 et Symfony2
retour sur confoo2011 et Symfony2retour sur confoo2011 et Symfony2
retour sur confoo2011 et Symfony2
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Lyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenantLyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenant
 
Architecture .net
Architecture  .netArchitecture  .net
Architecture .net
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introduction
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
 
Le futur de gwt
Le futur de gwtLe futur de gwt
Le futur de gwt
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
Du développement à la livraison avec JavaFX et le JDK9
Du développement à la livraison avec JavaFX et le JDK9Du développement à la livraison avec JavaFX et le JDK9
Du développement à la livraison avec JavaFX et le JDK9
 
Java uik-chap1-intro java
Java uik-chap1-intro javaJava uik-chap1-intro java
Java uik-chap1-intro java
 
Chap 02 poo en java
Chap 02 poo en javaChap 02 poo en java
Chap 02 poo en java
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du temps
 
Gwt final
Gwt finalGwt final
Gwt final
 

Cours du soir_gwt

  • 1. Cours du soir GWT Mardi 3 Juin 2008 Anthony Dahanne anthony.dahanne@valtech.fr http://blog.dahanne.net http://blog.valtech.fr
  • 2. Sommaire du cours Présentation de GWT (TP) Mise en place de l’environnement de dév. (TP) Ecriture d’un 1er module GWT Présentation de widgets (+TP) Présentation des panels (+TP) Présentation d’extensions GWT (GXT, GWT Ext) Création d’un Widget (+TP) Appels distants via RPC (+TP) Plus loin dans GWT : cycle de vie du compilateur, tests unitaires, etc...
  • 3. Présentation (1/5) : Pourquoi GWT ? Problème : Difficulté d’écriture du code JavaScript débug compliqué (alert !) interprétation différente selon le navigateur manque de compétence JS etc… Solution : Générer du code JavaScript à partir de code Java Compétences nombreuses (!) IDE (ex: Eclipse) au point, nombreux et riches Possibilité de débug pas à pas 1 code source pour tous les navigateurs ! Optimisation (code JS “compacté”, génération de ce qui est utile uniquement)
  • 4. Présentation (2/5) : Historique Projet racheté à 1 start up Créé par Bruce Johnson Proposé en Open source fin 2006 Dès le début, une forte communauté, nombreuses bibliothèques dont EXT GWT,
  • 5. Présentation (3/5) : Performances Optimisation (temps de chargement réduits) au coeur de GWT : Fichiers échangés compressés avec gzip Allégement de la taille des fichiers grâce aux noms raccourcis de variables et fonctions JS Chargement des scripts dans une iframe cachée en tâche de fond Utilisation de la mise en cache des navigateurs Le navigateur ne charge que les fonctions dont il a besoin Lors de la compilation, le code JS pour chacun des navigateurs est généré : le navigateur gardera en cache le code approprié
  • 6. Présentation (4/5) : Des limitations… GWT supporte les primitives Java, à l’exception de Long (pas de support 64 bits en JS) qui est mappé en float L’interpréteur JS est mono thread GWT ne supporte pas le chargement dynamique de classes Class c = Class.forName(“”); Object o =c.getInstance(); Etc… Styles définis dans feuille CSS et réutilisés via GWT
  • 7. Présentation (5/5) : Des concurrents… Microsoft Volta (C# , VB.NET) très en retard (moins performant) Morfik (http://www.morfik.com) approche orientée BDD et XML (!) GWT est aujourd’hui le framework de génération d’application web riches le plus avancé.
  • 8. Environnement de développement Nous utiliserons : Eclipse 3.3 Une jdk Sun moderne (>=5.0) Windows ou Linux ou Mac OS GWT 1.5 RC1 (sortie le 28/05/2008) Tomcat (embarqué dans le projet GWT) Navigateur Web (Firefox et ses plugins comme Firebug sera bienvenue !)
  • 9. Mon premier projet GWT ! Un projet GWT sous Eclipse en quelques commandes à partir de la racine de gwt-1.5.0 fraîchement décompressé : Création d’un répertoire contenant le projet : >mkdir MonProjetGwt puis >cd MonProjetGwt Création du projet Eclipse : ..projectCreator.cmd -eclipse MaPremiereApplicationGwt Création de l’application : ..applicationCreator.cmd -eclipse MaPremiereApplicationGwt fr.valtech.client.MonApp Il n’y a plus qu’à lancer Eclipse et importer le projet créée !
  • 10. Mon premier projet GWT ! Structure du projet : Pour lancer le projet, il suffit d’ utiliser le MonApp.launch et de le lancer en cliquant droit dessus “Run as Java Application” La console GWT ainsi qu’un navigateur GWT se lancent !
  • 11. Mon premier projet GWT 2 modes de lancement : Hosted (ou géré) : application exécutée en tant que bytecode Java : permet de faciliter le code-compile-test-debug (console de debug, permet d’exploiter les points d’arrêt dans Eclipse, etc…) Web : Le navigateur lit simplement le code généré par le compilateur GWT et l’interprète naturellement
  • 12. Mon 1er module GWT Représenté par un fichier XML (MonApp.gwt.xml), il est composé de : Un ou plusieurs modules hérités Un point d’entrée (le “main”) Un chemin des sources, un autre des ressources Scripts JS et CSS Config vers les servlets RPC Etc…
  • 13. Présentation de widgets Pleins de Widget : boutons, labels, cases à cocher, listes, arbres, etc… UIObject est la super classe , qui gère coordonnées, titre, visibilité et taille de tout objet graphique Les widgets héritent de la super classe Widget qui proposent en plus des opérations hiérarchiques attachement au parent, etc…) Les widgets proposent des événements basés sur des listeners Java FocusListener, MouseListener, KeyBoardListener, etc…
  • 14. Présentation de Widgets TextBox : zone de saisie Button : bouton HTML Label : créer une zone de texte Hyperlink :lien “interne” ListBox : liste de valeurs HTMLTable, FlexTable, Grid MenuBar : création de menu pop-up Tree : décomposition d’une liste sous un arbre SuggestBox : interroge un oracle pour prédiction
  • 15. Présentation de Widgets HTML : permet de place du code HTML Image : insère une portion d’image ou une image entière ImageBundle : permet d’atténuer les latences réseaux en évitant les aller et retour Regroupe plusieurs images en une : en JS + CSS, les images seront chargées sous la forme de portion d’une unique grosse image Nous rappelle le Keep Alive HTTP !
  • 16. Présentation des Panels A comparer à Swing ou Windows.form En GWT, on a plutôt fusionné la notion de Layout et de Panel 4 types de Panel : Simple Complexe Table Split
  • 17. Présentation des Panels FocusPanel : les éléments fils gèrent le focus FormPanel : simule soumission d’un form. HTML ? PopUpPanel et DialogBox AbsolutePanel Les enfants de CellPanel : DockPanel, HorizontalPanel, VerticalPanel FlowPanel, StackPanel HTMLPanel : intégration de GWT dans sites existants DisclosurePanel : une encoche démasque les fils
  • 18. Présentation d’extension GWT GWT plutôt sobre par rapport à Flex et SilverLight Les extensions rajoutent de l’AJAX (DnD, transitions, etc…) 2 familles d’extensions : Les wrapper, widgets qui encapsulent du code JavaScript Les natives, directement écrites en GWT, n’importent pas de code JavaScript supplémentaire (permettent l’optimisation du code, d’être paramétrées, etc…) Des problèmes de licence apparaissent ! GWT s’appuie sur GWT-WL, basé sur, entre autres, Scriptaculous
  • 19. Présentation d’extension GWT GWT-DnD : le célèbre Glisser/Déplacer GWT-Ext, wrapper ExtJS la plus impressionnante, mais au coeur d’une polémique suite à son changement de licence Apache 2.0 vers double licence GPL + commerciale GXT ou ExtGWT, librairie native GWT, en retard par rapport à GWT-Ext GWT Window Manager
  • 20. Création de Widgets Dériver de la classe Widget ou d’une de ses sous classes Bien observer la classe DOM Bien réfléchir aux événements gérés, notamment en utilisant sinkEvent, gestion unifiée des événements entre navigateurs UIObject ferait l’affaire, mais ne gère pas les événements Ou dériver de la classe Composite, pour contenir d’autres Widgets
  • 21. Appels distants Tout appel distant passe par Remote Procedure Call, qui s’appuie sur JEE Appels asynchrones ! Rappelle Corba ! Une interface de service (signature de méthodes distantes) Implémentée côté serveur Une interface plus technique, représente l’interface de service mais en plus technique, faisant apparaître un AsyncCallBack qui contiendra les réponses de l’appel
  • 22. Appels distants Attention aux types de retour des services! JavaScript n’est pas aussi riche que Java (long, etc…) Ils doivent être sérialisables Ne pas oublier le fichier des module XML dans lequel on explicite le service utilisée et son implémentation
  • 23. Mais encore , GWT c’est … I18N Dynamic Binding : Chargement dynamique des classes Réflexion Impl I = Class.forName(ClassName).newInstance(); Deferred Binding Alimentation de variables à l’exécution (runtime) Imp I = GWT.create(ClassName); Le compilateur a la visibilité du code lors de la compilation, il peut l’optimiser GWT génère le JS pour chaque navigateur, pour chaque d’implémentation de DOM.java
  • 24. Mais encore , GWT c’est … Des tests unitaires, à travers GWTTestCase que l’on hérite On implémente getModuleName() pour récupérer son module On le teste (assertions)
  • 25. FIN Mais peut être ne s’agit il que du début !
  • 26. Références Cours GWT par Sami Jaber (Valtech Training) http://www.dng-consulting.com GWT DnD : http://code.google.com/p/gwt-dnd/wiki/GettingStartedWith2_x GXT (ext GWT) http://extjs.com/products/gxt/ Ongwt.com Une appli GWT riche http://www.queweb.com La démo de GWT http://gwt.google.com/samples/KitchenSink/KitchenSink.html
  • 27. Licence du document Ce document est protégé par le contrat : Creative Commons Paternité-Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique 2.0 France License.