Buscar
Social
Ofertas laborales ES
jueves
oct212010

SpringOne 2GX 2010: Review segundo día

El segundo día ha empezado bastante temprano, a las 7:30 teníamos el desayuno y a las 8:30 la primera sesión. La agenda es bastante completa, 8 tracks concurrentes, así que aquí van los resúmenes de las sesiones que hemos atendido:

 What's new in Spring 3.1?
Juergen Hoellen ha empezado haciendo un resumen de las funcionalidades de Spring 3.0: SpringEL, REST, Portlet 2.0, JSR-330, modelo de validación declarativa...Spring 3.0.5 va a ser la última release de la serie 3.0.x (para finales de Octubre), a partir de ahí, nos vamos a encontrar con Spring 3.1. ¿Qué vamos a poder ver en esta release?
- Environment profiles: podremos tener diferentes entornos en nuestra configuración (dev, test, prod) y definir beans para cada uno de ellos. Básicamente nos proporciona una abtracción de entorno, lo bueno es que no vamos a tener que cambiar nada en nuestro artefacto final (como un war, podemos utilizar el mismo war para test y producción), los perfiles se activan externamente, por ejemplo con una propiedad del sistema (-DspringProfiles=dev). Para la configuración, tendremos y la anotación @Profile.
- Cache abstractions: hace más de 5 años que Spring tiene un paquete que se llama cache, pero nunca se llenó...ahora es el momento de llenarlo y se va a enfocar a las caches distribuidas para entornos cloud. Vamos a poder encontrar adaptadores para EhCaches, GemFire, Coherence... y anotaciones que nos van ayudar como @Cacheable y @CacheEvict junto con un namespace para habilitarlas ()
- Conversation management: gestión la conversación actual, HTTPSession++. Vamos a tener mayor control y definir por ejemplo una windows session (una session válida sólo para la ventana actual, si abrimos otra pestaña, va a tener una sessión nueva) o definir explícitamente nuestra conversación. Esto va a ser utilizado también, por Spring Web Flow 3.
- Otros: soporte para Servlet 3.0, soporte para JSF 2.0 mejorado, mayor soporte para Groovy, nuevo namespace c (similar al namespace p, para constuctor injection).

Respeto a fechas y milestiones, vamos a tener dos milesones para Spring 3.1 (M1 para finales de noviembre y M2 a principios de enero), RC1 para febrero y GA para marzo.

Spring 3.2 básicamente intentará integrar todo lo nuevo de Java 7 (JDBC 4.1, fork-join framework para programación multicore y concurrencia) y está programado para finales de 2011.
 

Spring Web Services 2.0

En esta sesión Arjen Poutsma ha presentado Spring Web Services y el modelo contract first. Gran parte de la charla ha sido una demostración de lo que ya teníamos, cómo generamos el contrato a través de un mensaje de ejemplo XML y posteriormente hacemos la implementación con los endpoints.
Referente a la versión 2.0, lo que pretende es ir a la par con Spring 3.0, esto quiere decir actualizar a java 5. A parte de esto, el modelo de programación se asemeja más al de Spring MVC, se han introducido más anotaciones para permitir obtener cosas como: @RequestPayload, @RequestBody, @SoapHeader en los métodos del endpoint. La jerarquía de endpoints que teníamos en la versión 1, queda deprecated en favor al modelo de anotaciones.
Pero una de las características más interesantes son el full streaming y el soporte para tests de integración (para la parte cliente y la parte servidor).

La versión final de Spring WS 2.0 verá luz en diciembre / enero.

Improve the performance of your Spring Application

 Esta presentación se ha centrado en optimizar el rendimiento de nuestras aplicaciones. ¿Cómo? Introduciéndonos al nuevo Spring Cache Abstraction. Antes de todo se ha hecho una introducción al tema de rendimiento (disponibilidad, tiempo de respuesta...), métricas (instrucciones por segundo, consumo de energía, disponibilidad...) y caches (usadas básicamente para reducir acceso a base de datos, invocaciones remotas y operaciones costosas).

Actualmente hay diferentes caches disponibles: EhCache, JBoss Cache, JCS, OSCache, JCache.. y diferentes data grids: GemFire, Gigaspaces, GridGain, Terracotta, Oracle Coherence, lo que intenta Spring Cache Abstraction es proporcionar un mínimo denominador común para acceder muchos de ellos, una abtracción similar a la que tenemos en el acceso a datos  y con una aproximación como la de transacciones (anotaciones + AOP). Algunas de las anotaciones y sus usos:

@Cacheable(condition="nam.length < 10")
@CacheEvict(name="owners", allEntries=true)

