SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
GWT
            Google Web Toolkit

                            Manuel Carrasco Moñino
                            manolo@apache.org
                            twitter.com/dodotis




Créditos:
Qué vamos a ver




              •
                  Introducción a GWT
              •
                  Arquitectura y SDK
              •
                  Ventajas
              •
                  Trabajando con GWT
              •
                  Widgets y Librerias
              •
                  GWT ligero: Gquery
              •
                  Ajax Fácil: RequestFactory
              •
                  Talkwheel




Junio 2011              Madrid JUG             2
ALTERNATIVAS RIA


                   Browser-      Player-            Client-
                    based        based              based


 Thin                                                         Windows, Rich
        HTML
 Client                                                         Mac    Client




Reduced maintenance            Combined benefits                  Intuitive UI
Location independence         of thin and rich client         Inmediate response




   Junio 2011                       Madrid JUG                              3
Misión de GWT



   Mejorar radicalmente la experiencia web de los usuarios,
al permitir a los desarrolladores utilizar las herramientas de
Java para hacer Ajax que funcione en cualquier navegador
moderno.


                                                                  l
        o                                                  pi la e a
    dig                                                 om Jav
  Có rito                                             C     o        t
   esc ava                                               dig ascrip
                                                      có av
       J                                                  J
    en                                                 en
¿Qué NO es GWT?

No es una librería más de utilidades JS:
   
       jquery, prototype...
No es una librería de widgets ricos JS
   
       ext, scriptaculous, yui...
No es un framework JS, RIA, MVC, J2EE, etc
   
       mootools, dojo ...
   
       Vaadin, OpenLaslo, ZK, isNat ...
   
       Zend, Rails ...
   
       Struts, Spring MVC ...
¿Qué es GWT?


    Generador de javascript: convierte código java a javascript.
      
         Compilador + Linker + Optimizador completo (Descarga sólo
         lo necesario)

    El código generado puede incluirse en cualquier página (Java,
    Php, Rails...) e interacionar con ella y con el servidor (DOM,
    AJAX).

    El tiempo de compilación lo aprovecha para hacer su magia
    (compresión, ofuscación, css sprite, selección …)

    Proporciona librerías listas para usar: DOM, XML, JSON, I18N,
    RPC, RF, Widgets, MVP, etc.

    Puede interactuar con cualquier tipo de servidor (Ajax).

    Nos da herramientas para testear, depurar, ver estadísticas, ver
    rendimiento, etc ..

    ¡ Es un SDK !
La historia se repite

    C → ASM                                    Java → JS
          #include                             <inherits
           #ifdef                           <replace-with
  Inline ASM native code                Inline JS native code
          Compiler                             Compiler
         Optimizer                            Optimizer
           Linker                                Linker
 Ensamblador para cada            Javascript para cada navegador
        procesador                  Advanced IDE and tools for
Advanced IDE and tools for                testing, debuging
     testing, debuging

  Un lenguaje de alto nivel permite que el                AD
                                                     TIVID
  Desarrollador no se pierda en detalles de      DUC
  bajo nivel (DOM, JS, Ajax, XD, Browsers )   PRO
¿Por qué un compilador?


    Separar la mantenibilidad del código de la efectividad del
    ejecutable.

    El JS escrito a mano tiene un conflicto de intereses:
    
        Identificadores largos = aplicaciones grandes y lentas.
    
        Buen Formato = aplicaciones grandes y lentas.
    
        Comentarios = aplicaciones grandes y lentas

    La solución no es buscar convenciones en el código javascript
    escrito a mano, es crear un nivel de separación para que no
    se comprometan ambas (mantenibilidad, efectividad).

    Los errores comunes (sintaxis, errores de tipado etc) son
    corregibles en tiempo de compilación y no en el de ejecución.

    En tiempo de compilación se puede inyectar funcionalidades.
    
        Versionado, Ofuscación
    
        Peculiaridades/Hacks para cada navegador
    
        Compresión, Sprite …
    
        Conversion objetos servidor ↔ cliente
    
        Cross domain
¿Por qué Java?


    Sintaxis javascript próxima a java: fácil transformación

    Ecosistema de herramientas Java

    Diseño, patrones y POO: código más comprensible, menos
    documentación

    AJAX más intuitivo: patrones, interfaces, RPC, mismos
    objetos

    Reaprovechamiento de código: librerias, maven …

    Universal, la mayoría de programadores lo conocen.

    Incremento de productividad:
      
          El chequeo de tipos reduce errores
      
          Asistencia en la escritura de código
      
          Refactoring de verdad
      
          Debug
      
          !!! TDD !!!
¿RENDIMIENTO?


     JAVASCRIPT                        USUARIO                   DESARROLLO

Genera menos código            Aplicaciones más rápidas     Con el ahorro del tiempo
                               y con menos trucos HTTP.     invertido en depurar los
Analiza el código e incluye                                 problemas en cada
solo el necesario para         Elimina el uso envoltorios   navegador, se puede
cada navegador                 para funcionalidades         emplear más tiempo en
                               nativas de cada versión      la funcionalidad de la
A veces más lento, pero        de navegador.                aplicación.
más eficaz.
                                                            La eficiencia en el
Implementa gestores                                         desarrollo es la principal
propios para evitar 'leaks'                                 ventaja de Gwt.




  Junio 2011                           Madrid JUG                                10
ARQUITECTURA
      Y
    SDK
Java Code (IDE)

                               Java Server              Java Client
                                  Side                     Side



Toolkit (SDK)

                                      GWT development                           GWT compiler
                                      Debug/Hosted/Test                       Compiler/Optimizer
     GWT server                                                                JRE Emulation
     libs RPC/RF                                                               Libs & Widgets

                                    Test Runner        FF/IE/Ch-Plugin



    3ª Party                                                                            3ª Party
   Server libs                                                                         Server libs
                                                         JavaScript Bundles
                      J-Byte Code
                                                         (css, sprite)


                        RPC/RF/JSON/XML                     RF/JSON/XML       Other Backends
     JVM App-Server                          Browser
                                                                              (php, ruby, ...)

Junio 2011                                Madrid JUG                                               12
Componentes del Toolkit

           PARA EL CLIENTE                 PARA EL SERVIDOR

    •
         Libreria emulada JRE          Sólo en caso de Java:
    •
         java.util                     - Librería RPC
    •
         java.lang                     - Librería RequestFactory
    •
         Librería Core                 - Logger: client → server
    •
         JSON, XML, RPC, RF
    •
         DOM, UI, I18N
    •
         Compiler, Optimizer, Linker


        PARA EL DESARROLLO                 PARA PRODUCCIÓN
