SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
IV Encuentros de Programadores Java: RIA
        Desarrollo web con GWT

       deCharlas.com (Oct-2010)



                    Manuel Carrasco Moñino
                          manolo@apache.org
Misión de GWT


To radically improve the web experience for users by enabling developers
   to use existing Java tools to build no-compromise Ajax for any modern
                                    browser

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.
¿Qué NO es GWT?


    No es una librería más de utilidades JS:
        
            jquery, prototype...

    No es una librería de widgets
        
            ext, scriptaculous, yui...

    No es un framework
        
            mootools, dojo ...

    No es sólo un kit para crear aplicaciones RIA.
¿Qué es GWT?
   Generador de javascript: convierte código java a javascript.
         Es un compilador
         Es un linker
         Es un optimizador completo (no sólo compresión y ofuscación)
         Es un SDK
   El código generado puede incluirse en cualquier página e
     interacionar con ella.
   Proprorciona además un conjunto de herramientas para testear,
     depurar, estadísticas, rendimiento, etc ..
   Proporciona un conjunto de módulos cliente: DOM, XML, JSON,
     I18N, RPC, Widgets, MVP, etc.
   Y... mucho mas (css sprite, image bundling, uibinder ...)


     Es código java para la máquina virtual 'browser' en lugar de 'jre'
Ventajas de usar un compilador frente a
       escribir javascript a mano
La historia se repite.

   C/C++                           Java
    −   #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
        procesador                       navegador

    −   Advanced IDE and tools       −   Advanced IDE and tools
        for testing, debuging            for testing, debuging
¿Porqué un compilador?



    Para separar la mantenibilidad del código de la efectividad del
       ejecutable.

    Porque 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).

    Muchos de los errores mas comunes (sintaxis, errores de tipado etc)
       son fácilmente corregibles en tiempo de compilación en lugar de
       en tiempo de ejecución.

    En tiempo de compilación se puede inyectar funcionalidades.
¿Porqué Java?
   La sintaxis javascript está más próxima a java que a
     otros lenguages, por lo que es mas fácil su
     transformación.
   Ecosistema de herramientas Java.
   Diseño, patrones y POO: implican código mas comprensible
     y menos documentación.
   El AJAX mas intuitivo: patrones, interfaces, RPC, mismos
     objetos.
   Incremento de productividad:
         El chequeo de tipos reduce errores.
         Asistencia en la escritura de código.
         Refactoring de verdad.
         Debug
         !!! TDD !!!
GWT nos facilita

   Versionado de ficheros para cada compilación, evitando
     problemas de cachés.
   Descarga sólo lo que se usa.
         Sólo lo necesario para cada navegador y lenguaje.
         Eliminar código no usado (sólo las clases, y métodos utilizados).
         Código muy ofuscado, comprimido y optimizado.
         Los ficheros pueden ser cacheados para siempre.
   Ejecución más rápida en browser pero con código legible en
     IDE.
   Herramientas para Test y Debug.
   Mismos objetos Servidor <=> Cliente
   Creación, selección e inclusión de librerías.

    Deja a GWT hacer las cosas que deberíamos hacer a mano,
    o que dejamos de hacer por desconocimiento, complejidad, etc.
¿Rendimiento?
    JavaScript
    −   GWT genera código mucho más pequeño que el que podamos
        escribir a mano. A diferencia de las aplicaciones
        tradicionales en javascript, Gwt analiza tu código e incluye
        exclusivamente lo necesario para cada navegador.
    −   Pudiera no ser más rápido, pero sí mas eficaz.
    −   Implementa gestores propios para evitar 'leaks'
   Usuario
    −   Las aplicaciones GWT son normalmente más rápidas que las
        escritas a mano, y normalmente requieren menos trucos HTTP.
        Gwt elimina el uso envoltorios para funcionalidades incluidas
        nativamente en esa versión de navegador.
   Desarrollo
    −   Con el ahorro del tiempo invertido en depurar los problemas
        en cada navegador, puedes emplear mucho mas tiempo en la
        funcionalidad de tu aplicación. La eficiencia en el
        desarrollo es la parte favorita en Gwt.