También contamos con un nuevo namespace cache para la configuración en XML.

Lo importante cuando utilizamos estas caches es conocer a nuestros datos, estas abstracciones funcionan como una caja negra, situación que hace difícil gestionar duplicados y relaciones entre datos (puede que tengamos que interactuar con el proveedor directamente para tener un mayor rendimiento). Otra cosa a tener en cuenta es que las caches funcionan de maravilla si consultamos por la key, pero cuando hacemos queries basados en los valores de la cache perdemos todo el rendimiento. Una cache puede ser a veces decepcionante, los misses de una cache son caros, así que siempre se tiene que considerar la situación, los datos que tenemos y como los utilizamos.

Otra solución es usar un data grid como GemFire. Un data grid nos va a permitir tener una cantidad de datos importante y a la vez tener rendimiento y escalabilidad (pudiendo replicar datos entre nodos, distribuirlos para escalabilidad horizontal...). Aquí nos mostraron los el proyecto Spring GemFire y la configuración a través de su namespace. ej:



When is garbage not garbage? Using Ehcache to overcome the JVM's limitations

Personalmente me encantó esta charla. El CTO de Terracota, Ari Zilka, nos dió una clase de una de las asignaturas pendientes de muchos desarrolladores Java: la gestión de memoria. Para ello, nos puso un caso práctico de una aplicación donde se creaban muchos objetos. El problema era evidente, el garbage collector paraba la aplicación a menudo para hacer su función con lo que el rendimiento de esta era muy pobre. ¿Cuál fué la primer solución? Utilizar el garbage collector en paralelo (flag -XX:-UseParallelOldGC), esta solución no fue suficiente, así que se cambiaron al colector ConcurrentMarkSweep e implementaron todo el código sin locks, tampoco tuvieron éxito.

El problema es la complejidad de todos estos temas. Hacer código sin locks requiere experiencia (atomicidad, read repair...) y el tuning del GB es muy sensible, cada vez que cambiamos el código tenemos que reajustar los parámetros. 

Como alternativa se presentó BigMemory, lo que hace principalmente es esconder la el contenido EhCache del GB, de esta manera nos evitamos las paradas del GB y para ello tiene propia gestión de memoria. Acabaremos teniendo el heap, el off-heap (gestionado por BigMemory) y el disco (usado por BigMemory para persistir)

En la demo que nos hizo, pudimos ver como una aplicación tenia 200mb de heap, pero como proceso consumia 2Gb debido a la gestión de BigMemory.

What's new in Spring Integration 2.0?

En esta charla se presentaron las novedades de Spring Integration 2.0. Ahora, igual que en todos los nuevos proyectos del portfolio de Spring, SI 2.0 utiliza el Spring Expression Language (se puede utilizar dentro de los transformes, routers...). Además utiliza los nuevos ConversionService, para hacer conversiones automáticas entre objetos, los mismos que podríamos utilizar en la capa web por ejemplo. Los adaptadores HTTP ahora utilizan el RestTemplate internamente. Estas funcionalidades, básicamente se adaptan a los que es Spring 3.0.

También encontraremos un nuevo adaptador para XMPP y evolución de los adaptadores para JDBC, JMX, TCP/UDP, RSS, FTP, Twitter. Nuevos patrones que podremos encontrar: message history, message store, claim check y control bus. Soporte también para Spring Roo.

Una de las caracteristicas que ahora viene con el STS (2.5), es el soporte visual para Spring Integration, muy útil para ver nuestro flujo.

Para acabar, nos hicieron una demo utilizando el nuevo adaptador para XMPP. A través de GTalk y proporcionando un código postal, el sistema obtenía los datos meteorológicos y de trafico y lo enviaba por correo electrónico, por twitter... Podéis encontrar todas las demos aquí: http://git.springsource.org/s2gx-2010/spring-integration

 Grails 1.3
En esta charla Graeme Rocher habló un poco sobre lo nuevo en Grails 1.3 pero sobre todo lo que han cambiado para la siguiente versión: 1.3.5. En la charla estaba también Peter Leadbrook, otro commiter del proyecto que intervino bastante en el transcurso de la sesión.

La sesión inició mostrando el soporte mejorado a Grails en la nueva versión de STS. Ya está bastante pulido y causó muy buenas impresiones. Graeme mencionó que en esta versión han seguido mejorando el performance y como ejemplo mencionó como han arreglado el tema de la compilación de los GSP que tomaba demasiado tiempo y ha menudo terminaba con problemas de falta de memoria PermGem poniendo una tarea de compilación que precompila estos archivos para que en runtime ya no ocurra.

