SlideShare ist ein Scribd-Unternehmen logo
1 von 20
DNG Consulting
http://www.dng-consulting.com




 GWT et HTML 5 pour
 le mode Offline
   Introduction & Présentation




                                 v1.0
Speaker : Sami JABER

 Fondateur de la société DNG Consulting
 Auteur du livre "Programmation GWT 2" paru aux
  éditions Eyrolles
   Seconde édition en librairie depuis Septembre 2012 avec la couverture
  de GWT 2.5

 DNG Consulting : Société de conseil et de formation
  spécialisée sur les technologies JEE et
  .NET
   Projet en mode agile pour plusieurs grands comptes
   Forte expertise autour de GWT depuis 6 ans



                                                                           2
Un rappel sur GWT

  Projet initialement créé par une petite équipe chez
 Google (qui assure encore la gouvernance)
  Proposé en Open Source en 2006 (licence Apache)
  Très large communauté
      Projet hébergé à l’adresse http://code.google.com/webtoolkit/
      De nombreux livres, conférences et littérature sur le sujet
      De plus en plus d’applications sont en cours de migration vers GWT
      (Silverlight et Flash disparaissent peu à peu du marché)

  Téléchargé plus d’un million de fois (version 1.5 à 2.4)
  La plupart des entreprises du CAC 40 commencent à s’y
 intéresser de près comme par exemple JCDecaux, Orange,
 LVMH…
                                                                           3
La philosophie de GWT

 Pour GWT, un Developpeur Web ne doit pas être un
gourou de Javascript, HTML ou CSS
 GWT s’appuie sur un modèle de composants graphiques
similaires aux applications clients lourds classiques
 GWT transforme ensuite de manière (quasi) transparente
pour le développeur la génération du code JS/HTML à partir
de Java
 GWT a été conçu pour être multi-navigateurs, le
développeur ne se soucie pas des détails techniques de tel
ou tel navigateur
 JavaScript devient une sorte d’assembleur du Web
(optimisé, crypté et compressé)                          4
10 lignes de code pour convaincre

                                                                       Code Java
                   public class MyFirstProject implements EntryPoint {

                       public void onModuleLoad() {
                        final Label l = new Label("Mon Label");
                        Button b = new Button("Changer libellé");
                        b.addClickHandler(new ClickHandler(){

                                  @Override
                                  public void onClick(ClickEvent event) {
                                            l.setText("Libellé modifié");
                                  }});
                           RootPanel.get().add(l);
     Après click           RootPanel.get().add(b);               Génère
                       }
                   }




                                                                 Code JS


                                                                               5
