Spring I/O 2012

Por fin saco un rato, con un mes de retraso, para hablar del evento Spring I/O 2012. A estas alturas lo fácil habría sido dejarlo estar, pero en mi empresa me han recordado que por algo me "designaron" como representante y autorizaron mi asistencia. Como primer paso para compartir lo vivido con mis compañeros (en forma de presentación si sacase tiempo), dejaré aquí un resumen de las notas que tomé. Omitiré en el blog las anotaciones más técnicas.

Spring I/O 2012

Spring I/O es un evento de gran nivel internacional organizado desde sus inicios aquí en Madrid por la comunidad de JavaHispano con el visto bueno, el apoyo y la colaboración de Spring Source. En esta ocasión más de 300 asistentes pudieron disfrutar de dos días completos, con dos tracks de charlas y un tercer track de talleres, sobre todo tipo de impresiones y experiencias alrededor principalmente de Spring, Groovy y Grails aunque muchas de las conclusiones son directamente aplicables a otros entornos y tecnologías.

No es posible estar en varios auditorios a la vez, y además tuve que ausentarme varias veces para volver al trabajo, por lo que comentaré brevemente las charlas que pude presenciar.

Adrian Coyler - Application Development in the Cloud Era

Adrian Coyler (@AdrianCoyler, CTO de Spring Source) fue el encargado de la charla de apertura y nos habló de la evolución de las arquitecturas de aplicaciones y cómo nos debemos adaptar al nuevo ecosistema. Los principales requisitos en la actualidad han cambiado a:

  1. Las plataformas móviles son lo primero, cada vez suponen un mayor porcentaje del tráfico online.
  2. Los servicios deben centrarse en el usuario, con independencia del terminal que utilice o el lugar en el que se encuentre.
  3. La información debe servirse y actualizarse en tiempo real.

En resumen, las aplicaciones deben seguir al usuario y proporcionarle en cada momento servicios en tiempo real con la mejor experiencia posible en cada uno de los dispositivos que utilice: ordenador, móvil, tablet, etc.

Sam Brannen - Spring 3.1 to 3.2 in a Nutshell

Sam Brannen (@Sam_Brannen, colaborador activo de código para el Spring core y autor de varios libros sobre el framework) detalló de forma exhaustiva y bastante aburrida todas las novedades de la versión 3.2 (y 3.1) del framework Spring con respecto a versiones anteriores. Cabe destacar:

  • Abstracción total por entornos. En la definición de cualquier bean de Spring se permite el uso de perfiles, tanto a nivel xml como componentes Java. Gracias a esto podríamos dar de alta directamente la configuración que queremos para desarrollo, testing, integración, producción, etc. Tremendamente útil.
  • Mejoras para testing con Hibernate y JPA
  • Mejoras en el soporte de la clase @Configuration.
  • Cacheo declarativo mediante anotaciones @Cacheable y @CacheEvict.

Me arrepentí de haber entrado a esta charla en lugar de ir al taller de creación de plugins para Grails en menos de 10 minutos.

Peter Ledbrook - Rapid development of enterprise web applications

Peter Ledbrook (@PLedbrook. promociona y colabora con código a Grails) destacó los aspectos importantes que hacen a Grails una alternativa asequible y real para el desarrollo de aplicaciones. Destaco para los no iniciados:

  • Construcción y control de dependencias mediante maven tanto de las aplicaciones como de los plugins
  • Permite el uso de cualquier librería Java.
  • Modelos de dominio configurables y mapeables mediante GORM, que por debajo utiliza Hibernate 3 con mayor peso de la filosofía más usada en Grails: Convención sobre configuración. Cualquier modelo se puede compartir mediante plugins.
  • Gran cantidad de plugins para migración de Base de Datos e ingeniería inversa.

Una charla muy aconsejable. Si en algún momento está disponible el vídeo es recomendable.

James Ward - Running Spring Apps on the Cloud with Heroku

James Ward (@_jamesward, principal desarrollador y evangelista de Heroku) dio una charla muy interesante e iluminadora de introducción a Heroku, una plataforma de servicios en la nube. Mediante sencillos comandos y combinación perfecta con la plataforma Git se puede mantener y desplegar aplicaciones en la nube. Nació en Junio de 2007 para dar soporte al lenguaje Ruby pero ya es compatible con otros lenguajes como Java, Scala, Clojure, Python o PHP.

Rob Harrop - Polyglot Messaging with RabbitMQ