•
        Herramientas de debug          Speed Tracer
•
        Testing library                GAE
        (GWTestCase, HtmlUnit)
•
        App Server: Jetty/Tomcat
•
        Eclipse Plugin
•
        Browser plugin
•
        Maven plugin.
•
        Designer
Resumen

•
    GWT no hace posible nada que no fuera posible hacer de otra
    manera, pero sí hace que la acción sea mucho mas productiva.

•
     GWT no intenta ensalzar las virtudes de Java, sino reconocer
    el pragmatismo de las herramientas existentes, IDEs, entornos
    de prueba, tipos, etc.
•
     GWT no quiere hacernos olvidar DOM, CSS, navegador, etc,
    sino permitir escribir abstracciones de todo ello y hacernos
    mas productivos que escribiendo código JS a mano.
•
     Posiblemente, algún día GWT será capaz de compilar otros
    lenguajes, o incluso procesar JS con anotaciones de tipos.
•
     GWT hace productivo y posible el desarrollo de sitios webs de
    gran escala y abre la posibilidad de crear aplicaciones de
    nueva generación de manera fiable.
Ventajas
Gwt es simple




DESARROLLAR UNA APLICACIÓN
EN GWT PUEDE SER TAN SIMPLE
COMO DESARROLLAR
EN VISUAL BASIC




Junio 2011        Madrid JUG   16
Gwt es barato y FIABLE
                             SOPORTE
         Comunidad muy activa:
           •
             GWT-users cien mensajes diarios
           •
             GWT-contributors (lista moderada) 10 mensajes
             diarios
         Desarrollo
           •
             Grupo de committers limitado
           •
             Decenas de contributors
           •
             Exhaustiva revisión de código
           •
             Tests muy exigentes
           •
             Elevada calidad de código
           •
             Excelentes desarrolladores.
         Documentación
           •
             Muy bien explicado
           •
             Muy Actualizada
         Cientos de librerías
         Google


Junio 2011                      Madrid JUG                   17
Gwt ahorra costes



DESARROLLAR UNA APLICACIÓN EN
GWT ES BASTANTE MÁS RÁPIDO QUE
DESARROLARLA
EN TECNOLOGÍA J2EE




Junio 2011          Madrid JUG   18
TRABAJA OFFLINE



NO ES NECESARIO UN SERVIDOR:
 - HTML5 (Data store)
 - Aplicaciones sólo visuales
   (Juegos …)




Junio 2011         Madrid JUG   19
ALTAMENTE COMPATIBLE




  Los móviles están equipados con
  navegadores modernos y rápidos

  GWT produce Js y Ajax pequeño y
  optimizado para cada versión


Junio 2011                      Madrid JUG   20
JAVA → Patrones, Depuración, TDD, IDEs, CI ...




                                                                         Más idad
                              os                                           tiv
      alid
           ad             Men s                                         duc
    C                          re                           l   e   pro
Más ftware                erro                      sl egib
de S
    o                                          Má


Junio 2011                            Madrid JUG                               21
Trabajando con GWT




Junio 2011     Madrid JUG
Estructura del proyecto




Junio 2011      Madrid JUG
Pasos para desarrollar GWT
●   Prepara el entorno de trabajo: Eclipse + plugins

●   Crea un nuevo proyecto (Template, Archetype, webAppCreator):
     ●   Configura el módulo
     ●   Crea tu página html con la llamada al JS resultante
     ●   Desarrolla: cliente, servidor, RPC
●   Desarrolla
     ●   Testea: TestCase, GWTTestCase
     ●   Prueba y depura: DevMode + Browser + Plugin
●   Despliega
     ●   Compila a JS
     ●   Speed tracer
     ●
         Entrega




Junio 2011                        Madrid JUG
Plugins en Eclipse




Junio 2011        Madrid JUG
Crear un Proyecto




Junio 2011     Madrid JUG
Crear un proyecto Maven




Junio 2011     Madrid JUG
Ejecutar, Depurar, Test, Navegar, Compilar

●   Project → Run As → Web Application
●   Project → Debug As → Web Application
●   Project → Run As → Test




Junio 2011                    Madrid JUG
Plugin para browser

●   Suele ser bastante automático.
     ●   Windows: IE, FF, Chrome
     ●   Linux: FF, Chrome (experimental)
     ●   Mac: FF, Safari.
●   Para conectarse desde otros pcs: -bindAddress 0.0.0.0




Junio 2011                  Madrid JUG
GWT Widgets y Librerías




Junio 2011        Madrid JUG
Widgets
●    http://code.google.com/webtoolkit/tools/gwtdesigner/
●    http://gwt.google.com/samples/Showcase/Showcase.html
      ●   Widgets: Button PushButton RadioButton CheckBox DatePicker ToggleButton TextBox
          PasswordTextBox TextArea Hyperlink ListBox CellList MenuBar Tree CellTree SuggestBox
          RichTextArea FlexTable Grid CellTable CellBrowser TabBar DialogBox
      ●   Panels: PopupPanel StackPanel StackLayoutPanel HorizontalPanel VerticalPanel FlowPanel
          VerticalSplitPanel HorizontalSplitPanel SplitLayoutPanel DockPanel DockLayoutPanel
          TabPanel TabLayoutPanel DisclosurePanel

●    http://www.sencha.com/examples/explorer.html
●    http://www.smartclient.com/smartgwt/showcase/
●    http://mosaic.arkasoft.com/gwt-mosaic-current/Showcase.html




Junio 2011                       Madrid JUG
Librerías
●   Multitud de librerías:
     ●   Upload
     ●   Graficos: Chronoscope, Canvas
     ●   Enhancement: Gquery
     ●   APIS: gmaps, FaceBook,
     ●   HTML5




Junio 2011          Madrid JUG
GQuery




Junio 2011   Madrid JUG
Jquery & GWT

•
        Filosofía jquery: Haz mas, escribe menos: do more, write less.
•
        Permite utilizar GWT en escenarios donde se necesite
        progressive enhancement
•
        O donde utilizar GWT widgets pueda ser muy pesado
•
        Facil de entender y usar para los que conocen jquery
•
        Muy útil en aplicaciones que necesiten manipular DOM o SVG
•
        Java type-safe
•
        Testing, Debug
•
        Y a diferencia de jquery ...
    ●
        Mayor velocidad de selectores: Benchmark
    ●
        Menos codigo compilado, deferred binding.
    ●
        Reutilizacion de clases
    ●
        Descarga sólo lo que utilices
    ●
        Async loading
