La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

© 2007 – DNG La face cachée de GWT Sami Jaber Webmaster du site DotNetGuru.org (DNG) Architecte Valtech Toulouse Developpez.com Tv4it.com Sfeir, SmartTrade.

Présentations similaires


Présentation au sujet: "© 2007 – DNG La face cachée de GWT Sami Jaber Webmaster du site DotNetGuru.org (DNG) Architecte Valtech Toulouse Developpez.com Tv4it.com Sfeir, SmartTrade."— Transcription de la présentation:

1 © 2007 – DNG La face cachée de GWT Sami Jaber Webmaster du site DotNetGuru.org (DNG) Architecte Valtech Toulouse Developpez.com Tv4it.com Sfeir, SmartTrade

2 2 Programme Introduction Les différentes phases du compilateur GWT Le modèle RPC Conclusion

3 3 Introduction GWT se décompose en deux grandes briques Le Framework de composants Le compilateur Java vers Javascript Le compilateur GWT incarne les racines du Framework Peu ou pas darticles traitent de cette face cachée de GWT Les performances de GWT découlent directement du fonctionnement du compilateur

4 4 Le packaging GWT gwt-user.jar gwt-dev-[platform].jar Le Framework Les outils Didier Sami

5 5 Le compilateur GWTCompiler com.myApplication.MyApplication -out c:\website\com.my…. Application Java Site HTML/JavaScript

6 6 Les phases de compilation Chargement du module (méta-données, règles) Préparation des règles de permutation Pour chaque permutation, compilation Java vers JavaScript Génération des fichiers

7 7 Chargement des modules Le chargeur de module (ModuleDefLoader) effectue un parcours récursif de larbre des modules Extrait les informations des schémas Binding Generators Extends, Properties, …

8 8 Les permutations Chargement du module (méta-données, règles) Préparation des règles de permutation Pour chaque permutation, compilation Java vers JavaScript Génération des fichiers

9 9 Principe général Un seul code Java Télécharge uniquement la version nécessaire au navigateur client … puis le met en cache indéfiniment

10 10 La compilation Chargement du module (méta-données, règles) Préparation des règles de permutation Pour chaque permutation, compilation Java vers JavaScript Génération des fichiers

11 11 Quest-ce quun AST ? GWT sappuie intensivement sur les AST (Abstract Syntax Tree) Un arbre syntaxique est une représentation arborescente dun code source (généralement) compilé Expressions Blocks Types Exp IfStmt Stmt IdUse AssignStmt Exp Block