Rob Harrop (@RobertHarrop, autor de varios libros y colaborador activo de código para el Spring core) explicó mediante varios ejemplos sencillos la potencia y usabilidad del broker de mensajes RabbitMQ, implementación open source basada en el protocolo AMQP (no es JMS). Permite su uso simultáneo entre aplicaciones basadas en diferentes tecnologías y lenguajes de programación, siendo compatible con la mayor parte de ellos. Hizo una rápida demostración en vivo comunicando mediante RabbitMQ una aplicación Java y otra en Haskell.

David Gómez García - Spring Data y MongoDB. Un caso de uso real

David Gómez (@dgomezg, Ingeniero de Software y formador en Extrema Sistemas e instructor certificado de Spring Source) explicó uno de sus últimos proyectos y los motivos para adoptar MongoDB para la persistencia. En mi opinión se extendió demasiado sobre el proyecto en sí, pero fue un buen punto de partida para explicar los sistemas NoSQL y posteriormente la elección de MongoDB.

Para justificar el uso de NoSQL comenzó explicando el Teorema de CAP según el cual es imposible para un sistema distribuido proporcionar simultáneamente las siguientes garantías: Consistencia (todos los nodos tienen la misma información), Disponibilidad (todas las peticiones tienen respuesta) y Tolerancia a la partición (el sistema debe seguir funcionando a pesar de alguna perdida de información puntual). Los sistemas NoSQL (Not Only SQL) se basan en el modelo de consistencia BASE (Basically Available, Soft state, Eventual consistency) en oposición al habitual ACID.

El uso de MongoDB se justificó por ser:

  • Orientado a documentos.
  • Almacenable en colecciones.
  • Permite documentos heterogéneos.
  • Utiliza un formato textual JSON que permite consultas sencillas con Javascript.

Sergi Almar - Securing your REST API with OAuth

Sergi Almar (@SergiAlmar, miembro destacado de JavaHispano, organizador principal de Spring I/O junto a Abraham Otero e instructor certificado de Spring Source) combinó en su charla un poco de historia sobre seguridad en servicios REST y los protocolos de autorización que han desembocado en el estándar OAuth. Oauth, que se complementa con OpenID, se creó en 2007 basado en los ya existentes Flickr Auth de Flickr y AuthSub de Google, la seguridad está basada en el intercambio de un token y es totalmente orientada a recurso. Según Sergi Almar, los beneficios de OAuth son:

  • Es un protocolo estándar.
  • El propio usuario es quien controla y revoca el acceso.
  • Ofrece la posibilidad de obtener estadísticas.
  • Es implementado por muchos clientes open source.

Por otro lado, para él también hay inconvenientes:

  • La documentación es muy mejorable.
  • Es difícil de implementar.
  • Existen variaciones del mismo concepto.
  • No resuelve los ataques por fuerza bruta.

Más orientado a las jornadas terminó explicando el uso de OAuth mediante Spring Security, que desacopla totalmente OAuth y soporta ambas versiones OAuth 1.0 y 2.0.

Domingo Suarez Torres - Grails, opción real y escalable para sitios web de alta carga

Domingo Suarez (@domix, Ingeniero mexicano fundador de la comunidad SpringHispano) compartió con nosotros un tremendo caso de éxito desarrollado principalmente con software libre para una web de altísima carga (ClickOnero, la web de eCommerce más grande de Latinoamérica). La charla me dejó un gran sabor de boca, que mejoró tras otra ponencia posterior del tipo "los problemas que tuve" tan lamentable y aburrida que ni mencionaré.

Además de Grails, Domingo y su equipo utilizaron para su proyecto:

  • GORM, que les dejó tremendamente contentos aunque insistió en poner mucha atención al crear índices y al iterar grandes colecciones.
  • Terracotta, para control de caché en sistemas distribuidos les funcionó de maravilla. Evita muchísimos accesos a Base de Datos y guarda directamente objetos Java, JSON, XML, entidades Hibernate, páginas completas o fragmentos de páginas.
  • RabbitMQ, no les supuso ningún coste de administración y les permitió el procesamiento asíncrono de algunas consultas pesadas, envío de emails, etc. Mejoró ampliamente el rendimiento de la aplicación al liberar de una gran carga a los servidores orientados a clientes.
  • MongoDB con Redis para almacenar y operar sobre estructuras de datos complejas. Ideal para estadísticas.
  • ElasticSearch como motor de búsquedas complejas que funciona sobre Lucene, mejorado con el uso del plugin específico para Grails.
  • JavaMelody para monitorizar todas las aplicaciones relacionadas.


Sin duda el año que vienen intentaré volver.

submit to reddit



Related Posts with Thumbnails