Sintaxis
    // Static imports
    import static com.google.gwt.query.client.GQuery.$;
    import static com.google.gwt.query.client.GQuery.$$;
    import static com.google.gwt.query.client.plugins.Effects.Effects;



  // Method chaining
  // Closures, Plugins
  $("#animate")
    .css("color", "red")
    .hover(
      new Function() {
        public void f(Element e) {
          $(e).css("color", "blue").as(Effects).stop().animate("fontSize: '+=10px'");
        }
      },
      new Function() {
        public void f(Element e) {
          $(e).css("color", "").as(Effects).stop().animate("fontSize: '-=10px'");
        }
      }
    );

 // JS Properties
 $("*").css($$("marginTop: 10px, marginLeft: 15px"));


 // SVG
 $("circle").attr("stroke-opacity", "0.86"));
Colecciones

    // Iterate
    $("table").each(new Function(){
      public void f(Element e) {
        if ($(e).hasClass("whatever")) {
          $(e).attr("myattr", "something");
        }
      }
    });

    // Maps
    List<String> ids = $("table").map(new Function(){
      public Object f(Element e, int i) {
        return e.getId();
      }
    });

    // Filter elements
    $("div").filter(new Predicate(){
      public boolean f(Element e, int index) {
        return index % 4 == 0;
      }
    });
Type-safe


     //it easy now to specify shorthand property...
     $("#hello").css(CSS.BACKGROUND.with(
                     RGBColor.TRANSPARENT,
                     UriValue.url("back.gif"),
                     BackgroundRepeat.NO_REPEAT,
                     BackgroundAttachment.SCROLL,
                     BackgroundPosition.CENTER))

                .css(CSS.BORDER.with(BorderWidth.THIN, BorderStyle.DASHED, RGBColor.AQUA))
                .css(CSS.TEXT_ALIGN.with(TextAlign.CENTER))
                // can take a constant value
                .css(CSS.FONT_SIZE.with(FontSize.SMALLER))
                // a length
                .css(CSS.FONT_SIZE.with(Length.px(4.5)))
                .width(100);
Interacciona con GWT

        // enhance GWT widgets
        List<Label> labels = $("div").widgets(Label.class);
        $(labels).append($("<img src='push.gif'/>").width(20));

        $(labels).click(new Function() {
          public void f(Widget w) {
            Label l = (Label) w;
          }
        });

        // Decouple code and use gquery to locate widgets.
        CellTree t = $("div.gwt-CellTree").widget(0);
        if (t != null) {
          t.getDefaultNodeSize();
        }
Escribiendo plugins
      public class Enhance extends GQuery {

          // A shortcut to the class
          public static final Class<Enhance> Enhance = Enhance.class;

          // Register the plugin in GQuery
          static {
            GQuery.registerPlugin(Enhance.class, new Plugin<Enhance>() {
              public Enhance init(GQuery gq) {
                return new Enhance(gq);
              }
            });
          }

          // Initialization
          public Enhance(GQuery gq) {
            super(gq);
          }

          public GQuery nuevoMetodo() {
            for (Element element : elements()) {
              $(element).hide();
            }
            return this;
          }
      }


            // Plugin usage
            $("input").as(Enhance).nuevoMetodo().css("color", "red");
Request Factory




Junio 2011   Madrid JUG
Nuevo en GWT 2.1, 2.2, 2.3
●
  Cell Widgets: listas, arboles, tablas, suggestions. Trabajan con grandes
cantidades de datos de manera optimizada.
●
  MVP Framework: Modelo Vista Presentador y EventBus.
●
  Request Factory: es la alternativa a RPC, son servicios orientados a datos
(validaciones, persistencia)
●
  Editors: Permite producir fácilmente widgets para editar objetos de
dominio
●
  Server-side Speed Traces: El servidor manda datos de rendimiento (ddbb,
memcache, etc) a speed tracer.
●
  Logging: enviar logs de cliente al servidor
●
  Safe HTML: Evita vulnabilidades XSS en cliente
●
  Integración with SpringSource developer tools: Roo
●
  HTML5 Canvas
●
  Google Integración
●
  Soporte para Single Sign On
●
  Local Storage



    Junio 2011              Madrid JUG
Request Factory
●   Facilita el uso de acceso a datos en el cliente.
●   Permite que puedas programar la parte del servidor en modo
    data-centric, proporcionando un alto nivel de abstracción en la
    capa de cliente basada en service-oriented.
●   En lado de cliente hace un seguimiento de los objetos y envia las
    modificaciones al servidor.
●   La comunicacion es pequeña (sólo lo que se modifica)
●   proporciona mecanismos de batch y cache.
●   RF proporciona su propio servlet y el código necesario para
    convertir objetos y llamar a métodos.
●   Se integra con widgets de presentación y editores
●   Fácil de testear y muy útil para hacer una aplicación MVP
// Proxy Class
                                                             @ProxyForName("com.paradigma.server.Subject")
// Entity class                                              public interface SubjectProxy extends EntityProxy {
public class Subject {                                         String getTitle();
                                                               Long getId();
    public static HashMap<Long, Subject> subjects              Integer getVersion();
        = new HashMap<Long, Subject>();                        void setTitle(String title);
    private static long cont = 0;                              void setId(Long id);
    private Integer version = 0;                               void setVersion(Integer version);
    private Long id = cont++;                                }
    private String title;

    public Long getId() {                                     // Service Class
      return id;                                              @ServiceName("com.paradigma.server.Subject")
    }                                                         public interface SubjectRequest extends RequestContext {
    public void setId(Long id) {                                Request<java.lang.Long> countSubjects();
      this.id = id;                                             Request<SubjectProxy> findSubject(Long id);
    }                                                           InstanceRequest<SubjectProxy, java.lang.Void> remove();
    public Integer getVersion() {                               InstanceRequest<SubjectProxy, java.lang.Void> persist();
      return version;                                           Request<String> myMethod(String arg);
    }                                                         }
    public void setVersion(Integer version) {
      this.version = version;                                // Request Interface
    }                                                        public interface MyRequestFactory extends RequestFactory {
    public void flush() {                                      SubjectRequest subjectRequest();
    }                                                        }
    public void persist() {
      version ++;
      subjects.put(getId(), this);
    }
    public void remove() {                                // Using it
      subjects.remove(getId());                           final EventBus eventBus = new SimpleEventBus();
    }                                                     // Here come the magic
    public static List<Subject> findAllSubjects() {       final MyRequestFactory rf = GWT.create(MyRequestFactory.class);
      return new ArrayList<Subject>(subjects.values());   rf.initialize(eventBus);
    }
    public static long countSubjects() {                  // find entities
      return subjects.size();                             rf.subjectRequest().findSubject(1l).fire(new Receiver<SubjectProxy>() {
    }                                                       public void onSuccess(SubjectProxy response) {
    public static Subject findSubject(Long id) {              // Edit and persist
      return subjects.get(id);                                SubjectRequest rq = rf.subjectRequest();
    }                                                         SubjectProxy editable = rq.edit(response);
    public String getTitle() {                                editable.setTitle("new title");
      return title;                                           rq.persist().using(editable).fire();
    }                                                       }
    public void setTitle(String title) {                  });
      this.title = title;                                 // Call remote methods
    }                                                     rf.subjectRequest().myMethod("mi mensaje").fire(new Receiver<String>() {
                                                            public void onSuccess(String response) {
    public static String myMethod(String arg) {             }
      return "Server " + arg;                             });
    }
}
MVP: Modelo Vista Presentador




