jueves, 17 de febrero de 2011

Conclusiones del primer día en el Spring I/O 2011

#springio
Estas son mis conclusiones sobre el primer día del Spring I/O (he asistido a las charlas del Track 1 - Spring). La verdad es que ha sido un día intenso, se ha hecho un poco largo pero ha merecido la pena.

Spring in 2011 and Beyond: From Java EE 6 to Cloud Computing (Juergen Hoeller)
Interesante conferencia de uno de los padres de Spring. Básicamente ha tratado tres temas:
  1. Tendencias del mercado a las que el framework tiene que dar respuesta:
    • Fuentes de datos que no están en bases de datos relacionales
    • Cachés distribuidas (Genfire, Coherence)
    • Gran variedad de clientes web, y paso de la lógica de presentación a la capa del browser
    • Java SE 7 y la programación concurrente (preparando las aplicaciones para el cloud computing). ForkJoinPools.
  2. Posicionamiento de Spring en 2011. 
  3. Nuevas funcionalidades en Spring framework 3.1 (la semana pasada ha salido un milestone):
    • Perfiles para poder configurar beans por entornos
    • Abstracción de cachés y anotaciones para cacheo de objetos
    • Gestión del nivel de conversación en aplicaciones web (por ejemplo el "conversation" scope para JSF). Interesante para distinguir sesiones entre pestañas del navegador.
TBD Escuela de Groovy
Pequeña charla marquetiniana de uno de los patrocinadores. Han hablado sobre sus líneas estratégicas para el 2011:
  1. Evangelización
  2. Partnerships
  3. Formación
  4. Soporte 
Supongo que de estos dos últimos es de donde viene el ROI del negocio, los otros son para divulgar y establecer una red de partners (de formación, según he entendido).

Spring Data (Costin Leau)
Se ha hablado sobre algo que no conocía. Spring Data se trata de varios módulos de Spring para intentar estandarizar el acceso a bases de datos NOSQL (Not Only SQL). Se ha hablado sobre cuatro subáreas de Spring Data, para:
  1. Fuentes de Datos Clave-Valor (Ej: Redis)
  2. Fuentes de Datos de Mapeo de Objetos.
  3. Fuentes de Datos de Documentos (Ej: MongoDB)
  4. Fuentes de Datos de grafos (Ej: Neo4j)
  5. Spring Hadoop (para Apache hadoop)
Spring AMQP (Sergi Almar)
No conocía Spring AMQP, un sistema de mensajería similar a JMS, pero independiente del lenguaje (en realidad se trata de un protocolo, no de un API). Existen varias implementaciones de AMQP, una de ellas adquirida por SpringSource (RabbitMQ)

Effective out-of-container Integration Testing (Sam Brannen)
Esta charla me ha parecido interesantísima, igual que la siguiente. En esta se hablaba sobre el uso de Spring TestContext para simular las dependencias externas de la aplicación en un entorno de producción (es decir, para poder hacer pruebas de integración en un entorno de desarrollo sin tener que tener acceso a las dependencias externas). Para ello, se ha hablado de varias librerías Open Source que nos permiten simular las dependencias externas de varios tipos:
  1. Servidores de BBDD: HSQLDB, H2, Derby, etc.
  2. Servidores JMS: ActiveMQ
  3. Servidores SMTP: Dubster SimpleSmtpServer
  4. Servidores FTP: MockFtpServer
  5. Contenedor de Servlets: Jetty/Tomcat en modo embebido de Spring, o el plugin de jetty para maven (el que utilizamos en el framework ATLAS).
Pruebas de aplicaciones web con Selenium 2 y Webdriver (David Gomez)
También muy interesante. En ATLAS utilizamos Selenium 1, pero desconocía la versión de Selenium 2 integrada con WebDriver. Me ha encantado el "Page Object Pattern", creo que es la mejor idea que me llevo del día de hoy.

Spring Social (Federico Caro)
No sé si es por lo tarde que era, pero en mi opinión Federico se ha explicado como un libro cerrado (se ve que es muy buen tecky, pero creo que se ha liado un poco dando la charla). Spring Social es un módulo muy reciente que permite integrarse con las redes sociales de manera estándar. Actualmente existen implementaciones para Twitter, Facebook, LinkedIn, y TripIt. Por lo que he visto está todavía un poco verde.

Spring Puzzlers (Erick Camacho & Sergi Almar)
Muy buena idea, someter al público a una serie de problemas típicos con Spring. Se han planteado cuatro "puzzles" muy bien orientados. 
  1. El primero de ellos trataba sobre una variable estática que por tanto no puede inyectarse. 
  2. El segundo sobre un error al inyectar una dependencia causado por el proxy que mete Spring para tratar las transacciones. Pasaba por trabajar con objetos de la implementación en lugar de la interfaz (error de diseño).
  3. El tercero sobre las llamadas que se hacen al proxy de AOP, y cómo no se llama al proxy si la llamada es desde dentro del propio objeto. Además los aspectos de Spring AOP sólo funcionan sobre beans que estén dentro del contexto de Spring, no sobre todos los objetos.
  4. El cuatro sobre las anotaciones de transacciones, y el "REQUIRES_NEW", que crea una nueva transacción por lo que al hacer rollback de la principal, no se hacía de la hija.
Me han gustado mucho los cuatro (tres los sabía, pero he fallado el primero porque no sabía que no se podían inyectar valores a atributos estáticos).

En conclusión, ha sido un día muy productivo en el que he aprendido mucho, me llevo muchas y muy buenas ideas para implementar en el framework ATLAS.