Otros temas que trató fueron que ahora puedes declarar las dependencias de tu proyecto en el fichero BuildConfig usando sintaxis de Gradle, algo bastante interesante. Incluso puedes declarar los plugins que estás usando, para que no se tengan que conseguir a través del comando grails install-plugin: ya está centralizada la gestión en el archivo de configuración. Incluso puedes especificar que ciertas dependencias de un plugin no se instalen (por ejemplo, quitar ehcache de las dependencias de Hibernate si no lo vas usar).


De lo nuevo, lo que causó más expectativa es el soporte a NoSQL con GORM. Ahora GORM también es una abstracción sobre varios datastores NoSQL (Redis, Cassandra, GemFire, MongoDB, etc) que permite al programador usarlos en sus aplicaciones de una forma bastante consistente a lo que venía haciendo con GORM para Hibernate. De esta forma, puedes usar los finders, namedqueries, constraints que ya se usaban pero ahora con bases de datos NoSQL.

Entre otros cambios, se cambio totalmente el JSONBuilder para que sea más amigable y con una sintaxis más cercana a Json, se anunció un plugin para Flex y para VMForce.

La sesión fue muy interactiva porque los programadores que estaban ahí en su mayoría tenían ya aplicaciones en producción con Grails, por lo que hacían muchas preguntas y sugerencias sobre los nuevos features. Graeme aprovechó para mencionar algunas features que ya están en la 1.3 pero no funcionan muy bien y están arreglándolas para la 1.3.5.

Esta versión será estable antes de fin de año. En la 2.0 -que saldrá en algún momento del próximo año- vendrán muchos cambios. De entrada se cambiará el build system para usar Gradle, cambio que mencionaron será lo más complicado de esta versión. Además se migrará a las últimas versiones estables de las dependencias: Groovy, 1.8, Spring 3.1, Hibernate 3.6. Se cambiará además el sistema de recarga en caliente del contexto que ahora está basado en recargar el classloader de la aplicación lo que lo hace muy ineficiente a uno basado en agentes java (usando el proyecto Continuous Deployment).

También se anunciaron varios nuevos features para GORM producto de las peticiones de los usuarios. Migrations, ingeniería en reversa de bases de datos existentes, abstract inheritance.

Todos estos cambios ocasionarán que Grails 2.0 no sea compatible hacía atrás con la 1.x. De hecho, lo más seguro es que ni siquiera habrá un comando en la 1.3.5 para actualizar a la 2.0

En esta sesión y a lo largo de lo que se ha visto en la SpringOne, Grails goza de una gran salud, una gran comunidad de usuarios y SpringSource está apoyando mucho al proyecto. De hecho a diferencia de lo que ha pasado durante este año, se ha hablado más de Grails que de Spring Roo.

Keynote

Después de cenar (por cierto, muy buena comida durante toda la conferencia), Adrian Colyer, se encargó de la keynote, básicamente haciendo un resumen de todo lo nuevo que habíamos visto.

Aprovechando la keynote, se entregaron los Springy Awards:
- El producto más innovador: Gradle
- Community champion: Manuel Jordan Elera, de la Univesidad Católica de Santa María en Perú con más de 1600 posts en el foro de Spring.
- Mejor aplicación:Inkchaser, una aplicación realizada en Grails en sólo 45 días.

jueves
oct212010

Apple caracteriza a Java en Mac Os como "Deprecated"

Ayer Apple en un evento anunció varias actualizaciones para su plataforma, incluido Java  10.6 update 3, lo equivalente al JDK 1.6.0_22 de Oracle. Lo curioso es que en las releses notes se indica que Java está "Deprecated" por lo que no se recomienda que se emplee en el desarrollo de aplicaciones. Además, se advierte que en el futuro podría ser retirado del sistema operativo Mac OS.


También se habla de una nueva estructura de directorios destinada a instalar máquinas virtuales de terceras partes: /Library/Java/JavaVirtualMachines. Esto da a entender que posiblemente la compañía no libere nunca un JDK 7, sino que tendrá que ser alguna otra parte (¿Oracle? ¿La comunidad?) La que la desarrolle si le interesa.


Apple siempre ha ido bastante rezagado en su soporte de Java, yendo habitualmente sus versiones bastante por detrás de las versiones oficiales. También tiene una historia bastante notable en no proporcionar nuevas versiones de la máquina virtual para versiones antiguas de su sistema operativo. Y es más que sabido que no da soporte a Java en su terminal móvil o iPad.


Esto sin embargo es la gota que colma el vaso. Yo creo que esta vez se han pasado y los usuarios de Mac (entre los cuales hay muchos programadores Java) se lo van hacer notar.