Toolkit.
Componentes del Toolkit
   Libreria emulada JRE:
         java.util
         java.lang
   Librería Core
         JSON, XML, RPC
         DOM, UI, I18N
   Compiler, Optimizer, Linker
   Herramientas para desarrollo:
         Scripts: webAppCreator, i18nCreator
         Testing library (GWTestCase, HtmlUnit)
         Customized App Server: Jetty/Tomcat
         Eclipse Plugin
         Browser plugin
         Maven plugin
   Speed Tracer
¿Y qué más?

   Historia de navegación (Botón atras, adelante)
   ClientBundle: permite agrupar y manipular recursos en tiempo de
     compilación (Imágenes, Optimización de Css, Sprite, lenguages …)
   UIBinder: lenguage declarativo y extensivo para construir
     interfaces de usuario. Injecta constructores en el código Java, y
     genera HTML en tiempo de compilación.
   Code split: fragmenta el código javascript en partes para que sean
     cargadas asíncronamente.
   LayoutPanels: comportamiento predecible de la disposición de
     elementos.
   Compresión: Utiliza las mas avanzadas técnicas de compresión.
   JSNI (JavaScript Native Interface)
   Deferred Binding
   SOYC (Story of your compile)
Nuevo en 2.1.0


    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

    Integration with SpringSource developer tools: Roo
Soporte, Comunidad.
Actividad Comunidad GWT
   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 (javadocs, codstyle …)
       – Excelentes desarrolladores.
   Documentación

       – Muy bien explicado
       – Muy Actualizada
   Cientos de librerías
   Google.
Conclusiones
   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.


                                                      Ray Cromwell
Trabajando con GWT
Estructura del proyecto
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
Plugins en Eclipse
Crear un Proyecto Google
Crear un Proyecto Google
Crear un proyecto Maven




Comprobar 'GWT SDK' tiene que estar al principio en build path
webAppCreator

$ /msoft/gwt/current/webAppCreator -maven -noant com.foo.Hello
-out Hello
Created directory Hello/src/main/java
Created directory Hello/src/main/webapp
[…]


Añadir estas líneas al pom.xml en caso de que gwt-2.1.0 no
esté disponible en maven.org
   <repositories>
     <repository>
       <id>gwt.milestone</id>
       <url>http://google-web-
toolkit.googlecode.com/svn/2.1.0/gwt/maven</url>
     </repository>
   </repositories>




 Opción -maven sólo disponible a partir de 2.1.0
