SpringOne 08 Day 1 Report
viernes, junio 13, 2008 at 11:28AM Un año más, ha empezado SpringOne en la ciudad de Amberes, Bélgica, con un total de 400 asistentes de 25 países diferentes.
La keynote ha estado presentada por Stephan Janssen (fundador de JavaPolis [JaVoxx a partir de ahora] y fundador de BeJUG) que ha aprovechado para presentar nuevamente su criatura RIA (www.parleys.com) y sus nuevas funcionalidades.
Seguidamente ha dado paso a Rod Johnson (CEO de SpringSource) para empezar propiamente la keynote. No ha dudado en empezar comentando que en diciembre del 2007, las ofertas de trabajo en Spring superaron aquellas que pedían EJB (en el mercado americano, según www.indeed.com). Básicamente ha pasado toda la keynote comentando las nuevas virtudes de Spring 2.5; virtudes que ha acabado de alabar Juergen Hoeller en su siguiente presentación.
Novedades en Spring 2.5:
- Soporte explícito para JDK 1.6 (JDBC 4.0, JMX MXBeans) y se deja de dar soporte a JDK 1.3
- Soporte para AspectJ-LTW (load time weaving), funcionalidad muy interesante; hasta ahora la AOP creaba Proxies para hacer su funcionalidad, ahora modifica directamente el bytecode
- Soporte para JavaEE 5
· Soporte para JPA 1.0 (fucionalidades como soporte para savepoints en OpenJPA) y EJB 3.0
· Soporte para Servlet 2.5, JSP 2.1 y JSF 1.2
· Soporte para JTA 1.1
Pero si embargo, las novedades vienen marcadas por las annotations:
Soporte para DI con anotaciones
- @Autowired, aplicable en métodos y atributos. Sencilla forma de inyectar las dependencias (autowiring by type)
- @Qualifier: se utiliza para la desambiguar la resolución de dependencias (autowiring by name)
- También se podemos tener una resolución de dependencias por anotaciones; se crea una asociación entre una anotación y lo que tiene que ser resuelto (autowiring by annotation).
Anotaciones JSR-250:
- @Resource, es una anotación estándar con la misma funcionalidad que @Autowired, pero menos flexible.
- @PostConstruct @PreConstruct
- También nos encontramos con la muy interesante meta-anotación @Component, que tiene definido como estereotipos @Service, @Repository, @Aspect y @Controller, pudiendo crear nuestros propios estereotipos. Si utilizamos estas meta-anotaciones, no no hará falta declarar nuestro beans en ningún XML, así que podemos dejar toda la configuración XML y utilizar simples anotaciones (a gusto del consumidor), sólo tendremos que especificar
- Otra anotación interesante es la de @Configurable, que nos permite utilizar el constructor new aprovechándonos de la DI, gracias a AspectJ. Esto quiere decir que si anotamos un bean con @Configurable y tiene propiedades que tienen que ser inyectadas (anotadas por ejemplo con @Autowired), al inicializar el objecto con un simple new, Spring se encargará de sus dependencias
- Las transacciones también se pueden realizar con annotations @Transactional
- Siguiendo con las anotaciones, Spring Security ya tiene soporte para seguridad declarativa, una gran simplificación.
- Y para tests de integración, presentan soporte para testing sin necesidad de desplegar en un servidor de aplicaciones y basado en anotaciones (como no). Soporte para JUnit 4.4, TestNG así como JUnit 3.8
En la parte web nos encontramos diferentes novedades:
- En Spring MVC Toda la declaración de controladores se puede realizar con annotations (@Controller) sin la necesidad de extender de ninguna clase, pudiendo hacer los mappings también con anotaciones en los métodos (@RequestMapping) y pasar atributos directamente del request (@RequestParam)
- Spring Web Flow 2.0 es mucho más simple, soportando transacciones multipaso y soportando eventos asíncronos (Ajax). Automáticamente detecta si el cliente tiene habilitado JS, en caso positivo, solo refresca la parte deseada, en caso negativo refresca toda la página.
- Nuevo proyecto Spring JavaScript, una nueva API para Ajax con una librería en la parte del cliente en JavaScript. De momento solo funciona con Dojo y tiles, pero hablando con los creadores, están trabajando para soportar otras tecnologías como Freemarker, Velocity...
- Otro nuevo proyecto es Spring Faces, que integra el modelo de componentes JSF en un entorno Spring.
Presentación de Spring Tool Suite (IDE), su IDE basada en Eclipse . Muy recomendable que le deis un vistazo
Que nos espera Spring 3.0?
Por lo pronto han anunciado que en agosto saldrá Spring 3.0 M1 (pero como han dicho...no os toméis la fecha muy en serio ^^). Novedades: soporte total para REST, soporte para lenguaje de expresiones.
La versión 3.0 GA se espera a finales de año (Q4), que se hará modificación del core utilizando generics i varargs, tendrá lenguage de expresiones (Unified EL++), soporte para Portlet 2.0 y preparación para Servlet 3.0, soporte REST, annotated wizard form controller...
Hay planeada pasar alguna API a deprecated, como es el caso de la jerarquía de clases de los controladores MVC (así que toca usar controladores anotados a partir de ahora!)
Rod Johnson acabó la keynote con una diapositiva que decía: EJB will die.
OSGi Programming Model por Adrian Colyer
Uno de los acrónimos que empieza a sonar fuerte, perdón acrónimo antes, ahora ya es una palabra. OSGi es el sistema de módulos dinámicos de de Java. Se explicó todo el funcionamiento de los módulos (bundles), básicamente todas las reglas de visibilidad, el proceso de resolución de dependencias (mediante Importers y Exporters) y como se conseguía el versionado de módulos (OSGi permite tener diferentes versiones del mismo módulo conviviendo conjuntamente y ser utilizado por otros módulos)
Los módulos se pueden: instalar, arrancar, parar, desinstalar y actualizar....en tiempo de ejecución! Estos módulos pueden publicar servicios, que gracias al ServiceRegistry se pueden buscar y usar.
Los beneficios claves que nos proporcionará OSGi son la modularidad, el control operacional y el versionado.
Implementaciones open source que podemos encontrar: Eclipse Equinox (utilizado por el SpringSource Application Platform), Apache Felix, Knopflerfish.
Los tests de integración con OSGi son difíciles, pero esa desventaja no es la única que nos encontraremos, el uso de librerías existentes no diseñadas para OSGi nos pueden llevar quebraderos de cabeza; pero los chicos de SpringSource ya se han preparado para esto, han adaptado más de 350 librerías open source para ser utilizadas en entornos OSGi. El repositorio es público y se puede encontrar aquí: http://www.springsource.com/repository/app/bundle
Using Spring Security 2.0 por Mike Wiesner (pensaba que la impartiría Ben Alex, creador de Acegi Security)
Spring Security ha dado un gran salto (antes Acegi Security), a parte de cambiar de nombre (básicamente porque todo el mundo preguntaba que quería decir...premio para el que lo sepa :P), ahora ya contamos con seguridad declarativa mediante anotaciones. Acegi realmente era difícil de configurar, toda la configuración se hacia en un lenguaje de infraestructura, ahora ya lo podemos hacer en lenguaje de usuario (Spring Security nos crea una configuración básica, con lo que una configuración típica de Acegi que ocupaba 130 lineas de XML ahora solo ocupa 10!).
Otra mejora viene de la mano de el namespace para seguridad, así como la mejora del soporte para LDAP y para Single Sign-On. Spring Security proporciona múltiples métodos para la autenticación (autenticación básica, JDBC, LDAP, NTLM, JAAS, OpenID...), permitiéndonos hacer un mix de estos (usar OpenID para la autenticación [usuari y contraseña] y JDBC para sacar los roles o permisos del usuario). Mike hizo una pequeña demo mostrando la facilidad de añadir seguridad a una aplicación.
Algunas buenas prácticas comentadas: securizar URLs para autorización de gran granularidad; securizar métodos para autorización de granularidad fina.
Otra buena práctica es no securizar los métodos a nivel de roles (@Secured("ROLE_ADMIN")), sino extender el modelo y utilizar permisos @Secured("PERM_DELETE_USER").
Importante testear la seguridad (seguro que hay muchos que no lo hacéis!). Con JUnit acabaremos teniendo infinidad de tests, así que recomiendan FIT para el testeo de la seguridad.
Spring Transaction Choices for Performance por Juergen Hoeller
El manejo de transacciones es bastante frecuente en aplicaciones JEE, Juergen nos mostró las diferentes estrategias de transacciones que tenemos en Spring y lo que supone utilizar cada una. A modo de resumen, se comentó:
- Transaction manager nativos (JDBC [DataSourceTransactionManager] y los de los ORM que se respaldan por el de JDBC por debajo). El problema de estos es que sólo permiten un recurso o base de datos, no respaldando así transacciones a múltiples bases de datos, pero nos garantizan el máximo rendimiento.
- Transacciones JTA (abstracción para XA): necesitan un transaction coordinator, por lo que añaden bastante overhead, pero por otro lado tiene fuertes garantías transaccionales a través de múltiples recursos.
Y como consejos, en caso de tener un solo recurso utilizar siempre transaction managers nativos. En caso de tener múltiples recursos, mirar la posibilidad de utilizar una combinación de transaction managers nativos, a menos que no podamos soportar la mínima posibilidad de algún rollback por alguna inconsistencia.
Para transacciones JMS, es preferible evitar XA, intentar utilizar transaction manager nativos, pero en este caso tenemos el peligro de recibir el mensaje dos veces en caso de que algo fallara entre el commit de la base de datos y el aknowledge del mensage, así que tendremos que gestionar el doble envio de mensajes (más rápido comprobar el doble envio que el overhead añadido por XA).
Enterprise Integration Patterns with Spring por Mark Fischer
Mark nos presentó el proyecto Spring Integration. Spring proporciona integración para JMS, remoting, scheduling, email y JMX. Spring Integration intenta crear una capa de abstracción para los patrones de integración empresarial, con la filosofía de separar los componentes de negocio del sistema de mensajeria utilizado. Se mostraron ejemplos de algunos patrones como: MessageChannel, Messagen EndPoint, Message Translator, Message Router.
Todo, como no, utilizando annotations.
I para terminar, una patatas fritas y unas cervezas para hacer un poco de contactos y hablar con la gente de SpringSource.
Si habéis llegado hasta aquí...vaya paciencia! Nos vemos en Madrid en el Hands-on-Spring!
j2ee 
Reader Comments