Multi-navigateurs et multicanal

             Un seul code qui génère ensuite
               plusieurs scripts JavaScript
                  (les "permutations« )



                        Un seul
                         code
                      Mycode.java


                 Optimisé sans artifices
                         du type :
                If (browser=FF) faire ceci
                If (browser=IE) faire cela


                                               6
GWT et HTML 5

 GWT intègre les nouvelles API du standard HTML 5
   AppCache (possibilité d’utiliser une application en mode déconnecté)
   Offline Storage (possibilité de stocker des données dans la base Offline)
   CSS 3, les animations, les layout, …

 D’autres intégrations sont en cours, notamment :
   WebGL (il existe un Quake développé en GWT)
   Canvas

 Le projet « Elemental » vise à fournir un binding pour
l’ensemble des API HTML 5 pour GWT
   Un pré-processeur extrait les contrats d’interface du standard HTML 5
 pour générer des stubs GWT
   Permet de prendre en compte en temps réel les évolutions HTML 5
                                                                           7
Focus sur l’Offline

  De plus en plus d’applications Web nécessitent une
 utilisation déconnectée
    La 3G n’offre pas toujours la bande passante suffisante, notamment lors
  d’un usage mobile
    Plus l’application est importante, plus les scripts JS à télécharger sont
  importants, coût au chargement
     Coder pour l’offline sans passer par HTML revient à cibler 3 plateformes
  différentes (Android, iOS, WinPhone)

  Avec un marché de plus en plus morcelé, HTML 5 devient
 une nécessité économique
    La spécification AppCache pour le chargement applicatif
    La spécification LocalStorage pour la base de données déconnecté


                                                                                8
Application Cache

 Possibilité de « surfer » sur un site en local sans aucun
 aller/retour réseau
   Le chargement est instantané, le serveur n’est plus sollicité pour des
 échanges graphiques

 En mode Online, le navigateur s’appuie sur un fichier de
métadonnées listant les fichiers à pré-télécharger




 La liste des ressources de ce fichier est
 téléchargée dans le cache du navigateur
 qui les stocke jusqu’à changement du fichier manifest

                                                                            9
Un linker pour générer le Manifest




                               Genérateur de code

 A chaque ajout d’une ressource statique dans le projet,
une entrée est automatiquement ajoutée au fichier Manifest
   Même dans le cas d’interfaces ClientBundle !
   Les regroupements d’images (ImageBundle) sont également ajoutés en
 phase de post compilation
                                                                    10
Evènements Application Cache

 La spécification propose plusieurs états et évènements
pour détecter l’état du cache :
  public enum Type {{
   public enum Type
    UNKNOWN("unknown"), CHECKING("checking"), CACHED("cached"),
     UNKNOWN("unknown"), CHECKING("checking"), CACHED("cached"),
    NO_UPDATE("noupdate"), DOWNLOADING("downloading"),
     NO_UPDATE("noupdate"), DOWNLOADING("downloading"),
    PROGRESS("progress"), UPDATE_READY("updateready"),
     PROGRESS("progress"), UPDATE_READY("updateready"),
    OBSOLETE("obsolete"), ERROR("error");
     OBSOLETE("obsolete"), ERROR("error");


  Possibilité d’automatiser les mises à jour
window.applicationCache.addEventListener('updateready', function(e) {{
 window.applicationCache.addEventListener('updateready', function(e)
    if (window.appCache.status == appCache.UPDATEREADY) {{
     if (window.appCache.status == appCache.UPDATEREADY)
      // Un nouvel appCache est dispo, On le recharge
       // Un nouvel appCache est dispo, On le recharge
      window.applicationCache.swapCache();
       window.applicationCache.swapCache();
      if (confirm(Nouvelle version disponible! Reload?')) {{
       if (confirm(Nouvelle version disponible! Reload?'))
         window.location.reload();
          window.location.reload();
      }}

                                                                         11
Le stockage de données Offline

 De nombreuses spécifications HTML 5 ont été créées
pour répondre au problème de base de données locale
   IndexedDB : une sorte de base hiérarchique à base de fichier plat
  - Support très faible de la part des navigateurs
   Web SQL : une sorte de sqlite embarqué dans le navigateur
  - Le W3C a abandonné cette spécification par manque d’alternative
   Files API, Cookies, … : Pas ou peu de support dans IE
   Web Storage et LocalStorage : support très large et mature

 Gagnant : LocalStorage, un simple dictionnaire textuel
        localStorage.setItem(‘myKey', myValue);
         localStorage.setItem(‘myKey', myValue);
        var maValeur = localStorage.getItem(‘myKey');
         var maValeur = localStorage.getItem(‘myKey');
        localStorage.removeItem(‘myKey‘)
         localStorage.removeItem(‘myKey‘)


                                                                       12
Spécificités du LocalStorage

 Limitation de la taille maximum de la base à 5 Mo
(paramétrable…mais pas toujours)
 Sérialisation des objets complexes délicate, nécessité
de passer par un format de description tel que JSon
 Excellent support par les navigateurs




                                                           13
GWT et l’Offline : duo parfait

  GWT supporte les deux spécifications HTML5 Offline
    Unifie le fonctionnement de l’AppCache sur la plupart des navigateurs
  (grâce au Deferred Binding)
    Rend consistant l’API LocalStorage pour prendre en compte les
  spécificités (ou les bugs) des navigateurs (IE8 lance une exception dans
  certains cas et ne supporte pas totalement le mécanisme standard)
    Les types sérialisés côté clients sont les mêmes types que ceux stockés
  côté serveur (le même POJO Java)

  La sérialisation est le sujet sensible de l’Offline
    Avec LocalStorage, tout est chaîne de caractère, quel format choisir ?
  JSon ? XML ? Du text plain ?
    Comment unifier la sérialisation sachant que les services sont souvent
  semblables en Offine et Online ? les entités serveur et clients aussi…

                                                                             14
Problématique de sérialisation
 JSon n’est pas une solution viable si l’on souhaite
supporter d’anciens navigateurs tels que Firefox 3.6
   Il n’est pas possible d’utiliser la méthode native JSON.Stringify() avec
 certaines versions de Firefox 3.6 (limitation)
   AutoBeans (API introduite dans GWT 2.1 et RequestFactory) n’utilise
 pas Stringify() mais s’avère trop verbeux (les noms des propriétés
 sont stockés dans le protocole)

 Les performances lors de la désérialisation/sérialisation
dans le localStorage peuvent être pénalisantes
   Parfois nécessaire d’optimiser les requêtes côté client en créant des
 index (comme une base de données)

 Petite parenthèse : Jboss Errai est un outil fournissant
une implémentation JPA par-dessus LocalStorage
                                                                           15
Problématique de sérialisation
 Pour contourner la limitation de Json.Stringify(), nous
avons opté pour le format de sérialisation GWT-RPC 1.0
   Fiable, performant et surtout ne nécessite aucun ajout de bibliothèque
 supplémentaire côté client (Gson, gwt-json,…)
    Les Custom Field Serializers sont générés en fonction des contrats
 d’interface, cela alourdit la permutation mais simplifie les développements
   Un générateur de code parcourt les interfaces de services et génère les
 classes de sérialisation/désérialisation




                                                                               16
Contrats de services homogènes
public class SearchClientAction implements Action {
                                                                      ClientManagerServiceAsync
                                                                      ClientManagerServiceAsync
  private SearchClientCondition condition;
  private AbstractAsyncCallback<SearchClientPagingResult> callback;

  public void execute() {

      if(ApplicationStateManager.get().isOnline()){
         ServiceLocator.getSearchClientService().searchClient(condition, callback);
       } else {
         ServiceLocator.getLocalClientManager().searchClient(condition, callback);
       }
  }

  public SearchClientAction initCallback() {
       this.callback = new AbstractAsyncCallback<SearchClientPagingResult>("SearchClientAction") {
             @Override
             public void success(SearchClientPagingResult result) {
                   callback.onSuccess(result);
             }                                                      Un seul et même
                                                                     Un seul et même
             @Override
             public void failure(Throwable caught) { Contrat de service pour l’online et l’offline ! !
                                                     Contrat de service pour l’online et l’offline
                   callback.onFailure(caught);
             }
        };    return this;
  }

 public SearchClientAction setCondition(SearchClientCondition condition) {
     this.condition = condition;
     return this;                                                                                  17
 }}
Et les requêtes en Offline ?

  Il n’existe aucun langage de requête
    On est logé à la même enseigne que les bases NoSQL

  Comment implémenter les mécanismes de jointure ?
  Comment s’assurer de la cohérence et de l’unicité des
 clés (il n’y a pas de séquence partagée) ?
  Comment créer des projections ? Des regroupements ?



        Tout est à faire manuellement !
        Ne pas sous-estimer la charge
                                                           18
GWT, les mobiles et l’offline

  GWT intègre nativement des outils pour le mobile
  Mais aussi les principaux évènements mobiles
    Touch Sensitive (zoom à deux doigts, déplacement, …)
    Le click de souris est traité comme une activation du doigt (TouchEvent)

  L’implémentation des spécifications offline respecte ceux
 des navigateurs (Safari sur iOS, Webkit sur Android)




                                                                          19
Exemple d’application GWT




                            Projet Cobra --Arkadin
                            Projet Cobra Arkadin




                                                     20

Weitere ähnliche Inhalte

Was ist angesagt?

Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework springAntoine Rey
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 
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
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...ENSET, Université Hassan II Casablanca
 
Bean Validation - Cours v 1.1
Bean Validation - Cours v 1.1Bean Validation - Cours v 1.1
Bean Validation - Cours v 1.1Laurent Guérin
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesENSET, Université Hassan II Casablanca
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EEInes Ouaz
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASGuillaume Sauthier
 
3 shared preference_sq_lite
3 shared preference_sq_lite3 shared preference_sq_lite
3 shared preference_sq_liteSaber LAJILI
 
Bbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic searchBbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic searchIdriss Neumann
 

Was ist angesagt? (20)

Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Springioc
SpringiocSpringioc
Springioc
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
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
 
Jboss Seam
Jboss SeamJboss Seam
Jboss Seam
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 
Bean Validation - Cours v 1.1
Bean Validation - Cours v 1.1Bean Validation - Cours v 1.1
Bean Validation - Cours v 1.1
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnAS
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
3 shared preference_sq_lite
3 shared preference_sq_lite3 shared preference_sq_lite
3 shared preference_sq_lite
 
Rapport tp3 j2ee
Rapport tp3 j2eeRapport tp3 j2ee
Rapport tp3 j2ee
 
Bbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic searchBbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic search
 

Ähnlich wie Présentation GWT et HTML 5 pour l'Offline

Les apports d'HTML5 pour l'interopérabilité des applications géospatiales
Les apports d'HTML5 pour l'interopérabilité des applications géospatialesLes apports d'HTML5 pour l'interopérabilité des applications géospatiales
Les apports d'HTML5 pour l'interopérabilité des applications géospatialesGaëtan LAVENU
 
Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?GreenIvory
 
Gtug2 Mobile app with web technlogy
Gtug2 Mobile app with web technlogyGtug2 Mobile app with web technlogy
Gtug2 Mobile app with web technlogySacha Leprêtre
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lroxmed
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileIppon
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéJulien Dubois
 
Cours du soir_gwt
Cours du soir_gwtCours du soir_gwt
Cours du soir_gwtSaid Talibi
 
JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?Microsoft
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & TechniquesRachid NID SAID
 
Server Side Javascript in the cloud
Server Side Javascript in the cloudServer Side Javascript in the cloud
Server Side Javascript in the cloudstefounet
 
JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?benjguin
 
Google App Engine For Java
Google App Engine For JavaGoogle App Engine For Java
Google App Engine For Javatcouery
 
L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8davrous
 
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
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!CARA_Lyon
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!CARA_Lyon
 
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)Publicis Sapient Engineering
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Tugdual Grall
 
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
 

Ähnlich wie Présentation GWT et HTML 5 pour l'Offline (20)

Les apports d'HTML5 pour l'interopérabilité des applications géospatiales
Les apports d'HTML5 pour l'interopérabilité des applications géospatialesLes apports d'HTML5 pour l'interopérabilité des applications géospatiales
Les apports d'HTML5 pour l'interopérabilité des applications géospatiales
 
Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?
 
Gtug2 Mobile app with web technlogy
Gtug2 Mobile app with web technlogyGtug2 Mobile app with web technlogy
Gtug2 Mobile app with web technlogy
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lr
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
 
Cours du soir_gwt
Cours du soir_gwtCours du soir_gwt
Cours du soir_gwt
 
JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & Techniques
 
Server Side Javascript in the cloud
Server Side Javascript in the cloudServer Side Javascript in the cloud
Server Side Javascript in the cloud
 
JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?
 
Google App Engine For Java
Google App Engine For JavaGoogle App Engine For Java
Google App Engine For Java
 
L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8
 
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
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
 
Gdd07 Gwt Dig
Gdd07 Gwt DigGdd07 Gwt Dig
Gdd07 Gwt Dig
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)
 
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)
 

Mehr von DNG Consulting

Présentation DevoxxFR 2015 sur GWT
Présentation DevoxxFR 2015 sur GWTPrésentation DevoxxFR 2015 sur GWT
Présentation DevoxxFR 2015 sur GWTDNG Consulting
 
GWT Introduction for Eclipse Day
GWT Introduction for Eclipse Day GWT Introduction for Eclipse Day
GWT Introduction for Eclipse Day DNG Consulting
 
Session GWT Devoxx France 2012 Cobra
Session GWT Devoxx France 2012 CobraSession GWT Devoxx France 2012 Cobra
Session GWT Devoxx France 2012 CobraDNG Consulting
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity frameworkDNG Consulting
 
Introduction au Domain Driven Design
Introduction au Domain Driven DesignIntroduction au Domain Driven Design
Introduction au Domain Driven DesignDNG Consulting
 
Resource Oriented Architecture
Resource Oriented ArchitectureResource Oriented Architecture
Resource Oriented ArchitectureDNG Consulting
 

Mehr von DNG Consulting (7)

Présentation DevoxxFR 2015 sur GWT
Présentation DevoxxFR 2015 sur GWTPrésentation DevoxxFR 2015 sur GWT
Présentation DevoxxFR 2015 sur GWT
 
Devoxx fr
Devoxx frDevoxx fr
Devoxx fr
 
GWT Introduction for Eclipse Day
GWT Introduction for Eclipse Day GWT Introduction for Eclipse Day
GWT Introduction for Eclipse Day
 
Session GWT Devoxx France 2012 Cobra
Session GWT Devoxx France 2012 CobraSession GWT Devoxx France 2012 Cobra
Session GWT Devoxx France 2012 Cobra
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity framework
 
Introduction au Domain Driven Design
Introduction au Domain Driven DesignIntroduction au Domain Driven Design
Introduction au Domain Driven Design
 
Resource Oriented Architecture
Resource Oriented ArchitectureResource Oriented Architecture
Resource Oriented Architecture
 

Présentation GWT et HTML 5 pour l'Offline

  • 1. DNG Consulting http://www.dng-consulting.com GWT et HTML 5 pour le mode Offline Introduction & Présentation v1.0
  • 2. Speaker : Sami JABER  Fondateur de la société DNG Consulting  Auteur du livre "Programmation GWT 2" paru aux éditions Eyrolles Seconde édition en librairie depuis Septembre 2012 avec la couverture de GWT 2.5  DNG Consulting : Société de conseil et de formation spécialisée sur les technologies JEE et .NET Projet en mode agile pour plusieurs grands comptes Forte expertise autour de GWT depuis 6 ans 2
  • 3. Un rappel sur GWT  Projet initialement créé par une petite équipe chez Google (qui assure encore la gouvernance)  Proposé en Open Source en 2006 (licence Apache)  Très large communauté Projet hébergé à l’adresse http://code.google.com/webtoolkit/ De nombreux livres, conférences et littérature sur le sujet De plus en plus d’applications sont en cours de migration vers GWT (Silverlight et Flash disparaissent peu à peu du marché)  Téléchargé plus d’un million de fois (version 1.5 à 2.4)  La plupart des entreprises du CAC 40 commencent à s’y intéresser de près comme par exemple JCDecaux, Orange, LVMH… 3
  • 4. La philosophie de GWT  Pour GWT, un Developpeur Web ne doit pas être un gourou de Javascript, HTML ou CSS  GWT s’appuie sur un modèle de composants graphiques similaires aux applications clients lourds classiques  GWT transforme ensuite de manière (quasi) transparente pour le développeur la génération du code JS/HTML à partir de Java  GWT a été conçu pour être multi-navigateurs, le développeur ne se soucie pas des détails techniques de tel ou tel navigateur  JavaScript devient une sorte d’assembleur du Web (optimisé, crypté et compressé) 4
  • 5. 10 lignes de code pour convaincre Code Java public class MyFirstProject implements EntryPoint { public void onModuleLoad() { final Label l = new Label("Mon Label"); Button b = new Button("Changer libellé"); b.addClickHandler(new ClickHandler(){ @Override public void onClick(ClickEvent event) { l.setText("Libellé modifié"); }}); RootPanel.get().add(l); Après click RootPanel.get().add(b); Génère } } Code JS 5
  • 6. Multi-navigateurs et multicanal Un seul code qui génère ensuite plusieurs scripts JavaScript (les "permutations« ) Un seul code Mycode.java Optimisé sans artifices du type : If (browser=FF) faire ceci If (browser=IE) faire cela 6
  • 7. GWT et HTML 5  GWT intègre les nouvelles API du standard HTML 5 AppCache (possibilité d’utiliser une application en mode déconnecté) Offline Storage (possibilité de stocker des données dans la base Offline) CSS 3, les animations, les layout, …  D’autres intégrations sont en cours, notamment : WebGL (il existe un Quake développé en GWT) Canvas  Le projet « Elemental » vise à fournir un binding pour l’ensemble des API HTML 5 pour GWT Un pré-processeur extrait les contrats d’interface du standard HTML 5 pour générer des stubs GWT Permet de prendre en compte en temps réel les évolutions HTML 5 7
  • 8. Focus sur l’Offline  De plus en plus d’applications Web nécessitent une utilisation déconnectée La 3G n’offre pas toujours la bande passante suffisante, notamment lors d’un usage mobile Plus l’application est importante, plus les scripts JS à télécharger sont importants, coût au chargement Coder pour l’offline sans passer par HTML revient à cibler 3 plateformes différentes (Android, iOS, WinPhone)  Avec un marché de plus en plus morcelé, HTML 5 devient une nécessité économique La spécification AppCache pour le chargement applicatif La spécification LocalStorage pour la base de données déconnecté 8
  • 9. Application Cache  Possibilité de « surfer » sur un site en local sans aucun aller/retour réseau Le chargement est instantané, le serveur n’est plus sollicité pour des échanges graphiques  En mode Online, le navigateur s’appuie sur un fichier de métadonnées listant les fichiers à pré-télécharger La liste des ressources de ce fichier est téléchargée dans le cache du navigateur qui les stocke jusqu’à changement du fichier manifest 9
  • 10. Un linker pour générer le Manifest Genérateur de code  A chaque ajout d’une ressource statique dans le projet, une entrée est automatiquement ajoutée au fichier Manifest Même dans le cas d’interfaces ClientBundle ! Les regroupements d’images (ImageBundle) sont également ajoutés en phase de post compilation 10
  • 11. Evènements Application Cache  La spécification propose plusieurs états et évènements pour détecter l’état du cache : public enum Type {{ public enum Type UNKNOWN("unknown"), CHECKING("checking"), CACHED("cached"), UNKNOWN("unknown"), CHECKING("checking"), CACHED("cached"), NO_UPDATE("noupdate"), DOWNLOADING("downloading"), NO_UPDATE("noupdate"), DOWNLOADING("downloading"), PROGRESS("progress"), UPDATE_READY("updateready"), PROGRESS("progress"), UPDATE_READY("updateready"), OBSOLETE("obsolete"), ERROR("error"); OBSOLETE("obsolete"), ERROR("error");  Possibilité d’automatiser les mises à jour window.applicationCache.addEventListener('updateready', function(e) {{ window.applicationCache.addEventListener('updateready', function(e) if (window.appCache.status == appCache.UPDATEREADY) {{ if (window.appCache.status == appCache.UPDATEREADY) // Un nouvel appCache est dispo, On le recharge // Un nouvel appCache est dispo, On le recharge window.applicationCache.swapCache(); window.applicationCache.swapCache(); if (confirm(Nouvelle version disponible! Reload?')) {{ if (confirm(Nouvelle version disponible! Reload?')) window.location.reload(); window.location.reload(); }} 11
  • 12. Le stockage de données Offline  De nombreuses spécifications HTML 5 ont été créées pour répondre au problème de base de données locale IndexedDB : une sorte de base hiérarchique à base de fichier plat - Support très faible de la part des navigateurs Web SQL : une sorte de sqlite embarqué dans le navigateur - Le W3C a abandonné cette spécification par manque d’alternative Files API, Cookies, … : Pas ou peu de support dans IE Web Storage et LocalStorage : support très large et mature  Gagnant : LocalStorage, un simple dictionnaire textuel localStorage.setItem(‘myKey', myValue); localStorage.setItem(‘myKey', myValue); var maValeur = localStorage.getItem(‘myKey'); var maValeur = localStorage.getItem(‘myKey'); localStorage.removeItem(‘myKey‘) localStorage.removeItem(‘myKey‘) 12
  • 13. Spécificités du LocalStorage  Limitation de la taille maximum de la base à 5 Mo (paramétrable…mais pas toujours)  Sérialisation des objets complexes délicate, nécessité de passer par un format de description tel que JSon  Excellent support par les navigateurs 13
  • 14. GWT et l’Offline : duo parfait  GWT supporte les deux spécifications HTML5 Offline Unifie le fonctionnement de l’AppCache sur la plupart des navigateurs (grâce au Deferred Binding) Rend consistant l’API LocalStorage pour prendre en compte les spécificités (ou les bugs) des navigateurs (IE8 lance une exception dans certains cas et ne supporte pas totalement le mécanisme standard) Les types sérialisés côté clients sont les mêmes types que ceux stockés côté serveur (le même POJO Java)  La sérialisation est le sujet sensible de l’Offline Avec LocalStorage, tout est chaîne de caractère, quel format choisir ? JSon ? XML ? Du text plain ? Comment unifier la sérialisation sachant que les services sont souvent semblables en Offine et Online ? les entités serveur et clients aussi… 14
  • 15. Problématique de sérialisation  JSon n’est pas une solution viable si l’on souhaite supporter d’anciens navigateurs tels que Firefox 3.6 Il n’est pas possible d’utiliser la méthode native JSON.Stringify() avec certaines versions de Firefox 3.6 (limitation) AutoBeans (API introduite dans GWT 2.1 et RequestFactory) n’utilise pas Stringify() mais s’avère trop verbeux (les noms des propriétés sont stockés dans le protocole)  Les performances lors de la désérialisation/sérialisation dans le localStorage peuvent être pénalisantes Parfois nécessaire d’optimiser les requêtes côté client en créant des index (comme une base de données)  Petite parenthèse : Jboss Errai est un outil fournissant une implémentation JPA par-dessus LocalStorage 15
  • 16. Problématique de sérialisation  Pour contourner la limitation de Json.Stringify(), nous avons opté pour le format de sérialisation GWT-RPC 1.0 Fiable, performant et surtout ne nécessite aucun ajout de bibliothèque supplémentaire côté client (Gson, gwt-json,…) Les Custom Field Serializers sont générés en fonction des contrats d’interface, cela alourdit la permutation mais simplifie les développements Un générateur de code parcourt les interfaces de services et génère les classes de sérialisation/désérialisation 16
  • 17. Contrats de services homogènes public class SearchClientAction implements Action { ClientManagerServiceAsync ClientManagerServiceAsync private SearchClientCondition condition; private AbstractAsyncCallback<SearchClientPagingResult> callback; public void execute() { if(ApplicationStateManager.get().isOnline()){ ServiceLocator.getSearchClientService().searchClient(condition, callback); } else { ServiceLocator.getLocalClientManager().searchClient(condition, callback); } } public SearchClientAction initCallback() { this.callback = new AbstractAsyncCallback<SearchClientPagingResult>("SearchClientAction") { @Override public void success(SearchClientPagingResult result) { callback.onSuccess(result); } Un seul et même Un seul et même @Override public void failure(Throwable caught) { Contrat de service pour l’online et l’offline ! ! Contrat de service pour l’online et l’offline callback.onFailure(caught); } }; return this; } public SearchClientAction setCondition(SearchClientCondition condition) { this.condition = condition; return this; 17 }}
  • 18. Et les requêtes en Offline ?  Il n’existe aucun langage de requête On est logé à la même enseigne que les bases NoSQL  Comment implémenter les mécanismes de jointure ?  Comment s’assurer de la cohérence et de l’unicité des clés (il n’y a pas de séquence partagée) ?  Comment créer des projections ? Des regroupements ? Tout est à faire manuellement ! Ne pas sous-estimer la charge 18
  • 19. GWT, les mobiles et l’offline  GWT intègre nativement des outils pour le mobile  Mais aussi les principaux évènements mobiles Touch Sensitive (zoom à deux doigts, déplacement, …) Le click de souris est traité comme une activation du doigt (TouchEvent)  L’implémentation des spécifications offline respecte ceux des navigateurs (Safari sur iOS, Webkit sur Android) 19
  • 20. Exemple d’application GWT Projet Cobra --Arkadin Projet Cobra Arkadin 20

Hinweis der Redaktion

  1. Entreprise JavaBeans 3.0
  2. Entreprise JavaBeans 3.0
  3. Entreprise JavaBeans 3.0 GWT est une techologie catalysée par AJAX et qui part du principe qu’un développeur Web doit pouvoir concevoir une application AJAX sans être être un expert JavaScript
  4. Entreprise JavaBeans 3.0