Configure Google plugin
Ejecutar, Depurar, Test, Navegar


    Project → Run As → Web Application

    Project → Debug As → Web Application

    Project → Run As → jUnit (
Configuración módulo *.gwt.xml
<module rename-to='hello'>
  <!-- Inherit the core Web Toolkit stuff.                         -->
  <inherits name='com.google.gwt.user.User'/>

 <!-- Inherit the default GWT style sheet. You can change          -->
 <!-- the theme of your GWT application by uncommenting            -->
 <!-- any one of the following lines.                              -->
 <inherits name='com.google.gwt.user.theme.standard.Standard'/>
 <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/>   -->
 <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>       -->

 <!-- Other module inherits                                        -->

 <!-- Specify the app entry point class.                           -->
 <entry-point class='com.foo.client.Hello'/>

 <!-- Specify the paths for translatable code                      -->
 <source path='client'/>
 <source path='shared'/>

  <!-- Specify the paths for translatable code                     -->
  <stylesheet src="JsUpload.css"/>
  <!-- Imported modules properties -->
  <set-property name="export" value="yes" />
  <!-- Languages -->
  <!-- <extend-property name="locale" values="es" /> -->
  <!-- Linkers -->
    <add-linker name="xs"/>
  <!-- Deferred binding, … -->
  <replace-with class="com.foo.MyClassIE">
      <when-type-is class="com.foo.MyClass"/>
      <any>
      <when-property-is name="user.agent" value="ie6"/>
      <when-property-is name="user.agent" value="ie8"/>
     </any>
  </replace-with>
</module>
Plugin para browser


    Añadir plugin, reiniciar browser, reconectar.
         
             Windows: IE, FF, Chrome
         
             Linux: FF, Chrome (experimental)
         
             Mac: FF, Safari.

    Para conectarse desde otros browsers: -bindAddress 0.0.0.0
Deferred Binding


    Son clases java que no se utilizan hasta el
      momento de compilación

    Se seleccionan diferentes implementaciones para
      cada navegador, lenguage …

    Hace posible el emulador JRE de GWT

    Elimina el código innecesario para cada
      plataforma.

    Es el principal responsable del rendimiento del
      código JS generado por GWT
JSNI


    Código Javascript en comentarios java

    Permite utilizar Js dentro de GWT y al revés.

    Usa la declaración 'native' que indica a java que
      ese método se resolverá en tiempo de 'runtime'

    Los métodos nativos se puede utilizar en los IDEs
      sin que marquen el código con error.

    El compilador GWT lo detecta y lo copia en el
      fichero javascript resultante

    Finalmente se comprime y obfusca junto con el
      resto de código
RPC


    GWT puede hacer llamadas Ajax de 4 tipos
         
             XML
         
             JSON
         
             TEXT o HTML
         
             RPC

    RPC es un contrato entre servidor (java) y cliente.

    Se pasan objetos (pojo) que se puedan serializar.

    No todos los objetos serializables en JRE son serializables

    Tienen que ser compatibles con la emulación JRE de GWT.

    En el servidor hay que extender RemoteServiceServlet

    Realmente se transfieren objetos jSON especiales que ambos extremos
       saben convertir en su propia representación de objeto
Widgets


    http://code.google.com/webtoolkit/doc/latest/DevGuideUiWidgets.html

    http://code.google.com/webtoolkit/doc/latest/RefWidgetGallery.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
Preguntas




     http://manolocarrasco.blogspot.com
                     twitter.com/dodotis

               manolo@apache.org

Más contenido relacionado

La actualidad más candente

Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoManuel Carrasco Moñino
 
Manual Tutorial Javascript Con Ejemplos
Manual Tutorial Javascript Con EjemplosManual Tutorial Javascript Con Ejemplos
Manual Tutorial Javascript Con EjemplosSteven Gomez
 
J query el framework de la web luc van lancker-1504
J query el framework de la web    luc van lancker-1504J query el framework de la web    luc van lancker-1504
J query el framework de la web luc van lancker-1504Vanessa Carlos
 
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
 
Tecnologia web
Tecnologia webTecnologia web
Tecnologia webfanyto
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 Micael Gallego
 
GWT: Why GWT, GQuery, and RequestFactory
GWT: Why GWT, GQuery, and RequestFactoryGWT: Why GWT, GQuery, and RequestFactory
GWT: Why GWT, GQuery, and RequestFactoryManuel Carrasco Moñino
 
Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferenciasMicael Gallego
 
Arquitectura cliente servidor rodofo jacobo rodriguez
Arquitectura cliente servidor rodofo jacobo rodriguezArquitectura cliente servidor rodofo jacobo rodriguez
Arquitectura cliente servidor rodofo jacobo rodriguezTito Jacobo Rodriguez
 
Java completo y agragado
Java completo y agragadoJava completo y agragado
Java completo y agragadoMaria
 
Lenguajes del lado del servidor
Lenguajes del lado del servidorLenguajes del lado del servidor
Lenguajes del lado del servidorpidingos
 

La actualidad más candente (18)

Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
Gwt I - entendiendo gwt
Gwt I - entendiendo gwtGwt I - entendiendo gwt
Gwt I - entendiendo gwt
 
Net Beans
Net BeansNet Beans
Net Beans
 
Java Scripts
Java ScriptsJava Scripts
Java Scripts
 
Manual Tutorial Javascript Con Ejemplos
Manual Tutorial Javascript Con EjemplosManual Tutorial Javascript Con Ejemplos
Manual Tutorial Javascript Con Ejemplos
 
Lenguajes de desarrollo web
Lenguajes de desarrollo webLenguajes de desarrollo web
Lenguajes de desarrollo web
 
J query el framework de la web luc van lancker-1504
J query el framework de la web    luc van lancker-1504J query el framework de la web    luc van lancker-1504
J query el framework de la web luc van lancker-1504
 
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
 
Análisis del Whitepaper DB4O
Análisis del Whitepaper DB4OAnálisis del Whitepaper DB4O
Análisis del Whitepaper DB4O
 
Manual programacion-javascript-parte1
Manual programacion-javascript-parte1Manual programacion-javascript-parte1
Manual programacion-javascript-parte1
 
Tecnologia web
Tecnologia webTecnologia web
Tecnologia web
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018
 
GWT: Why GWT, GQuery, and RequestFactory
GWT: Why GWT, GQuery, and RequestFactoryGWT: Why GWT, GQuery, and RequestFactory
GWT: Why GWT, GQuery, and RequestFactory
 
Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferencias
 
Arquitectura cliente servidor rodofo jacobo rodriguez
Arquitectura cliente servidor rodofo jacobo rodriguezArquitectura cliente servidor rodofo jacobo rodriguez
Arquitectura cliente servidor rodofo jacobo rodriguez
 
Java completo y agragado
Java completo y agragadoJava completo y agragado
Java completo y agragado
 
Lenguajes del lado del servidor
Lenguajes del lado del servidorLenguajes del lado del servidor
Lenguajes del lado del servidor
 
Clase 4 JavaScript Básico
Clase 4 JavaScript BásicoClase 4 JavaScript Básico
Clase 4 JavaScript Básico
 

Similar a GWT Java RIA

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
 
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
 
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEB
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEBMEJORES PROGRAMAS PARA DISEÑAR PAGINA WEB
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEBdaliacarolinaastocah
 
Creando Aplicaciones Web en el 2015
 Creando Aplicaciones Web en el 2015 Creando Aplicaciones Web en el 2015
Creando Aplicaciones Web en el 2015Globant
 
Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !ouuyeah
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.jsINSIGNIA4U
 
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
 
Introducción a la progrogramación orientada a objetos - Java
Introducción a la progrogramación orientada a objetos - JavaIntroducción a la progrogramación orientada a objetos - Java
Introducción a la progrogramación orientada a objetos - JavaFacultad de Ciencias y Sistemas
 
Resultado de aprendizaje 2.1.1
Resultado de aprendizaje 2.1.1Resultado de aprendizaje 2.1.1
Resultado de aprendizaje 2.1.1Rafael Garcia
 
Los diferentes lenguajes de programación para la web
Los diferentes lenguajes de programación para la webLos diferentes lenguajes de programación para la web
Los diferentes lenguajes de programación para la webCartagena, Bolivar
 
Los diferentes lenguajes de programación para la web
Los diferentes lenguajes de programación para la webLos diferentes lenguajes de programación para la web
Los diferentes lenguajes de programación para la webCartagena, Bolivar
 

Similar a GWT Java RIA (20)

Exposicion GWT
Exposicion GWTExposicion GWT
Exposicion GWT
 
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
 
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
 
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEB
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEBMEJORES PROGRAMAS PARA DISEÑAR PAGINA WEB
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEB
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Creando Aplicaciones Web en el 2015
 Creando Aplicaciones Web en el 2015 Creando Aplicaciones Web en el 2015
Creando Aplicaciones Web en el 2015
 
Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.js
 
Andrid studio
Andrid studioAndrid studio
Andrid studio
 
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
 
Javascript
JavascriptJavascript
Javascript
 
Introducción a la progrogramación orientada a objetos - Java
Introducción a la progrogramación orientada a objetos - JavaIntroducción a la progrogramación orientada a objetos - Java
Introducción a la progrogramación orientada a objetos - Java
 
Resultado de aprendizaje 2.1.1
Resultado de aprendizaje 2.1.1Resultado de aprendizaje 2.1.1
Resultado de aprendizaje 2.1.1
 
Qué es java
Qué es javaQué es java
Qué es java
 
¿Que es javascript y Modulos?
¿Que es javascript y Modulos?¿Que es javascript y Modulos?
¿Que es javascript y Modulos?
 
Los diferentes lenguajes de programación para la web
Los diferentes lenguajes de programación para la webLos diferentes lenguajes de programación para la web
Los diferentes lenguajes de programación para la web
 
Los diferentes lenguajes de programación para la web
Los diferentes lenguajes de programación para la webLos diferentes lenguajes de programación para la web
Los diferentes lenguajes de programación para la web
 

Más 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
 

Más 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
 

GWT Java RIA

  • 1. IV Encuentros de Programadores Java: RIA Desarrollo web con GWT deCharlas.com (Oct-2010) Manuel Carrasco Moñino manolo@apache.org
  • 2. Misión de GWT To radically improve the web experience for users by enabling developers to use existing Java tools to build no-compromise Ajax for any modern browser 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.
  • 3. ¿Qué NO es GWT?  No es una librería más de utilidades JS:  jquery, prototype...  No es una librería de widgets  ext, scriptaculous, yui...  No es un framework  mootools, dojo ...  No es sólo un kit para crear aplicaciones RIA.
  • 4. ¿Qué es GWT?  Generador de javascript: convierte código java a javascript.  Es un compilador  Es un linker  Es un optimizador completo (no sólo compresión y ofuscación)  Es un SDK  El código generado puede incluirse en cualquier página e interacionar con ella.  Proprorciona además un conjunto de herramientas para testear, depurar, estadísticas, rendimiento, etc ..  Proporciona un conjunto de módulos cliente: DOM, XML, JSON, I18N, RPC, Widgets, MVP, etc.  Y... mucho mas (css sprite, image bundling, uibinder ...) Es código java para la máquina virtual 'browser' en lugar de 'jre'
  • 5. Ventajas de usar un compilador frente a escribir javascript a mano
  • 6. La historia se repite.  C/C++  Java − #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 procesador navegador − Advanced IDE and tools − Advanced IDE and tools for testing, debuging for testing, debuging
  • 7. ¿Porqué un compilador?  Para separar la mantenibilidad del código de la efectividad del ejecutable.  Porque 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).  Muchos de los errores mas comunes (sintaxis, errores de tipado etc) son fácilmente corregibles en tiempo de compilación en lugar de en tiempo de ejecución.  En tiempo de compilación se puede inyectar funcionalidades.
  • 8. ¿Porqué Java?  La sintaxis javascript está más próxima a java que a otros lenguages, por lo que es mas fácil su transformación.  Ecosistema de herramientas Java.  Diseño, patrones y POO: implican código mas comprensible y menos documentación.  El AJAX mas intuitivo: patrones, interfaces, RPC, mismos objetos.  Incremento de productividad:  El chequeo de tipos reduce errores.  Asistencia en la escritura de código.  Refactoring de verdad.  Debug  !!! TDD !!!
  • 9. GWT nos facilita  Versionado de ficheros para cada compilación, evitando problemas de cachés.  Descarga sólo lo que se usa.  Sólo lo necesario para cada navegador y lenguaje.  Eliminar código no usado (sólo las clases, y métodos utilizados).  Código muy ofuscado, comprimido y optimizado.  Los ficheros pueden ser cacheados para siempre.  Ejecución más rápida en browser pero con código legible en IDE.  Herramientas para Test y Debug.  Mismos objetos Servidor <=> Cliente  Creación, selección e inclusión de librerías. Deja a GWT hacer las cosas que deberíamos hacer a mano, o que dejamos de hacer por desconocimiento, complejidad, etc.
  • 10. ¿Rendimiento?  JavaScript − GWT genera código mucho más pequeño que el que podamos escribir a mano. A diferencia de las aplicaciones tradicionales en javascript, Gwt analiza tu código e incluye exclusivamente lo necesario para cada navegador. − Pudiera no ser más rápido, pero sí mas eficaz. − Implementa gestores propios para evitar 'leaks'  Usuario − Las aplicaciones GWT son normalmente más rápidas que las escritas a mano, y normalmente requieren menos trucos HTTP. Gwt elimina el uso envoltorios para funcionalidades incluidas nativamente en esa versión de navegador.  Desarrollo − Con el ahorro del tiempo invertido en depurar los problemas en cada navegador, puedes emplear mucho mas tiempo en la funcionalidad de tu aplicación. La eficiencia en el desarrollo es la parte favorita en Gwt.
  • 12. Componentes del Toolkit  Libreria emulada JRE:  java.util  java.lang  Librería Core  JSON, XML, RPC  DOM, UI, I18N  Compiler, Optimizer, Linker  Herramientas para desarrollo:  Scripts: webAppCreator, i18nCreator  Testing library (GWTestCase, HtmlUnit)  Customized App Server: Jetty/Tomcat  Eclipse Plugin  Browser plugin  Maven plugin  Speed Tracer
  • 13. ¿Y qué más?  Historia de navegación (Botón atras, adelante)  ClientBundle: permite agrupar y manipular recursos en tiempo de compilación (Imágenes, Optimización de Css, Sprite, lenguages …)  UIBinder: lenguage declarativo y extensivo para construir interfaces de usuario. Injecta constructores en el código Java, y genera HTML en tiempo de compilación.  Code split: fragmenta el código javascript en partes para que sean cargadas asíncronamente.  LayoutPanels: comportamiento predecible de la disposición de elementos.  Compresión: Utiliza las mas avanzadas técnicas de compresión.  JSNI (JavaScript Native Interface)  Deferred Binding  SOYC (Story of your compile)
  • 14. Nuevo en 2.1.0  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  Integration with SpringSource developer tools: Roo
  • 16. Actividad Comunidad GWT  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 (javadocs, codstyle …) – Excelentes desarrolladores.  Documentación – Muy bien explicado – Muy Actualizada  Cientos de librerías  Google.
  • 18. 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. Ray Cromwell
  • 21. 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
  • 25. Crear un proyecto Maven Comprobar 'GWT SDK' tiene que estar al principio en build path
  • 26. webAppCreator $ /msoft/gwt/current/webAppCreator -maven -noant com.foo.Hello -out Hello Created directory Hello/src/main/java Created directory Hello/src/main/webapp […] Añadir estas líneas al pom.xml en caso de que gwt-2.1.0 no esté disponible en maven.org <repositories> <repository> <id>gwt.milestone</id> <url>http://google-web- toolkit.googlecode.com/svn/2.1.0/gwt/maven</url> </repository> </repositories> Opción -maven sólo disponible a partir de 2.1.0
  • 28. Ejecutar, Depurar, Test, Navegar  Project → Run As → Web Application  Project → Debug As → Web Application  Project → Run As → jUnit (
  • 29. Configuración módulo *.gwt.xml <module rename-to='hello'> <!-- Inherit the core Web Toolkit stuff. --> <inherits name='com.google.gwt.user.User'/> <!-- Inherit the default GWT style sheet. You can change --> <!-- the theme of your GWT application by uncommenting --> <!-- any one of the following lines. --> <inherits name='com.google.gwt.user.theme.standard.Standard'/> <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> --> <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> --> <!-- Other module inherits --> <!-- Specify the app entry point class. --> <entry-point class='com.foo.client.Hello'/> <!-- Specify the paths for translatable code --> <source path='client'/> <source path='shared'/> <!-- Specify the paths for translatable code --> <stylesheet src="JsUpload.css"/> <!-- Imported modules properties --> <set-property name="export" value="yes" /> <!-- Languages --> <!-- <extend-property name="locale" values="es" /> --> <!-- Linkers --> <add-linker name="xs"/> <!-- Deferred binding, … --> <replace-with class="com.foo.MyClassIE"> <when-type-is class="com.foo.MyClass"/> <any> <when-property-is name="user.agent" value="ie6"/> <when-property-is name="user.agent" value="ie8"/> </any> </replace-with> </module>
  • 30. Plugin para browser  Añadir plugin, reiniciar browser, reconectar.  Windows: IE, FF, Chrome  Linux: FF, Chrome (experimental)  Mac: FF, Safari.  Para conectarse desde otros browsers: -bindAddress 0.0.0.0
  • 31. Deferred Binding  Son clases java que no se utilizan hasta el momento de compilación  Se seleccionan diferentes implementaciones para cada navegador, lenguage …  Hace posible el emulador JRE de GWT  Elimina el código innecesario para cada plataforma.  Es el principal responsable del rendimiento del código JS generado por GWT
  • 32. JSNI  Código Javascript en comentarios java  Permite utilizar Js dentro de GWT y al revés.  Usa la declaración 'native' que indica a java que ese método se resolverá en tiempo de 'runtime'  Los métodos nativos se puede utilizar en los IDEs sin que marquen el código con error.  El compilador GWT lo detecta y lo copia en el fichero javascript resultante  Finalmente se comprime y obfusca junto con el resto de código
  • 33. RPC  GWT puede hacer llamadas Ajax de 4 tipos  XML  JSON  TEXT o HTML  RPC  RPC es un contrato entre servidor (java) y cliente.  Se pasan objetos (pojo) que se puedan serializar.  No todos los objetos serializables en JRE son serializables  Tienen que ser compatibles con la emulación JRE de GWT.  En el servidor hay que extender RemoteServiceServlet  Realmente se transfieren objetos jSON especiales que ambos extremos saben convertir en su propia representación de objeto
  • 34. Widgets  http://code.google.com/webtoolkit/doc/latest/DevGuideUiWidgets.html  http://code.google.com/webtoolkit/doc/latest/RefWidgetGallery.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
  • 35. Preguntas http://manolocarrasco.blogspot.com twitter.com/dodotis manolo@apache.org