Junio 2011           Madrid JUG
MVC




●   Desarrollo lento
●   Vinculos complejos
●   Muy acoplado
●   Dependencias cruzadas
MVP




●   Objetivo: Crear una vista simple
     ●   Testabilidad de la vista no es
         necesaria porque utilizamos
         componentes testados.
     ●   Se pueden crear Mock muy
         simples
●   Desarrollo Rapido con TDD
●   Muy desacoplado
●   Dependencias muy simples
Talkwheel es una plataforma de discusión interactiva que facilita las conversaciones en
grupo:
     Tiempo real.
     Pretende centralizar todas las conversaciones.
     Se Trabaja en añadir motores y elementos de análisis y conocimiento.
     Hacer la navegación muy visual.
     Servidor MUY ligero
Construida en: Java + GWT + Gquery + SVG
Primera versión : http://talkwheel.com

Contenu connexe

Tendances

GWT y SmartGWT - Introducción
GWT y SmartGWT - IntroducciónGWT y SmartGWT - Introducción
GWT y SmartGWT - IntroducciónVLASLOV
 
Herramientas Ágiles para Desarrollo
Herramientas Ágiles para DesarrolloHerramientas Ágiles para Desarrollo
Herramientas Ágiles para DesarrolloGastón Guillerón
 
Desarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.javaDesarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.javaSantiago Sora
 
Aprendiendo Java SCF
Aprendiendo Java SCFAprendiendo Java SCF
Aprendiendo Java SCFmikaelsorai
 
Java completo y agragado
Java completo y agragadoJava completo y agragado
Java completo y agragadoMaria
 
Lleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente NivelLleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente NivelSoftware Guru
 
Code Blast 2012 - Fast Mobile Prototyping
Code Blast 2012 - Fast Mobile PrototypingCode Blast 2012 - Fast Mobile Prototyping
Code Blast 2012 - Fast Mobile PrototypingINSIGNIA4U
 
Java kaime conpre
Java kaime conpreJava kaime conpre
Java kaime conprejtk1
 
Java kaime con
Java kaime conJava kaime con
Java kaime conjtk1
 
[ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java [ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java Eudris Cabrera
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduMicael Gallego
 

Tendances (18)

Aprendiendo GWT
Aprendiendo GWTAprendiendo GWT
Aprendiendo GWT
 
GWT y SmartGWT - Introducción
GWT y SmartGWT - IntroducciónGWT y SmartGWT - Introducción
GWT y SmartGWT - Introducción
 
Desarrollo de Aplicaciones Web 2.0 con GWT
Desarrollo de Aplicaciones Web 2.0 con GWTDesarrollo de Aplicaciones Web 2.0 con GWT
Desarrollo de Aplicaciones Web 2.0 con GWT
 
Herramientas Ágiles para Desarrollo
Herramientas Ágiles para DesarrolloHerramientas Ágiles para Desarrollo
Herramientas Ágiles para Desarrollo
 
Ut
UtUt
Ut
 
Desarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.javaDesarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.java
 
Aprendiendo Java SCF
Aprendiendo Java SCFAprendiendo Java SCF
Aprendiendo Java SCF
 
Java basico
Java basicoJava basico
Java basico
 
Java completo y agragado
Java completo y agragadoJava completo y agragado
Java completo y agragado
 
Lleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente NivelLleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente Nivel
 
Code Blast 2012 - Fast Mobile Prototyping
Code Blast 2012 - Fast Mobile PrototypingCode Blast 2012 - Fast Mobile Prototyping
Code Blast 2012 - Fast Mobile Prototyping
 
Java kaime conpre
Java kaime conpreJava kaime conpre
Java kaime conpre
 
Java kaime con
Java kaime conJava kaime con
Java kaime con
 
[ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java [ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java
 
App engine
App engineApp engine
App engine
 
Unidad 2. Lenguaje orientado a objetos
Unidad 2. Lenguaje orientado a objetosUnidad 2. Lenguaje orientado a objetos
Unidad 2. Lenguaje orientado a objetos
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenVidu
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 

Similaire à GWT: Generador de JavaScript para aplicaciones web

EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEB
EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEBEQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEB
EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEBUNIV DE CIENCIAS Y ARTES
 
EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEB
EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEBEQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEB
EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEBUNIV DE CIENCIAS Y ARTES
 
Aprendiendo a Programas en 4 horas JavaScript
Aprendiendo a Programas en 4 horas JavaScriptAprendiendo a Programas en 4 horas JavaScript
Aprendiendo a Programas en 4 horas JavaScriptKarsarmi
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.jsINSIGNIA4U
 
Herramientas agilesdesarrollo
Herramientas agilesdesarrolloHerramientas agilesdesarrollo
Herramientas agilesdesarrollogabrielpiccoli
 
Articulo tipos de ide y ajax control toolkit
Articulo   tipos de ide y ajax control toolkitArticulo   tipos de ide y ajax control toolkit
Articulo tipos de ide y ajax control toolkitCesar Escalante
 
TEMA Nº 1: INTRODUCCIÓN A J2EE
TEMA Nº 1: INTRODUCCIÓN A J2EETEMA Nº 1: INTRODUCCIÓN A J2EE
TEMA Nº 1: INTRODUCCIÓN A J2EEanyeni
 
TEMA Nº 1: INTRODUCCIÓN A J2EE
TEMA Nº 1: INTRODUCCIÓN A J2EETEMA Nº 1: INTRODUCCIÓN A J2EE
TEMA Nº 1: INTRODUCCIÓN A J2EEAnyeni Garay
 
herramientas tecnológicas
herramientas tecnológicasherramientas tecnológicas
herramientas tecnológicasGerardo Linares
 
Arquitectura e-sijad
Arquitectura e-sijadArquitectura e-sijad
Arquitectura e-sijade-gim
 

Similaire à GWT: Generador de JavaScript para aplicaciones web (20)

Exposicion GWT
Exposicion GWTExposicion GWT
Exposicion GWT
 
EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEB
EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEBEQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEB
EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEB
 
EQUIPO 2,2A PARTE DE LAS AGUILAS
EQUIPO 2,2A PARTE DE LAS AGUILASEQUIPO 2,2A PARTE DE LAS AGUILAS
EQUIPO 2,2A PARTE DE LAS AGUILAS
 
EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEB
EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEBEQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEB
EQUIPO 2,2A PARTE DE REVISION DE TECNOLOGIAS WEB
 
Java 2010: presente, límites y futuro
Java 2010: presente, límites y futuroJava 2010: presente, límites y futuro
Java 2010: presente, límites y futuro
 
Aprendiendo a Programas en 4 horas JavaScript
Aprendiendo a Programas en 4 horas JavaScriptAprendiendo a Programas en 4 horas JavaScript
Aprendiendo a Programas en 4 horas JavaScript
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Andrid studio
Andrid studioAndrid studio
Andrid studio
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.js
 
definicion de java
definicion de javadefinicion de java
definicion de java
 
Herramientas agilesdesarrollo
Herramientas agilesdesarrolloHerramientas agilesdesarrollo
Herramientas agilesdesarrollo
 
Módulo 01 Introducción a la Tecnología Java
Módulo 01 Introducción a la Tecnología JavaMódulo 01 Introducción a la Tecnología Java
Módulo 01 Introducción a la Tecnología Java
 
Articulo tipos de ide y ajax control toolkit
Articulo   tipos de ide y ajax control toolkitArticulo   tipos de ide y ajax control toolkit
Articulo tipos de ide y ajax control toolkit
 
200405 - Aplicaciones Web
200405 - Aplicaciones Web200405 - Aplicaciones Web
200405 - Aplicaciones Web
 
TEMA Nº 1: INTRODUCCIÓN A J2EE
TEMA Nº 1: INTRODUCCIÓN A J2EETEMA Nº 1: INTRODUCCIÓN A J2EE
TEMA Nº 1: INTRODUCCIÓN A J2EE
 
TEMA Nº 1: INTRODUCCIÓN A J2EE
TEMA Nº 1: INTRODUCCIÓN A J2EETEMA Nº 1: INTRODUCCIÓN A J2EE
TEMA Nº 1: INTRODUCCIÓN A J2EE
 
Net vs java
Net vs javaNet vs java
Net vs java
 
herramientas tecnológicas
herramientas tecnológicasherramientas tecnológicas
herramientas tecnológicas
 
Arquitectura e-sijad
Arquitectura e-sijadArquitectura e-sijad
Arquitectura e-sijad
 
Javascript
JavascriptJavascript
Javascript
 

Plus de Manuel Carrasco Moñino

Present and Future of GWT from a developer perspective
Present and Future of GWT from a developer perspectivePresent and Future of GWT from a developer perspective
Present and Future of GWT from a developer perspectiveManuel Carrasco Moñino
 
Web Components the best marriage for a PWA
Web Components the best marriage for a PWAWeb Components the best marriage for a PWA
Web Components the best marriage for a PWAManuel Carrasco Moñino
 
Intro to Web Components, Polymer & Vaadin Elements
Intro to Web Components, Polymer & Vaadin ElementsIntro to Web Components, Polymer & Vaadin Elements
Intro to Web Components, Polymer & Vaadin ElementsManuel Carrasco Moñino
 
GwtQuery the perfect companion for GWT, GWT.create 2013
GwtQuery the perfect companion for GWT,  GWT.create 2013GwtQuery the perfect companion for GWT,  GWT.create 2013
GwtQuery the perfect companion for GWT, GWT.create 2013Manuel Carrasco Moñino
 
Rapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWTRapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWTManuel Carrasco Moñino
 
GQuery a jQuery clone for Gwt, RivieraDev 2011
GQuery a jQuery clone for Gwt, RivieraDev 2011GQuery a jQuery clone for Gwt, RivieraDev 2011
GQuery a jQuery clone for Gwt, RivieraDev 2011Manuel Carrasco Moñino
 

Plus de Manuel Carrasco Moñino (20)

The Java alternative to Javascript
The Java alternative to JavascriptThe Java alternative to Javascript
The Java alternative to Javascript
 
GWT and PWA
GWT and PWAGWT and PWA
GWT and PWA
 
Present and Future of GWT from a developer perspective
Present and Future of GWT from a developer perspectivePresent and Future of GWT from a developer perspective
Present and Future of GWT from a developer perspective
 
GWT Contributor Workshop
GWT Contributor WorkshopGWT Contributor Workshop
GWT Contributor Workshop
 
CRUD with Polymer 2.0
CRUD with Polymer 2.0CRUD with Polymer 2.0
CRUD with Polymer 2.0
 
Web Components and PWA
Web Components and PWAWeb Components and PWA
Web Components and PWA
 
Building Components for Business Apps
Building Components for Business AppsBuilding Components for Business Apps
Building Components for Business Apps
 
Web Components the best marriage for a PWA
Web Components the best marriage for a PWAWeb Components the best marriage for a PWA
Web Components the best marriage for a PWA
 
Intro to Web Components, Polymer & Vaadin Elements
Intro to Web Components, Polymer & Vaadin ElementsIntro to Web Components, Polymer & Vaadin Elements
Intro to Web Components, Polymer & Vaadin Elements
 
Rock GWT UI's with Polymer Elements
Rock GWT UI's with Polymer ElementsRock GWT UI's with Polymer Elements
Rock GWT UI's with Polymer Elements
 
Introducing GWT Polymer (vaadin)
Introducing GWT Polymer (vaadin)Introducing GWT Polymer (vaadin)
Introducing GWT Polymer (vaadin)
 
Speed up your GWT coding with gQuery
Speed up your GWT coding with gQuerySpeed up your GWT coding with gQuery
Speed up your GWT coding with gQuery
 
Vaadin codemotion 2014
Vaadin codemotion 2014Vaadin codemotion 2014
Vaadin codemotion 2014
 
GwtQuery the perfect companion for GWT, GWT.create 2013
GwtQuery the perfect companion for GWT,  GWT.create 2013GwtQuery the perfect companion for GWT,  GWT.create 2013
GwtQuery the perfect companion for GWT, GWT.create 2013
 
Rapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWTRapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWT
 
GQuery a jQuery clone for Gwt, RivieraDev 2011
GQuery a jQuery clone for Gwt, RivieraDev 2011GQuery a jQuery clone for Gwt, RivieraDev 2011
GQuery a jQuery clone for Gwt, RivieraDev 2011
 
Apache James/Hupa & GWT
Apache James/Hupa & GWTApache James/Hupa & GWT
Apache James/Hupa & GWT
 
Mod security
Mod securityMod security
Mod security
 
Gwt IV -mvp
Gwt IV -mvpGwt IV -mvp
Gwt IV -mvp
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 

Dernier

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 

Dernier (15)

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 

GWT: Generador de JavaScript para aplicaciones web

  • 1. GWT Google Web Toolkit Manuel Carrasco Moñino manolo@apache.org twitter.com/dodotis Créditos:
  • 2. Qué vamos a ver • Introducción a GWT • Arquitectura y SDK • Ventajas • Trabajando con GWT • Widgets y Librerias • GWT ligero: Gquery • Ajax Fácil: RequestFactory • Talkwheel Junio 2011 Madrid JUG 2
  • 3. ALTERNATIVAS RIA Browser- Player- Client- based based based Thin Windows, Rich HTML Client Mac Client Reduced maintenance Combined benefits Intuitive UI Location independence of thin and rich client Inmediate response Junio 2011 Madrid JUG 3
  • 4. Misión de GWT Mejorar radicalmente la experiencia web de los usuarios, al permitir a los desarrolladores utilizar las herramientas de Java para hacer Ajax que funcione en cualquier navegador moderno. l o pi la e a dig om Jav Có rito C o t esc ava dig ascrip có av J J en en
  • 5. ¿Qué NO es GWT? No es una librería más de utilidades JS:  jquery, prototype... No es una librería de widgets ricos JS  ext, scriptaculous, yui... No es un framework JS, RIA, MVC, J2EE, etc  mootools, dojo ...  Vaadin, OpenLaslo, ZK, isNat ...  Zend, Rails ...  Struts, Spring MVC ...
  • 6. ¿Qué es GWT?  Generador de javascript: convierte código java a javascript.  Compilador + Linker + Optimizador completo (Descarga sólo lo necesario)  El código generado puede incluirse en cualquier página (Java, Php, Rails...) e interacionar con ella y con el servidor (DOM, AJAX).  El tiempo de compilación lo aprovecha para hacer su magia (compresión, ofuscación, css sprite, selección …)  Proporciona librerías listas para usar: DOM, XML, JSON, I18N, RPC, RF, Widgets, MVP, etc.  Puede interactuar con cualquier tipo de servidor (Ajax).  Nos da herramientas para testear, depurar, ver estadísticas, ver rendimiento, etc ..  ¡ Es un SDK !
  • 7. La historia se repite C → ASM Java → JS #include <inherits #ifdef <replace-with Inline ASM native code Inline JS native code Compiler Compiler Optimizer Optimizer Linker Linker Ensamblador para cada Javascript para cada navegador procesador Advanced IDE and tools for Advanced IDE and tools for testing, debuging testing, debuging Un lenguaje de alto nivel permite que el AD TIVID Desarrollador no se pierda en detalles de DUC bajo nivel (DOM, JS, Ajax, XD, Browsers ) PRO
  • 8. ¿Por qué un compilador?  Separar la mantenibilidad del código de la efectividad del ejecutable.  El JS escrito a mano tiene un conflicto de intereses:  Identificadores largos = aplicaciones grandes y lentas.  Buen Formato = aplicaciones grandes y lentas.  Comentarios = aplicaciones grandes y lentas  La solución no es buscar convenciones en el código javascript escrito a mano, es crear un nivel de separación para que no se comprometan ambas (mantenibilidad, efectividad).  Los errores comunes (sintaxis, errores de tipado etc) son corregibles en tiempo de compilación y no en el de ejecución.  En tiempo de compilación se puede inyectar funcionalidades.  Versionado, Ofuscación  Peculiaridades/Hacks para cada navegador  Compresión, Sprite …  Conversion objetos servidor ↔ cliente  Cross domain
  • 9. ¿Por qué Java?  Sintaxis javascript próxima a java: fácil transformación  Ecosistema de herramientas Java  Diseño, patrones y POO: código más comprensible, menos documentación  AJAX más intuitivo: patrones, interfaces, RPC, mismos objetos  Reaprovechamiento de código: librerias, maven …  Universal, la mayoría de programadores lo conocen.  Incremento de productividad:  El chequeo de tipos reduce errores  Asistencia en la escritura de código  Refactoring de verdad  Debug  !!! TDD !!!
  • 10. ¿RENDIMIENTO? JAVASCRIPT USUARIO DESARROLLO Genera menos código Aplicaciones más rápidas Con el ahorro del tiempo y con menos trucos HTTP. invertido en depurar los Analiza el código e incluye problemas en cada solo el necesario para Elimina el uso envoltorios navegador, se puede cada navegador para funcionalidades emplear más tiempo en nativas de cada versión la funcionalidad de la A veces más lento, pero de navegador. aplicación. más eficaz. La eficiencia en el Implementa gestores desarrollo es la principal propios para evitar 'leaks' ventaja de Gwt. Junio 2011 Madrid JUG 10
  • 11. ARQUITECTURA Y SDK
  • 12. Java Code (IDE) Java Server Java Client Side Side Toolkit (SDK) GWT development GWT compiler Debug/Hosted/Test Compiler/Optimizer GWT server JRE Emulation libs RPC/RF Libs & Widgets Test Runner FF/IE/Ch-Plugin 3ª Party 3ª Party Server libs Server libs JavaScript Bundles J-Byte Code (css, sprite) RPC/RF/JSON/XML RF/JSON/XML Other Backends JVM App-Server Browser (php, ruby, ...) Junio 2011 Madrid JUG 12
  • 13. Componentes del Toolkit PARA EL CLIENTE PARA EL SERVIDOR • Libreria emulada JRE Sólo en caso de Java: • java.util - Librería RPC • java.lang - Librería RequestFactory • Librería Core - Logger: client → server • JSON, XML, RPC, RF • DOM, UI, I18N • Compiler, Optimizer, Linker PARA EL DESARROLLO PARA PRODUCCIÓN • Herramientas de debug Speed Tracer • Testing library GAE (GWTestCase, HtmlUnit) • App Server: Jetty/Tomcat • Eclipse Plugin • Browser plugin • Maven plugin. • Designer
  • 14. Resumen • GWT no hace posible nada que no fuera posible hacer de otra manera, pero sí hace que la acción sea mucho mas productiva. • GWT no intenta ensalzar las virtudes de Java, sino reconocer el pragmatismo de las herramientas existentes, IDEs, entornos de prueba, tipos, etc. • GWT no quiere hacernos olvidar DOM, CSS, navegador, etc, sino permitir escribir abstracciones de todo ello y hacernos mas productivos que escribiendo código JS a mano. • Posiblemente, algún día GWT será capaz de compilar otros lenguajes, o incluso procesar JS con anotaciones de tipos. • GWT hace productivo y posible el desarrollo de sitios webs de gran escala y abre la posibilidad de crear aplicaciones de nueva generación de manera fiable.
  • 16. Gwt es simple DESARROLLAR UNA APLICACIÓN EN GWT PUEDE SER TAN SIMPLE COMO DESARROLLAR EN VISUAL BASIC Junio 2011 Madrid JUG 16
  • 17. Gwt es barato y FIABLE SOPORTE Comunidad muy activa: • GWT-users cien mensajes diarios • GWT-contributors (lista moderada) 10 mensajes diarios Desarrollo • Grupo de committers limitado • Decenas de contributors • Exhaustiva revisión de código • Tests muy exigentes • Elevada calidad de código • Excelentes desarrolladores. Documentación • Muy bien explicado • Muy Actualizada Cientos de librerías Google Junio 2011 Madrid JUG 17
  • 18. Gwt ahorra costes DESARROLLAR UNA APLICACIÓN EN GWT ES BASTANTE MÁS RÁPIDO QUE DESARROLARLA EN TECNOLOGÍA J2EE Junio 2011 Madrid JUG 18
  • 19. TRABAJA OFFLINE NO ES NECESARIO UN SERVIDOR: - HTML5 (Data store) - Aplicaciones sólo visuales (Juegos …) Junio 2011 Madrid JUG 19
  • 20. ALTAMENTE COMPATIBLE Los móviles están equipados con navegadores modernos y rápidos GWT produce Js y Ajax pequeño y optimizado para cada versión Junio 2011 Madrid JUG 20
  • 21. JAVA → Patrones, Depuración, TDD, IDEs, CI ... Más idad os tiv alid ad Men s duc C re l e pro Más ftware erro sl egib de S o Má Junio 2011 Madrid JUG 21
  • 22. Trabajando con GWT Junio 2011 Madrid JUG
  • 23. Estructura del proyecto Junio 2011 Madrid JUG
  • 24. Pasos para desarrollar GWT ● Prepara el entorno de trabajo: Eclipse + plugins ● Crea un nuevo proyecto (Template, Archetype, webAppCreator): ● Configura el módulo ● Crea tu página html con la llamada al JS resultante ● Desarrolla: cliente, servidor, RPC ● Desarrolla ● Testea: TestCase, GWTTestCase ● Prueba y depura: DevMode + Browser + Plugin ● Despliega ● Compila a JS ● Speed tracer ● Entrega Junio 2011 Madrid JUG
  • 25. Plugins en Eclipse Junio 2011 Madrid JUG
  • 26. Crear un Proyecto Junio 2011 Madrid JUG
  • 27. Crear un proyecto Maven Junio 2011 Madrid JUG
  • 28. Ejecutar, Depurar, Test, Navegar, Compilar ● Project → Run As → Web Application ● Project → Debug As → Web Application ● Project → Run As → Test Junio 2011 Madrid JUG
  • 29. Plugin para browser ● Suele ser bastante automático. ● Windows: IE, FF, Chrome ● Linux: FF, Chrome (experimental) ● Mac: FF, Safari. ● Para conectarse desde otros pcs: -bindAddress 0.0.0.0 Junio 2011 Madrid JUG
  • 30. GWT Widgets y Librerías Junio 2011 Madrid JUG
  • 31. Widgets ● http://code.google.com/webtoolkit/tools/gwtdesigner/ ● http://gwt.google.com/samples/Showcase/Showcase.html ● Widgets: Button PushButton RadioButton CheckBox DatePicker ToggleButton TextBox PasswordTextBox TextArea Hyperlink ListBox CellList MenuBar Tree CellTree SuggestBox RichTextArea FlexTable Grid CellTable CellBrowser TabBar DialogBox ● Panels: PopupPanel StackPanel StackLayoutPanel HorizontalPanel VerticalPanel FlowPanel VerticalSplitPanel HorizontalSplitPanel SplitLayoutPanel DockPanel DockLayoutPanel TabPanel TabLayoutPanel DisclosurePanel ● http://www.sencha.com/examples/explorer.html ● http://www.smartclient.com/smartgwt/showcase/ ● http://mosaic.arkasoft.com/gwt-mosaic-current/Showcase.html Junio 2011 Madrid JUG
  • 32. Librerías ● Multitud de librerías: ● Upload ● Graficos: Chronoscope, Canvas ● Enhancement: Gquery ● APIS: gmaps, FaceBook, ● HTML5 Junio 2011 Madrid JUG
  • 33. GQuery Junio 2011 Madrid JUG
  • 34. Jquery & GWT • Filosofía jquery: Haz mas, escribe menos: do more, write less. • Permite utilizar GWT en escenarios donde se necesite progressive enhancement • O donde utilizar GWT widgets pueda ser muy pesado • Facil de entender y usar para los que conocen jquery • Muy útil en aplicaciones que necesiten manipular DOM o SVG • Java type-safe • Testing, Debug • Y a diferencia de jquery ... ● Mayor velocidad de selectores: Benchmark ● Menos codigo compilado, deferred binding. ● Reutilizacion de clases ● Descarga sólo lo que utilices ● Async loading
  • 35. Sintaxis // Static imports import static com.google.gwt.query.client.GQuery.$; import static com.google.gwt.query.client.GQuery.$$; import static com.google.gwt.query.client.plugins.Effects.Effects; // Method chaining // Closures, Plugins $("#animate") .css("color", "red") .hover( new Function() { public void f(Element e) { $(e).css("color", "blue").as(Effects).stop().animate("fontSize: '+=10px'"); } }, new Function() { public void f(Element e) { $(e).css("color", "").as(Effects).stop().animate("fontSize: '-=10px'"); } } ); // JS Properties $("*").css($$("marginTop: 10px, marginLeft: 15px")); // SVG $("circle").attr("stroke-opacity", "0.86"));
  • 36. Colecciones // Iterate $("table").each(new Function(){ public void f(Element e) { if ($(e).hasClass("whatever")) { $(e).attr("myattr", "something"); } } }); // Maps List<String> ids = $("table").map(new Function(){ public Object f(Element e, int i) { return e.getId(); } }); // Filter elements $("div").filter(new Predicate(){ public boolean f(Element e, int index) { return index % 4 == 0; } });
  • 37. Type-safe //it easy now to specify shorthand property... $("#hello").css(CSS.BACKGROUND.with( RGBColor.TRANSPARENT, UriValue.url("back.gif"), BackgroundRepeat.NO_REPEAT, BackgroundAttachment.SCROLL, BackgroundPosition.CENTER)) .css(CSS.BORDER.with(BorderWidth.THIN, BorderStyle.DASHED, RGBColor.AQUA)) .css(CSS.TEXT_ALIGN.with(TextAlign.CENTER)) // can take a constant value .css(CSS.FONT_SIZE.with(FontSize.SMALLER)) // a length .css(CSS.FONT_SIZE.with(Length.px(4.5))) .width(100);
  • 38. Interacciona con GWT // enhance GWT widgets List<Label> labels = $("div").widgets(Label.class); $(labels).append($("<img src='push.gif'/>").width(20)); $(labels).click(new Function() { public void f(Widget w) { Label l = (Label) w; } }); // Decouple code and use gquery to locate widgets. CellTree t = $("div.gwt-CellTree").widget(0); if (t != null) { t.getDefaultNodeSize(); }
  • 39. Escribiendo plugins public class Enhance extends GQuery { // A shortcut to the class public static final Class<Enhance> Enhance = Enhance.class; // Register the plugin in GQuery static { GQuery.registerPlugin(Enhance.class, new Plugin<Enhance>() { public Enhance init(GQuery gq) { return new Enhance(gq); } }); } // Initialization public Enhance(GQuery gq) { super(gq); } public GQuery nuevoMetodo() { for (Element element : elements()) { $(element).hide(); } return this; } } // Plugin usage $("input").as(Enhance).nuevoMetodo().css("color", "red");
  • 41. Nuevo en GWT 2.1, 2.2, 2.3 ● Cell Widgets: listas, arboles, tablas, suggestions. Trabajan con grandes cantidades de datos de manera optimizada. ● MVP Framework: Modelo Vista Presentador y EventBus. ● Request Factory: es la alternativa a RPC, son servicios orientados a datos (validaciones, persistencia) ● Editors: Permite producir fácilmente widgets para editar objetos de dominio ● Server-side Speed Traces: El servidor manda datos de rendimiento (ddbb, memcache, etc) a speed tracer. ● Logging: enviar logs de cliente al servidor ● Safe HTML: Evita vulnabilidades XSS en cliente ● Integración with SpringSource developer tools: Roo ● HTML5 Canvas ● Google Integración ● Soporte para Single Sign On ● Local Storage Junio 2011 Madrid JUG
  • 42. Request Factory ● Facilita el uso de acceso a datos en el cliente. ● Permite que puedas programar la parte del servidor en modo data-centric, proporcionando un alto nivel de abstracción en la capa de cliente basada en service-oriented. ● En lado de cliente hace un seguimiento de los objetos y envia las modificaciones al servidor. ● La comunicacion es pequeña (sólo lo que se modifica) ● proporciona mecanismos de batch y cache. ● RF proporciona su propio servlet y el código necesario para convertir objetos y llamar a métodos. ● Se integra con widgets de presentación y editores ● Fácil de testear y muy útil para hacer una aplicación MVP
  • 43. // Proxy Class @ProxyForName("com.paradigma.server.Subject") // Entity class public interface SubjectProxy extends EntityProxy { public class Subject { String getTitle(); Long getId(); public static HashMap<Long, Subject> subjects Integer getVersion(); = new HashMap<Long, Subject>(); void setTitle(String title); private static long cont = 0; void setId(Long id); private Integer version = 0; void setVersion(Integer version); private Long id = cont++; } private String title; public Long getId() { // Service Class return id; @ServiceName("com.paradigma.server.Subject") } public interface SubjectRequest extends RequestContext { public void setId(Long id) { Request<java.lang.Long> countSubjects(); this.id = id; Request<SubjectProxy> findSubject(Long id); } InstanceRequest<SubjectProxy, java.lang.Void> remove(); public Integer getVersion() { InstanceRequest<SubjectProxy, java.lang.Void> persist(); return version; Request<String> myMethod(String arg); } } public void setVersion(Integer version) { this.version = version; // Request Interface } public interface MyRequestFactory extends RequestFactory { public void flush() { SubjectRequest subjectRequest(); } } public void persist() { version ++; subjects.put(getId(), this); } public void remove() { // Using it subjects.remove(getId()); final EventBus eventBus = new SimpleEventBus(); } // Here come the magic public static List<Subject> findAllSubjects() { final MyRequestFactory rf = GWT.create(MyRequestFactory.class); return new ArrayList<Subject>(subjects.values()); rf.initialize(eventBus); } public static long countSubjects() { // find entities return subjects.size(); rf.subjectRequest().findSubject(1l).fire(new Receiver<SubjectProxy>() { } public void onSuccess(SubjectProxy response) { public static Subject findSubject(Long id) { // Edit and persist return subjects.get(id); SubjectRequest rq = rf.subjectRequest(); } SubjectProxy editable = rq.edit(response); public String getTitle() { editable.setTitle("new title"); return title; rq.persist().using(editable).fire(); } } public void setTitle(String title) { }); this.title = title; // Call remote methods } rf.subjectRequest().myMethod("mi mensaje").fire(new Receiver<String>() { public void onSuccess(String response) { public static String myMethod(String arg) { } return "Server " + arg; }); } }
  • 44. MVP: Modelo Vista Presentador Junio 2011 Madrid JUG
  • 45. MVC ● Desarrollo lento ● Vinculos complejos ● Muy acoplado ● Dependencias cruzadas
  • 46. MVP ● Objetivo: Crear una vista simple ● Testabilidad de la vista no es necesaria porque utilizamos componentes testados. ● Se pueden crear Mock muy simples ● Desarrollo Rapido con TDD ● Muy desacoplado ● Dependencias muy simples
  • 47. Talkwheel es una plataforma de discusión interactiva que facilita las conversaciones en grupo: Tiempo real. Pretende centralizar todas las conversaciones. Se Trabaja en añadir motores y elementos de análisis y conocimiento. Hacer la navegación muy visual. Servidor MUY ligero Construida en: Java + GWT + Gquery + SVG Primera versión : http://talkwheel.com