1 / 23

La face cachée de GWT

La face cachée de GWT. Sami Jaber Webmaster du site DotNetGuru.org (DNG) Architecte Valtech Toulouse. Developpez.com Tv4it.com Sfeir, SmartTrade. Programme. Introduction Les différentes phases du compilateur GWT Le modèle RPC Conclusion. Introduction.

Download Presentation

La face cachée de GWT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  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 d’articles traitent de cette face cachée de GWT • Les performances de GWT découlent directement du fonctionnement du compilateur

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

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

  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. Chargement des modules • Le chargeur de module (ModuleDefLoader) effectue un parcours récursif de l’arbre des modules • Extrait les informations des schémas • Binding • Generators • Extends, Properties, …

  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. Principe général Télécharge uniquement la version nécessaireau navigateur client Un seul codeJava … puis le met en cacheindéfiniment

  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. Qu’est-ce qu’un AST ? • GWT s’appuie intensivement sur les AST (Abstract Syntax Tree) • Un arbre syntaxique est une représentation arborescente d’un code source (généralement) compilé • Expressions • Blocks • Types Stmt AssignStmt Block IfStmt IdUse Exp Exp Stmt

  12. 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; } } Compilateur : Eclipse JDT

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

  14. Pourquoi cette fusion ? Optimisation et gestion native !

  15. 1 2 3 4 5 6 7 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 d’utiliser 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. S T A T I Q U E ! • L’optimisation 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 d’eval() 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. Le modèle de communication • Toute communication avec la couche serveur s’opère via le protocole RPC • Le service s’appuie sur l’API JEE Servlet • Les appels sont asynchrones (classe AsyncCallback) • Le code serveur n’est pas converti en Javascript • Possibilité d’utiliser 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. Le Framework RPC • Le développeur implémente 3 classes ServiceDefTarget(Interface) RemoteService(Interface) RemoteServiceServlet(class) hérite hérite implémente MyServiceAsync(Interface) MyService(Interface) MyServiceImpl(class) relation Classes importées du Framework implémente MyServiceProxy(class) Classes à implémenter Générées automatiquement Client Serveur

  19. Le service RPC côté serveur • L’implé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; publicclass MyOrderServiceImpl extendsRemoteServiceServlet implements MyOrderService { public String getOrderByName(String name) { return name; } publicPerson getPersonByID(int id) { Person p = new Person(); p.setAge(new Date()); p.setName("Martin"); p.setId(1); p.setSalary(100); return p; } } HttpServlet Interface de Service Remote JavaBeanSerializable publicclassPersonimplements java.io.Serializable { privateintid; privatefloatsalary; privateStringname; privateDateage; // setters/getters }

  20. Le service RPC côté client • Définir l’interface de service package com.mycompany.project.client; import com.google.gwt.user.client.rpc.RemoteService; publicinterface MyOrderService extends RemoteService { public String getOrderByName(String name); public Person getPersonByID(int id); } • L’interface 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 serviceet récupère un proxy Asynchrone

  21. Quelques remarques • GWT 1.4 a sensiblement revu son architecture RPC pour la rendre plus extensible • Possibilité d’utiliser tout type de moteur d’injection POJO compatible : • Spring • Guice, EJB 3, RMI, Corba … • Attention à la sérialisation des types • GWT donne l’impression que le couplage client et serveur est faible : c’est 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. 10 raisons d’investir dans GWT • Communauté • Marge de progression • Productivité • Richesse fonctionnelle (AJAX) • Pérennisation des compétences (JAVA) • Extensibilité • Intégration avec l’existant • Standards ouverts (XML, JSon, J2EE) • Open Source • Simplicité • attention : « simple » pas « simpliste »

  23. Quelques liens • Sites • GWT Groups • http://www.onGWT.com • http://www.gwtpowered.com • Livres • GWT en Action • Formations • 3 jours sur GWT 1.4 • Me contacter : sami.jaber@gmail.com (formation, conseil, séminaires, mariages, baptême...)

More Related