GWT V 1.0 / May
Plan Informations – Slides Widgets GWT – Slides 8 – 11 RPC / JNSI - Slides Plugins – Slides Bibliothèques de Widgets – Slides Informations complémentaires – Slides
3 Pourquoi GWT ? GWT a été créé pour permettre à des développeurs java de créer des clients légers en AJAX sans toucher à javascript. Historique : 2006 : Première version de GWT (1,0) : La version 1.4 perd le tag « beta » et est considérée comme stable : Version 1.5 RC1 GWT est un projet open source sous licence Apache 2.0 Il est multi-plateforme.
4 Informations La dernière version stable est la GWT compatibilité java : Coté client le code java est transformé en JavaScript et doit être en Java 1.4 au plus Côté serveur le code java peut être en 1.6 tant que les réponses au client utilisent des Objets 1.4 compilable en JS : listeliste Le port par défaut du tomcat embarqué est le 8888 Télécharger GWT :
5 GWT : Support de java Les types de base de Java sont supportés, néanmoins Google précise qu'il est préférable d'employer des int plutôt que des long. La gestion des Exception est supportée, mis à part Throwable.getStackTrace() qui ne l'est pas en web mode. Le compilateur parse les assertions, mais ne génère pas de code JavaScript pour celles-ci. Le multithreading et la synchronisation ne sont pas disponibles. Les interpréteurs Javascript sont Monothread. Et si le compilateur de GWT laisse passer l'instruction synchronized, les méthodes de synchronisation ne sont pas disponibles. La réflexion n'est pas disponible dans son ensemble, pour des questions d'optimisation du JS généré. Il est néanmoins possible de récupéré un objet par sa classe en utilisant GWT.getTypeName(Object). La finalisation n'est pas supporté. L'instruction strictfp n'est pas supporté. Description complète des classes supportées
GWT : Gwt gère la plupart des incompatibilités de navigateurs. Gwt Supporte linternationalisation Infos Gwt supporte ant Maven et des tests unitaires On peut aisément ajouter des fonctions développées sous GWT à des sites web existants.
GWT : Principe de fonctionnement Code Java (1.4) Code JavaScript Compilateur GWT Client Serveur Code Java (1.6) Services existants RPC
GWT : Principe de fonctionnement.java Java 1.4 max package x.client.java Implémentations des Services Java 1.4, 1.5, 1.6 package x.server Interfaces des services. 1.4 max package x.client Aspect Développement RequêteRéponse Compilateur GWT.js Aspect Production Client Serveur Interfaces HTTP Requête Réponse Implémentation Services externes
Widgets GWT TextArea - javadocjavadocPasswordTextBox - javadoc javadoc ListBox javadoc HyperLink javadoc TextBox - javadocjavadocCheckBox - javadocjavadoc ToggleButton javadoc PushButton javadoc RadioButton - javadocjavadocButton - javadocjavadoc
Widgets GWT PopupPanel javadoc DialogBox javadoc TabBar javadoc Table javadoc Tree javadoc MenuBar javadoc
Widgets GWT HorizontalSplitPanel javadoc VerticalSplitPanel javadoc FlowPanel javadoc VerticalPanel javadoc HorizontalPanel javadoc StackPanel javadoc
Widgets GWT SuggestBox javadoc DisclosurePanel javadoc RichTextArea javadoc TabPanel javadoc DockPanel javadoc
GWT : Remote Procedure Calls Utiliser le RPC de google revient à faire un appel asynchrone en AJAX. Mais puisque nous travaillons en java, GWT passe par deux interfaces et une classe dimplémentation pour faire son appel. Les types de retour doivent être compilable en JS Lien : Description complète des classes supportéesDescription complète des classes supportées Concrètement les différents plugins GWT, permettent de simplifier lutilisation du RPC Génération automatique des Classes Générations automatiques des méthodes Ajout dune classe « Util » à linterface MyService pour simplifier lappel (GWT Designer)
GWT : RPC
GWT : RPC – Création du service MyService (Interface) public interface MyService extends RemoteService { public String myMethod(String s); } MyServiceAsycn (Interface) interface MyServiceAsync { public void myMethod(String s, AsyncCallback callback); } MyServiceImpl (Classe) public class MyServiceImpl extends RemoteServiceServlet implements MyService { public String myMethod(String s) { // Do something interesting with 's' here on the server. return s; }
GWT : RPC – Appel du service // (1) Create the client proxy. MyServiceAsync myService = (MyServiceAsync) GWT.create(MyService.class); // (2) Specify the URL at which our service implementation is running. ServiceDefTarget endpoint = (ServiceDefTarget) myService; String moduleRelativeURL = GWT.getModuleBaseURL() + " "; endpoint.setServiceEntryPoint(moduleRelativeURL); // (3) Create an asynchronous callback to handle the result. AsyncCallback callback = new AsyncCallback() { public void onSuccess(Object result) { // do some UI stuff to show success } public void onFailure(Throwable caught) { // do some UI stuff to show failure } }; // (4) Make the call. myService.myMethod(s, callback); }
17 GWT : JSNI (JavaScript Native Interface) Le compilateur de GWT transforme le code java en javascript. Mais il est parfois nécessaire d'insérer du code javascript dans le java. C'est pourquoi GWT propose JNSI, basé sur JNI on déclare les méthodes où sont insérées les portions de code js comme native puis on commente le code javascript. $wnd et $doc représentent les objets JavaScript window et document Exemple : public static native void alert(String msg) /*-{ $wnd.alert(msg); }-*/; Source
Informations diverses Les servlets, Service GWT, Fichiers js, EntryPoint, fichiers css, et autres sont mappés dans le fichier src/…package…/nomModule.gwt.xml Pour utiliser la fonction refresh avec GWT-Ext Dans le fichier public/nomModule.html déplacer la ligne Sous la balise fermante Pour insérer du GWT à un endroit spécifique de la page créez une div par exemple Puis dans les sources GWT RootPanel.get(« ici »).add(votreGwtAInserer);
19 Plugins Eclipse Cypal Studio GWT Designer (Instantiation) Netbeans GWT4NB : Tuto : 4nbDemo.htm
Plugins - Cypal Studio for GWT Cypal Studio for GWT : Est un plugin eclipse open-source. Ses fonctionnalités sont limitées et le GWT designer propose un panel similaire. Créer un module Créer un remote service Maintenir le fichier Async Lancer lapplication en hosted mode Compiler lapplication en JavaScript Déployer sur un serveur extérieur Exporter comme WAR
Plugins – GWT Designer GWT Designer (Instantiations) : Cest un plugin eclipse payant (40 $ /Poste), il est actuellement le meilleur plugin pour GWT. Il dispose des mêmes fonctionnalités que le plugin Cypal auxquelles sajoutent les suivantes : Editeur WYSIWYG (drag & drop) Génération bidirectionnelle du code Support du CSS Wizards générant certaines classes récurrentes Lancement de tests JUnit Refactoring – Internationalisation Création, Edition et Transformation de web project en projets GWT. Documentation très étoffée.
22 Bibliothèques de widgets GWT-Ext (LGPL) Utilise Ext-js pour son design Ext-GWT, anciennement MyGwt (Licence commerciale et GPL) Il existe de nombreuses autres librairies qui à lheure actuelle nont pas encore pris assez dimportance pour figurer dans ces slides.
GWT-Ext Il sagit dune librairie remodelant totalement les widgets basiques de GWT et leur fonctionnement. Concrètement mis à part deux ou trois widgets natifs de GWT qui conserveront leur utilité GWT-Ext doit être utilisée à 100% dans lapplication. GWT-Ext fourni 4 « showcase » proposant un large panel de possibilités et le code associé : Demo : Demo-Charts : Demo-Maps : Demo apports utilisateurs : Ainsi quune javadoc détaillée : Javadoc : Les slides suivant présente un petit échantillon des possibilités de GWT-Ext.
Widgets GWT-Ext Resizable/Dragable Panel ToolTip Loading Bar Editable Tree Menu Demo
Widgets GWT-Ext Forms Example Editable Grid Demo
GWT et Telosys - Fonctionnement GWT et Telosys fonctionnent parfaitement ensemble moyennant un build Ant approprié. En effet le fonctionnement par défaut de GWT ignore le web.xml contenu dans le projet. L'ajout d'une tâche Ant appropriée résout le problème, en ajoutant au.war le contenu du WebContent :
Pour appeler un service Telosys depuis le client GWT on commence par construire une requête. Elle prend comme paramètre la méthode et l'url. Puis on execute la requête tout en définissant la conduite à tenir en cas de succès ou d'échec GWT et Telosys - Communication RequestBuilder builder = new RequestBuilder( RequestBuilder.GET, GWT.getModuleBaseURL()+"/telo.svc?p1="+aTF.getText() +"&p2="+bTF.getText()); //On execute la requête Request response = builder.sendRequest(null, new RequestCallback() { //Si la requete échoue public void onError(Request request, Throwable exception) {} //Si le requête réussie public void onResponseReceived(Request request, Response response) {} });
28 Comparaison : GWT, Flex, OpenLaszlo CA- Performance côté client B+BAWidgets/Features/ Puissance du toolkit B-CBFacilitée de développement BAB+Performance côté serveur A+B+B-Portabilitée B-B+C+ (B+ avec plugin Eclipse payant (400 $) Processus de développement B- BSyntaxe du language OpenLaszloGWTFlex Lauteur de ce comparatif Kevin Whinnery, est un ingénieur système spécialisé dans le développement dinterfaces Web. Il semble avoir une préférence marquée pour Flex, ce qui devrait relativiser la note de facilitée de développement de GWT.
29 A venir Google développe son propre designer Version 1.5 de GWT (Google): Prise en charge de java 5 GWT Designer (Instantiations): Support des widgets de GWT-Ext en cours de développement, et peut-être Ext-GWT
30 Lexique JNI : est un framework qui permet à du code Java s'exécutant à l'intérieur de la JVM d'appeler et d'être appelé par des applications natives ou avec des bibliothèques logicielles basées sur d'autres langages. Module : Un module représente une application GWT, lors du déploiement chaque module est un.war EntryPoint : LEntryPoint est une classe qui hérite dEntryPoint cest par elle que lon place les différentes fonctions de lapplication dans le.html du module. On peut créer plusieurs EntryPoint dans un module pour clarifier le code. Mais elles doivent insérer dans le même.html pour ne pas générer derreurs.
Tutoriels Pour démarrer Installation : Premiers pas : Autres :
Exemples GWT-Ext Demo : Pibb : MapEcos : Infos : about-pollution-in-us.html about-pollution-in-us.html Project Gutenberg : Live Search (Beta)Live Search Wibokr : OpenKM : ContactOffice : (Beta) Google : Checkout / BaseCheckout Base Fabset :
Documentations Présentations Développez.com : Api Javadoc : toolkit.googlecode.com/svn/javadoc/1.4/index.htmlhttp://google-web- toolkit.googlecode.com/svn/javadoc/1.4/index.html
34 Sources GWT JNSI : oc.DeveloperGuide.JavaScriptNativeInterface.html oc.DeveloperGuide.JavaScriptNativeInterface.html News : Comparatif :