Spring Roo y GWT en Google I/O

Google I/O es uno de los más importantes acontecimientos para desarrolladores que suceden cada año.

En éste foro es donde Google y otras compañías anuncian sus aportaciones más novedosas. Uno de los protagonistas en este evento ha sido Google Web Tolkit (GWT), centrando la atención de numerosas presentaciones y sobre el que se han conocido numerosas mejoras. Muchas compañías han aprovechado para subirse al carro de GWT, y entre ellas, SpringSource ha anunciado la incorporación de GWT en su producto Spring-Roo.

Resultado de imagen de spring rooResultado de imagen de Gwt

Roo es la apuesta de SpringSource para crear aplicaciones web de una manera muy rápida en el mundo Java. La primera vez que tuve la oportunidad de experimentar con Roo fue en el Spring2gx de Madrid, y mi primera pregunta fue ¿por qué SpringSource desarrolla Roo si ya tiene Grails?, la respuesta es bastante simple: hay muchas empresas que todavía no están preparadas para (o no quieren) hacer una migración a Grails, unas veces por razones políticas, otras por miedo a introducir nuevas tecnologías, por rendimiento, etc.

Roo aporta en estos casos toda la potencia de las herramientas que acompañan a frameworks ágiles como Rails, Grails, etc., pero sin renunciar a la entrega de aplicaciones puramente java.

Algunas preguntas

  • ¿Qué es Roo?: Roo es simplemente una utilidad que se ejecuta en modo comando, y que sirve para crear automáticamente código java.
  • ¿Qué hace?: Roo permite crear no sólo un proyecto nuevo al principio sino todos los componentes del proyecto que te van haciendo falta a lo largo del desarrollo (entidades, controladores, etc), e incluso permite añadir elementos a objetos que ya se han creado (campos, seguridad, etc).
  • ¿Cómo lo hace?: Roo es capaz de editar y modificar los ficheros de configuración añadiendo y modificando los elementos, y crea las clases java necesarias para nuestra aplicación (que podemos modificar a nuestro antojo para añadir la lógica de negocio).
  • ¿Dónde está la magia?: Está en los ficheros AspectJ que crea alrededor de nuestras clases, alguno de los cuales no debemos modificar para permitir a Roo añadir más funcionalidades. Estas clases actúan como decoradores de nuestra clase java en tiempo de compilación.
  • ¿Es reversible?: Roo permite fusionar en el momento que queramos todos estos ficheros .aj, en nuestros ficheros .java y entregar una aplicación completamente java.

Un ejemplo WEB

Vamos a crear una simple lista de contactos que nos permita añadir, modificar y eliminar amigos.

  • Instala maven y roo y pon ambos comandos en tu PATH.
  • Crea el directorio contactos y cámbiate él
  • Ejecuta roo.sh y escribe estas órdenes:
    project --topLevelPackage com.project.contacts
    
    persistence setup --provider HIBERNATE --database HYPERSONIC_PERSISTENT
    
    database properties set --key database.url --value jdbc:hsqldb:/var/tmp/contacts.db
    
    entity  --class ~.domain.Contact
    
    field string nombre --notNull --sizeMin 1 --sizeMax 30 --class ~.domain.Contact
    
    field string apellido --notNull --sizeMin 1 --sizeMax 30 --class ~.domain.Contact
    
    field string telefono --notNull --sizeMin 1 --sizeMax 15 --class ~.domain.Contact
    
    test integration
    
    controller all --package ~.web
    
    exit
  • Ejecuta la aplicación mvn jetty:run y abre tu navegador http://localhost:8080/contacts

El mismo ejemplo en versión RIA con GWT

  • Ejecuta roo.sh y escribe éstas órdenes:
    gwt setup
    exit
  • Ejecuta GWT en modo desarrollo: mvn gwt:run y pulsa sobre ‘Lauch Default Browser’
  • Si no tienes instalado en tu navegador el plugin de GWT para desarrollo, te preguntará para instalarlo.

Limitaciones

  • Las nuevas funcionalidades están disponibles la versión ‘beta’ de Roo 1.1.0-M1.
  • Roo utiliza GWT 2.1.0-M1, que es también versión experimental.
  • Eso implica que hay numerosos fallos, por ejamplo el ‘scaffolding’ con entidades relacionadas falla.

Conclusión

Aunque no habrá una versión estable de Roo+GWT hasta dentro de algunos meses, la tendencia de SpringSource es facilitar al desarrollador hacer aplicaciones web de una manera rápida.

Justamente ésta es la característica que ha hecho a muchas empresas considerar Rails, Grails u otros frameworks ignorando otros inconvenientes (rendimiento, knowhow, etc). ¿Quién no está harto de ver presentaciones donde se defienden las bondades de estos frameworks haciendo una aplicación en 10 minutos con un par de entidades y un ‘scaffolding’?

GWT proporciona a las aplicaciones RIA numerosas ventajas: usar Java en lugar de JS, testeabilidad, reutilización, rendimiento, detección de errores, etc., y Spring todo un ecosistema para desarrollar aplicaciones grandes. Ahora Roo añade la facilidad de la puesta en marcha de un proyecto y la velocidad en hacer tareas que son pesadas: crear entidades, beans, tests, controladores, vistas, etc.

Manuel Carrasco Moñino

Comentarios

  1. Stanley dice:

    Buenas tardes amigo estoy comenzando con Roo y quisiera saber si mas adelante haras una aplicacion mas compleja integrando GWT para la capa UI? muchas gracias…

Escribe un comentario