Upload
ltearno
View
358
Download
3
Embed Size (px)
DESCRIPTION
Un résumé de toutes les nouveautés à venir dans GWT 3.0 Java 8 Lambdas, JsInterop ... Avec un petit apparté sur les WebComponents
Citation preview
(c) LTE Consulting - Tous droits de reproduction interdits 1
Le futur de GWTCe que nous proposera la version 3.0…
GDG Saint-Quentin, 20 Mars 2014
(c) LTE Consulting - Tous droits de reproduction interdits 2
GWT aujourd’hui
100.000 développeurs utilisent GWT dans le monde
En interne chez Google : 1000 développeurs
Ecosystème dynamique
(c) LTE Consulting - Tous droits de reproduction interdits 3
Les nouveautés prévues pour GWT 3
Compatibilité avec Java 8
Les lambdas sont très attendues !
Amélioration du code JavaScript généré
Plus adapté aux navigateurs modernes.
Prise en charge de CSS3 (GSSResource)
Prise en charge du modèle FlexBox
JsInterop
Le vieux DevMode est mort…
(c) LTE Consulting - Tous droits de reproduction interdits 4
Les Lambdas
ok.addClickHandler( new ClickHandler() {@Overridepublic void onClick( ClickEvent event ) {
sendChange();}
} );
(c) LTE Consulting - Tous droits de reproduction interdits 5
Les Lambdas
ok.addClickHandler( new ClickHandler() {@Overridepublic void onClick( ClickEvent event ) {
sendChange();}
} );
(c) LTE Consulting - Tous droits de reproduction interdits 6
Les Lambdas
ok.addClickHandler( (event) -> sendChange() );
Et en javascript…
ok.addClickHandler( function (event) { sendChange(); } );
(c) LTE Consulting - Tous droits de reproduction interdits 7
Retour aux raisons de GWT
(c) LTE Consulting - Tous droits de reproduction interdits 8
Quelques raisons…
En 2006, l’écosystème des navigateurs est un enfer
Problèmes de compatibilité (trop de disparités => JQuery)
Non respect des standards
Fuites mémoire entre le DOM et le JavaScript
Il est difficile en s’appuyant sur le DOM de construire une hiérarchie de Widgets.
Pourtant les VM JavaScripts montent déjà en puissance et permettent de créer de vraies applications (ex : gmail)
(c) LTE Consulting - Tous droits de reproduction interdits 9
Et aujourd’hui ?
Les standards du Web évoluent très vite,
Les navigateurs sont beaucoup plus homogènes,
Plus puissants,
Avec mises à jour automatiques.
Le standard des Web Components va permettre de créer de la structure à bas niveau (DOM).
(c) LTE Consulting - Tous droits de reproduction interdits 10
Les Web ComponentsQui sont-ils ?
(c) LTE Consulting - Tous droits de reproduction interdits 11
Ils arrivent, qui sont-ils ? En fait un ensemble cohérent de plusieurs standards :
Shadow DOM :
Encapsulation de nœuds DOM
Etanchéité CSS
HTML Templates
Des modèles DOM, non parsés avant utilisation
Custom Elements
Possibilité de créer de vrais nouveaux éléments HTML
Possibilité d’ajouter des fonctionnalités à des éléments existants
HTML Imports
Importation d’unités HTML + CSS + JavaScript
Object Observer, etc…
(c) LTE Consulting - Tous droits de reproduction interdits 12
Future tendance du développement Web
Il est maintenant possible d’encapsuler ses Widgets directement en HTML,
Ils sont intégrables dans un document, sans pour autant polluer celui-ci.
On peut donc faire des « Widgets » directement en HTML
De nouveaux outils de développement vont émerger. Ceux-ci combleront le vide laissé par les éditeurs Flex entre autres…
GWT doit donc s’adapter et s’intégrer complètement dans cette mouvance.
(c) LTE Consulting - Tous droits de reproduction interdits 13
Nextgen JSInteropLa nouvelle couche d’interopérabilité GWT / JavaScript
(c) LTE Consulting - Tous droits de reproduction interdits 14
Pourquoi une nouvelle couche ?
Le code JSNI est trop fastidieux à écrire…
Le standard Web va offrir nativement un grand nombre de fonctionnalités haut-niveau proposées par des outils comme JQuery, AngularJS, etc.
Il sera donc beaucoup plus fréquent d’intégrer des bibliothèques natives JavaScript (bibliothèques de Web Components par exemple).
GWT pourra jouer le rôle de « glue » applicative.
Pour conserver une bonne productivité, GWT se doit donc d’offrir une intégration avec JavaScript encore plus transparente !
(c) LTE Consulting - Tous droits de reproduction interdits 15
Une petite piqûre de rappel au sujet de JSNI…
public class DOMImpl {public native EventTarget getCurrentTarget()/*-{
return this.currentTarget;}-*/;
public final native int getKeyCode() /*-{return this.keyCode;
}-*/;
public native boolean getMetaKey() /*-{return evt.metaKey;
}-*/;}
(c) LTE Consulting - Tous droits de reproduction interdits 16
Et au sujet des JavaScriptObject (représentation Java d’objets Javascript natifs)
public class Element extends Node {protected Element() {}
public final native double getScrollTop() /*-{return this.scrollTop;
}-*/;
public final native double getScrollWidth() /*-{return this.scrollWidth;
}-*/;}
(c) LTE Consulting - Tous droits de reproduction interdits 17
Inconvénients principaux des JSO
On ne peut les construire depuis Java (pas de new…),
Toutes leurs méthodes doivent être finales (pas de polymorphisme),
Une interface Java ne peut être implémentée que par UNE seule classe JSO,
On ne peut étendre des objets JavaScript.
Lorsque l’on wrappe une bibliothèque JavaScript, la plupart du code écrit est de la « glue » syntaxique…
(c) LTE Consulting - Tous droits de reproduction interdits 18
Quelques éléments du futur JSNI
(c) LTE Consulting - Tous droits de reproduction interdits 19
@JsInterfaceDéfinit le contrat d’un objet Javascript
@JsInterfaceinterface JQueryDialog{
void setProperty( String parameter, Object value );void show();
}
(c) LTE Consulting - Tous droits de reproduction interdits 20
@JsInterface( prototype = « … » )Spécifier le prototype Javascript
@JsInterface(prototype = "HTMLElement")public interface HTMLElement{
void setAttribute(String name, String value);<T extends HTMLElement> void appendChild( T element );
@JsProperty void setInnerText( String html );}
class MyCustomElement extends HTMLElement.Prototype{
…}
(c) LTE Consulting - Tous droits de reproduction interdits 21
@JsPropertyAccès aux champs d’un objet Javascript
@JsInterfacepublic interface HTMLElement {
void setAttribute(String atr, String value);<T extends HTMLElement> void appendChild( T element );
@JsProperty void setInnerText( String html );@JsProperty String getInnerText();
}
(c) LTE Consulting - Tous droits de reproduction interdits 22
Et d’autres encore…
Les méthodes par défaut d’interface de Java 8
GWT.jsni( « … » ) pour faciliter l’émission de code JavaScript
@JsExport pour exporter des prototypes dans le scope JavaScript
@JsConvert pour les conversions de type
@JsAware, @JsWrapper, JsObject, JsArray, etc.
(c) LTE Consulting - Tous droits de reproduction interdits 23
Et le mode Dev ?Un candidat remplaçant ?
(c) LTE Consulting - Tous droits de reproduction interdits 24
Disparition du mode dev
NPAPI, l’api défunte.
Super Dev Mode :
Compilation brouillon très rapide.
Débogage dans le navigateur grâce à Source Maps.
Perte de productivité énorme.
Réflexions autour d’une alternative
Mode Dev en JavaScript,
SourceMap debugger pour Eclipse
(c) LTE Consulting - Tous droits de reproduction interdits 25
Architecture du SuperDevMode
IDE Compilation Navigateur
Code JavaScript
Info Debug
Code Java
Outil de débogage du navigateur
(c) LTE Consulting - Tous droits de reproduction interdits 26
Probable architecture du prochain mode de développement
IDE Compilation Navigateur
Code JavaScript
Info Debug
Code Java
Debugger
Plugin de Débogage
API de Débogage du
navigateur
(c) LTE Consulting - Tous droits de reproduction interdits 27
Merci !
Twitter : @ltearno