jueves
oct212010

XII Charla Gratuita Autentia - LiquiBase


¡Hola a todos! Como siempre, con unas semanas de antelación, os anunciamos nuestra próxima charla Autentia.

La XII charla gratuita Autentia sobre nuevas tecnologías, que se celebrará el 4 de Noviembre, será impartida por Saúl García (sgdiaz@autentia.com) y versará sobre LiquiBase.


LiquiBase es una librería OpenSource (bajo licencia Apache 2.0), independiente de la base de datos, que nos permitirá realizar el seguimiento, la gestión y aplicación de cambios en nuestro modelo de datos.

Está construída sobre una simple premisa: todos los cambios en la base de datos son almacenados en un formato legible para los humanos, permitiendo su seguimiento y controlado por tu sistema de control de versiones.



LiquiBase soporta:

  • Extensiones
  • Fusionar (merge) cambios de múltiples desarrolladores
  • Ramificaciones de código
  • Múltiples Bases de Datos
  • Gestionar datos en producción como también en varias etapas de testeo y desarrollo
  • Cluster-safe database upgrades
  • Actualizaciones automáticas o generación de scripts SQL que pueden ser aprovadas y aplicadas por un DBA
  • Deshacer actualizaciones
  • Revisar diferencias entre versiones ("diff"s)
  • Generar logs de cambios iniciales desde bases de datos existentes
  • Generación de documentación de cambios de bases de datos

En la charla veremos algunos aspectos teóricos sobre el funcionamiento de la librería, su configuración y puesta en marcha, aunque el objetivo principal es contar la experiencia que ha supuesto integrar LiquiBase en uno de nuestros proyectos activos. De esta manera veremos cuáles son las ventajas que nos brinda esta librería.


Como siempre, la charla será gratuita y, como siempre, el aforo es limitado.

Podéis ver la noticia completa y registraros para la charla en: Charlas Autentia - LiquiBase


(para los que no podáis asistir, como siempre, publicaremos el material de la charla y el vídeo en AdictosAlTrabajo al cabo de unos días)


¡¡Muchas gracias!!

jueves
oct212010

Zing Plataform, de Azul Systems, disponible para x86

Zing es un entorno de ejecución Java "elástico" que pretende llevar parte de la tecnología que la compañía ha implementado en hardware en sus procesadores Vega específicos para ejecutar aplicaciones Java, a hardware genérico. Zing es una solución 100% software que puede ser desplegada sobre hardware genérico.  

 

Zing podría describirse como una nube privada con capacidad para expandirse o contraerse a nuevas máquinas según la demanda. Además, añade un sistema operativo a medida, basado en Linux, y una máquina virtual a medida, basada en el OpenJDK para obtener mejoras de eficiencia y romper ciertas barreras que en los sistemas operativos actuales no se pueden romper a nivel de aplicación.

 

Uno de los ejemplos de lo que proporciona esta plataforma es la solución al problema del recogedor de basuras: la implementación de Zing del recogedor de basura no tiene por qué causar paradas cuando se usan heaps grandes, y sigue siendo eficiente aunque se esté empleando memoria virtual.

 

Esta semana Azul ha anunciado la primera versión estable de Zing  para plataformas x86. Zing Plataform está basada en el proyecto opensource Managed Runtime que Azul anunció recientemente. Según la compañía, Zing es un súper conjunto de Managed Runtime que se distribuye bajo una licencia comercial.


¿Cual es vuestra opinión sobre esta tecnología?

miércoles
oct202010

Material Seminario Spring Roo y Spring Insight - Paradigma Tecnológico

El pasado 14  de Octubre javaHispano, Paradigma Tecnológico y la Escuela Politécnica Superior de la Universidad San Pablo CEU  organizamos un seminario gratuito sobre Apache Roo y Spring Insight en Madrid, España. Ahora Paradigma Tecnológico ha hecho público el material del seminario aquí.

 

Adicionalmente se ha publicado el video del seminario en el canal de javaHispano en Parleys: 

 

 

 

Esperamos que este seminario haya cumplido con vuestras expectativas y os haya permitido descubrir las novedades más recientes de los productos ofrecidos por SpringSource.

 

Para poder descargaros el código y la documentación, únicamente es necesario instalar el cliente de Subversion para vuestro sistema operativo y ejecutar el siguiente comando:

 

svn checkout http://seminario-roo-insight.googlecode.com/svn/trunk/ seminario-roo-insight-read-only

 

Si únicamente queréis bajaros la documentación, la podéis descargar aquí

Un saludo,

Paradigma Tecnológico.