12 12 Compilateur : Eclipse JDT IfStmt :: if Exp then Stmt Class ASTNode{ protected ASTNode[] children; } class IfStmt extends ASTNode{ final protected Token token_if, Exp exp, Token token_then, Stmt stmt; IfStmt(Token token_if, Exp exp, Token token_then, Stmt stmt){ // parse tree construction this.token_if = token_if; this.exp = exp; this.token_then = token_then; this.stmt = stmt; // IR tree construction children[0] = exp; children[1] = stmt; }

13 13 Fusion des arbres AST AST JDT Java AST GWT (JProgram) JSNI JavaDoc IType IField JClassType GWT sappuie sur Eclipse JDT pour compiler les classes et sur TypeOracle son parseur maison pour les sources ICompilationUnit

14 14 Pourquoi cette fusion ? Optimisation et gestion native !

15 15 Optimisations du compilateur Pruner Supprime les classes, les champs et les méthodes inutilisées Method and class finalizer Finalise les méthodes et les champs MakeCallsStatic Réécrit le code non-polymorphique en appel statique TypeTightener Le compilateur infère les types les plus spécifiques pour éviter dutiliser des types abstraits MethodCallTightener Réalise la même opération que TypeTighener, mais pour les appels de méthodes (appels polymorphiques transformés en appels spécifiques) DeadCodeElimination Elimination de code mort (jamais appelé) MethodInliner

16 16 S T A T I Q U E ! Loptimisation induite par le compilateur peut réduire potentiellement par 10 la taille du code JavaScript Possible uniquement grâce au fait que le chargement dynamique est impossible Pas deval() JavaScript ou de newInstance() Java Même dans un contexte purement JavaScript (non AJAX), le compilateur GWT a du sens ! La théorie des compilateurs appliquée à JavaScript (il fallait oser !)

17 17 Le modèle de communication Toute communication avec la couche serveur sopère via le protocole RPC Le service sappuie sur lAPI JEE Servlet Les appels sont asynchrones (classe AsyncCallback) Le code serveur nest pas converti en Javascript Possibilité dutiliser le JDK 1.5 et toutes les classes du Framework Java Les types sont sérializés automatiquement par GWT suivant un format spécifique RPC

18 18 Le Framework RPC Le développeur implémente 3 classes ServiceDefTarget (Interface) RemoteService (Interface) RemoteServiceServlet (class) MyServiceAsync (Interface) MyService (Interface) MyServiceImpl (class) MyServiceProxy (class) Classes importées du Framework Classes à implémenter Générées automatiquement implémente hérite relation implémente ClientServeur

19 19 Le service RPC côté serveur Limplémentation du service package com.mycompany.project.server; import java.util.Date; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.mycompany.project.client.MyOrderService; import com.mycompany.project.client.Person; public class MyOrderServiceImpl extends RemoteServiceServlet implements MyOrderService { public String getOrderByName(String name) { return name; } public Person getPersonByID(int id) { Person p = new Person(); p.setAge(new Date()); p.setName("Martin"); p.setId(1); p.setSalary(100); return p; } Interface de Service Remote HttpServlet JavaBean Serializable public class Person implements java.io.Serializable { private int id; private float salary; private String name; private Date age; // setters/getters }

20 20 Le service RPC côté client Définir linterface de service package com.mycompany.project.client; import com.google.gwt.user.client.rpc.RemoteService; public interface MyOrderService extends RemoteService { public String getOrderByName(String name); public Person getPersonByID(int id); } Linterface asynchrone cliente est générée par les outils MyOrderServiceAsync orderService = (MyOrderServiceAsync) GWT.create(MyOrderService.class); // Converti le proxy en ServiceDefTarget pour lui assigner l URL ServiceDefTarget endpoint = (ServiceDefTarget) orderService; String moduleRelativeURL = GWT.getModuleBaseURL() + "MyOrderService"; endpoint.setServiceEntryPoint(moduleRelativeURL); Instancie le bon service et récupère un proxy Asynchrone

21 21 Quelques remarques GWT 1.4 a sensiblement revu son architecture RPC pour la rendre plus extensible Possibilité dutiliser tout type de moteur dinjection POJO compatible : Spring Guice, EJB 3, RMI, Corba … Attention à la sérialisation des types GWT donne limpression que le couplage client et serveur est faible : cest une illusion !! Oubliez côté client les protocoles tels que Soap ou RMI… Le client reste en JavaScript et JavaScript même masqué par Java reste du bon vieux JavaScript interprété RPC is the way to go

22 22 10 raisons dinvestir dans GWT Communauté Marge de progression Productivité Richesse fonctionnelle (AJAX) Pérennisation des compétences (JAVA) Extensibilité Intégration avec lexistant Standards ouverts (XML, JSon, J2EE) Open Source Simplicité attention : « simple » pas « simpliste »

23 23 Quelques liens Sites GWT Groups Livres GWT en Action Formations 3 jours sur GWT 1.4 Me contacter : (formation, conseil, séminaires, mariages,


Télécharger ppt "© 2007 – DNG La face cachée de GWT Sami Jaber Webmaster du site DotNetGuru.org (DNG) Architecte Valtech Toulouse Developpez.com Tv4it.com Sfeir, SmartTrade."

Présentations similaires


Annonces Google