Dejo aquí mi presentación del taller “Hands-on Spring 3: The next generation” impartido en el Sun Open Communities Forum (18 de Junio 2009):
Update 25/06/09:
Poco tiempo para postear durante el evento, así que sólo me dio tiempo para colgar la presentación y el ejemplo.El evento fue otra excusa para retomar contacto con gente como Abraham Otero, Alfredo Casado, Nacho Brito, Nacho Coloma, Dani López, Dani Latorre, Álvaro Sanchez-Mariscal, Peyrona…De hecho mi impresión es que en España, en general, hay poca filosofía de asistir a eventos como este, los asistentes totales fueron 164, que si comparamos con otros eventos como Devoxx (otra índole está claro) que hacen lleno con 3200 asistentes, queda com un poco ridículo. Aunque la magnitud del evento no es comparable, a lo que me refiero, es que aún siendo eventos gratuitos (Devoxx requiere entrada), no veo una gran aceptación a este tipo de iniciativas como la tienen en otros sitios fuera de España. Me pregunto porqué…
Por otra parte, os dejo arriba, el ejemplo que hice para el taller de Spring 3.0. Encontrareis la versión acabada y la versión por acabar. Consiste en un javaHispano REST, donde se debe completar algunas partes de soporte para peticiones REST (GET y DELETE), negociación de contenido (MarshallingView para mostrar noticias en XML) y consumo de servicios REST (parte cliente), en este caso consumo de los servicios REST de Flickr.

Filed under: Uncategorized | 1 Comment
Aprovechando mi estancia en Londres, ayer asistí al encuentro del grupo de usuarios de Spring de UK. En toda Gran Bretaña, el grupo de usuarios cuenta con unos 600 miembros, pero la verdad es que ayer, coincidiendo con la huelga de metro, poca gente se acercó (unas 30 personas).
El meeting fue bastante interesante, más por la gente que asistió. Retomé contacto con gente de SpringSource con la que que hacia tiempo que no coincidía (digamos ex-SpringSource), la cuestión es que a principio de año, debido a diferentes situaciones, algunos integrantes de SpringSource salieron de la empresa y se juntaron para empezar una nueva aventura empresarial: Open Credo. Vale la pena seguir la pista a estos chicos, básicamente se dedican a consultoría, publicaciones y formación (están en negociaciones para ser partners de SpringSource, situación un poco rara pero tiene todo el sentido), pero presentaron en primicia su proyecto Open Source Central (aún en construcción, en producción a partir de la semana que viene).

Open Source Central pretende ser el centro de los proyectos con éxito open source, promoviendo buenas prácticas y ofreciendo conocimiento experto. Pretende ser el punto central para recomendaciones de uso de proyectos Open Source en el desarrollo de software. Tenemos diferentes partes en el proyecto:
- Open Source Central community: foros para el intercambio de buenas prácticas, evaluación de tecnologías emergentes, últimos vídeos y podcasts con contenidos de calidad…
- Open Source Central Extras: los contribuidores a los proyectos open source van a tener un ranking según lo que contribuyan, de esta manera se tiene un reconocimiento y popularidad dentro del proyecto.
- Open Source Central for Business: dedicado a las empresas que quieran dar a la comunidad código y que sea ésta la que haga el mantenimiento. Opción muy interesante, vamos a ver que aceptación tiene…
A parte de esto, el motivo principal, fue la charla que se dio fue sobre Grails (Grails eye for the Spring guy), a cargo de Russ Miles.

La charla era de nivel introductorio, pero a modo de resumen:
- Grails para ser más productivo, con el añadido que todo es familiar a al nuevo desarrollador y está basado en tecnologías ya maduras (Spring, Hibernate..)
- Basado en convenciones: básicamente las decisiones las hace Grails, no tenemos que elegir nosotros porque ya hay una manera correcta de hacerlo
- Es un framework full stack (Groovy, ORM, transacciones, templating para la IU…)
- Grails es una aplicación Spring: utiliza Spring por debajo, utiliza Groovy, introduce convenciones, elimina la complejidad.
- Tendremos código más limpio: podremos utilizar Java cuando queramos, dinámico cuando queramos que lo sea.
- Añade: closures, propiedades, sobrecarga de operadores, sintaxis nativa para listas y otras colecciones, utiliza MOP.
- Tenemos un abanico de plugins listos para utilizar
- Grails UI: componentes basados en YUI.
Al finalizar, como de costumbre, vinieron las cervezas
Filed under: emprendedores, grails | 1 Comment
Ayer estuve en un charla de Antonio González-Barro, socio-fundador y presidente del grupo Intercom, llamada “Claves de éxito en el proceso emprendedor”. El grupo Intercom tiene proyectos como: infojobs.net, softonic.com, emagister.com… entre los más conocidos. La charla fue muy dinámica y consistió básicamente en en resolución de dudas que los asistentes tenían con una definición de emprendedor para acabar. A breve modo se trataron lo siguientes temas:
¿Cómo empezó Intercom?
Intercom empezó con la idea de dar conectividad a Internet o sea como ISP. Todo empezó (en el año ‘95) poniendo un anuncio en prensa que decía: “si tienes una idea y necesitas ayuda, tenemos el tiempo y el dinero”, a ese anuncio no llamó nadie…Hasta que una persona se interesó y se tiró adelanta su proyecto. En sus inicios, la empresa la formaron 23 personas con un capital de 60k€, pero pronto necesitaron ampliar en 400k€ que gracias a ser ese número de personas, lo pudieron absorber. Ahora son más de 350.
¿Cómo monetizar un proyecto en internet?
Básicamente hay cuatro formas:
1) Por servicio: tu ofreces un servicio y los clientes pagan por él
2) Publicidad: El ejemplo que puso es el de Softonic, que actualmente factura unos $500.000 / mes de anuncios de Google.
3) Intermediación: Intermediación de servicios tipo algunas páginas de vuelos.
4) Rentabilización de la información: a medida que vas evolucionando, vas recogiendo información que puede ser muy valiosa y susceptible para su explotación. ¿Quién sabe más del empleo en españa, infojobs o el INEM?
¡Ya no quedan ideas, todo está inventado!
Siempre hay cosas para hacer. El problema es que siempre cuesta un riñón: En el caso que no haya competencia, te cuesta introducir el producto/servicio ya que todo el mundo es reacio; en el caso que haya competencia, tienes que competir con todos los otros. Entonces, ¿te la juegas a sacar la maquinilla de afeitar desechable (evidentemente cuando no había!) o te esperas 20 años y compites con todos los otros?
Hay cosas que al no haber existido antes en papel, es difícil visualizar en internet, pero pueden tener un gran valor. Este es el caso de emagister, antes no habían clasificados de formación, pero tiene todo el sentido del mundo. Tenemos que hacer ejercicios de pensamiento lateral para intentar identificar estas oportunidades.
Sea lo que sea, aún falta mucho por inventar!
¿Cómo ha gestionado el crecimiento Intercom?
En el grupo Intercom todo el mundo tiene mucha capacidad de autonomía. No existen las jerarquías y cuando se dan alas a la gente vuelan muy alto! Esta es la principal clave de su crecimiento, a parte hay una importante transferencia de know-how dentro de las empresas del grupo.
¿Cómo romper el hielo con los clientes en proyectos nuevos?
Se debe dejar en manos de vendedores expertos conocedores del mercado del que queremos introducirnos y crear cosas originales. Una técnica que se utiliza mucho es empezar de forma gratuita y empezar a cobrar tiempo después.
También está lo que se conoce como “la técnica abrelatas” consistente en convencer a un conocido que esté dentro de una empresa grande para que su empresa utilice nuestro producto y así poder hacer referencia a la misma: “La empresa X utiliza nuestros servicios”…
¿Cuántas visitas mensuales se necesitan para la publicidad?
Normalmente se está pagando unos $0.15 por usuario único y mes, con lo que si tienes 500k usuarios te podría reportar unos 75k€. En Intercom gastan mucho dinero en google adwords, no hacen publicidad en otros medios prácticamente.
¿Cuánto tiempo tarda un proyecto en tener éxito?
Depende…Hay los de corto plazo y los de largo plazo. En Intercom no buscan proyectos que den dinero rápido, tienen paciencia pero buscan proyectos que den mucho dinero. La media viene a ser unos 3 años.
Para terminar Antonio hizo su definición de emprendedor bastante extensa y concisa, que se puede resumir en todos los siguientes puntos:
Motivación, capacidad de arriesgar, capacidad de superar fracasos, autonomía, responsabilidad, confianza, honestidad, humildad, tenacidad, paciencia, optimismo, generosidad, sobriedad, sinceridad, sentido común, capacidad de acción, capacidad de aprender, creatividad, pasión y muy importante, disfrutar en el trabajo que trabajar sin amor es esclavitud.
Filed under: emprendedores | 1 Comment
Este año me fue imposible asistir a SpringOne debido a la coincidencia de fechas con el curso de Spring impartido en Madrid, pero sin duda uno de los términos que más corrían esos días por Twitter era Spring Roo.
Spring Framework, por si solo, aumenta la productividad del desarrollador encargándose de todo ese “boilerplate code”, como lo llaman en la lengua de Shakespeare, pero si a esto le añadimos generación de código y configuración, la productividad se puede ver incrementada sustancialmente. Aquí es donde entra Spring Roo, aún en fase alpha (versión en el momento de escribir este artículo 1.0.0A2), por lo que no vamos a ser demasiado críticos.
Aprovechando el anuncio que SpringSource Tool Suite pasa a ser gratuito, me he bajado la nueva milestone 2.1.0.M1 que incluye integración con la consola de Spring Roo.
Creando un proyecto Roo
Para crear un proyecto con Spring Roo, deberéis seleccionar File > New > Other y escoger Template Project dentro de SpringSource Tool Suite:

En la siguiente pantalla simplemente escoger el template Roo Simple y a continuación deberéis introducir el nombre del proyecto y el paquete para finalizar el proceso.

Con esto, vamos a tener una estructura de proyecto basado en maven, con 3 archivos de configuración básicamente:
- applicationContext.xml: Un aplication context básico que da soporte para el uso de anotaciones y escaneado de componentes.
- web.xml:Configuración para Log4j, registro de un DispatcherServlet, registro de un ResourceServlet (Spring JS, para servir el contenido estático) y un OpenEntityManagerInViewFilter para JPA.
- {nombreDelProyecto}-servlet.xml: Un aplication context para el contexto del DispatcherServlet configurado en el web.xml con escaneo de componentes(@Controller), un ExceptionResolver y un ViewResolver(para JSPs).
Añadiendo clases persistentes
Una vez tenemos la estructura del proyecto, nos interesará añadir algunas clases de nuestro dominio. Para ello vamos a habilitar primero JPA en nuestra aplicación. Esto lo vamos a hacer utilizando la consola de Roo que la podemos habilitar con un simple CTRL + R:

En nuestro caso vamos a suponer que utilizamos PostgreSQL y Hibernate para JPA. El comando a utilizar es tan simple como:
install jpa -database POSTGRESQL -provider HIBERNATE
¿Que nos va a generar esto?
- persistence.xml: Creación de la persistence unit con una configuración básica
- database.properties: Creación de un archivo properties con la información de conexión a la BD (driver, url, usuario y password), el cual deberemos rellenar con la información adecuada.
- En el applicationContext.xml: creación de un Data Source con la configuración del archivo database.properties accedido por un PropertyPlaceHolder, un Transaction Manager y finalmente una factoría de EntityManager.
- Actualización de las dependencias Maven.
Bien, ya estamos preparados para usar JPA, vamos a por las clases de nuestro dominio. Usaremos para ello la siguiente instrucción (la ~ sirve para asignar el paquete que le hemos especificado al proyecto):
new persistent class jpa -name ~.Persona
Y para los atributos de la clase:
add field number -fieldName id -type java.lang.Integer
add field string -fieldName nombre
En este punto es cuando ha venido mi sorpresa: Spring Roo genera 5 archivos!
Created SRC_MAIN_JAVA/Persona.java
Created SRC_MAIN_JAVA/Persona_Roo_Plural.aj
Created SRC_MAIN_JAVA/Persona_Roo_Entity.aj
Created SRC_MAIN_JAVA/Persona_Roo_ToString.aj
Created SRC_MAIN_JAVA/Persona_Roo_Configurable.aj
La clase java que genera es simple, sólo contiene los atributos sin ningún método, pero podemos ver que Spring Roo ha añadido 3 anotaciones a nivel de clase. Esto le va a servir para coger la información de los archivos que ha generado adicionalmente:
@Entity
@RooEntity
@RooJavaBean
@RooToString
public class Persona {
private Integer id;
private String nombre;
}
Pero, ¿dónde está todo lo otro? En los archivos adicionales .aj que ha creado. ¡Ahí está la magia! Cada vez que añadimos un atributo, Spring Roo actualiza esos archivos con la información adicional. Pero no sólo añade getters y setters, sino que también crear un archivo para acceder automáticamente a métodos transaccionales de persistencia como persist(), findPersona(id), y más cosas…Para que os hagáis una idea, veamos la pinta tiene el Persona_Roo_ToString.aj (como su propio nombre indica, va a contener el método toString de la clase):
privileged aspect Persona_Roo_ToString {
public java.lang.String Persona.toString() {
StringBuilder sb = new StringBuilder();
sb.append("id: ").append(getId()).append(", ");
sb.append("version: ").append(getVersion()).append(", ");
sb.append("id: ").append(getId()).append(", ");
sb.append("nombre: ").append(getNombre());
return sb.toString();
}
}
Más en la segunda parte, hasta aquí por ahora
Filed under: Uncategorized | 2 Comments
Libro de Spring Web Flow 2
Para los interesados en Spring Web Flow, recientemente ha salido un nuevo libro con las actualizaciones de la última versión: Spring Web Flow 2 Web Development.

El contenido del libro muestra como diseñar, desarrollar y probar aplicaciones web usando Spring Web Flow 2, enriquecer nuestras aplicaciones con AJAX, integración con Spring Security y Spring Faces. Durante el transcurso del libro se desarrolla una aplicación (un bug tracker) con explicaciones claras y concisas.
Personalmente, lo acabo de encargar hoy, en cuanto lo tenga leído voy a postear la crítica. Para los que queráis ver un poco de contenido, ofrecen un capítulo gratuito: Chapter 4 – Spring Faces.
Filed under: Uncategorized | Leave a Comment
La verdad es que se está haciendo larga la espera de esta versión mayor. En diciembre del año pasado, en Devoxx, se dio a conocer el roadmap de Spring 3.0:
Spring 3.0 Milestones Enero/Febrero 2009
Spring 3.0 Release Candidates Marzo/Abril 2009
Hoy mismo se ha dado a conocer la tercera milestone de Spring 3.0 (Mayo) y la RC1 está anunciada para Junio 09. La demora sigue….y ya hace un año y medio del anuncio de Spring 2.5. Toca esperar…
Pero, que nos espera en esta versión?
- Spring Expression Language: Un lenguaje de expresiones con sintaxis similar a Unified EL con funcionalidades adicionales como invocaciones de métodos. Se podrá utilizar en configuraciones XML o mediante anotaciones. Un ejemplo:
<bean class="mycompany.RewardsTestDatabase"> <property name="databaseName" value="#{systemProperties.databaseName}"/> <property name="keyGenerator" value="#{strategyBean.databaseKeyGenerator}"/> </bean>En el caso de las anotaciones:
@Repository public class RewardsTestDatabase { @Value("#{systemProperties.databaseName}") public void setDatabaseName(String dbName) { ... } @Value("#{strategyBean.databaseKeyGenerator}") public voidsetKeyGenerator(KeyGenerator kg) { ... } } - Metadatos para configuración: Algunas de las funcionalidades de JavaConfig se han incluido en Spring Framework. De esta manera, anotaciones como @Configuration @Bean @Primary @Lazy @Import o @Value, van a ser accesibles directamente. Esto nos va a permitir definir nuestros beans en clases anotadas (podemos decir que un método anotado con @Bean va a registrar un bean en nuestro aplication context del tipo especificado por el valor de retorno teniendo así comportamiento de BeanFactory) . Ejemplo:
@Configuration public class AppConfig { @Bean public TransferService transferService() { return new TransferServiceImpl(); } }Que va a ser el equivalente a:
<beans> <bean name="transferService" class="com.acme.TransferServiceImpl"/> </beans>Not my style, pero para gustos colores…
- Soporte extendido para metaanotaciones: anotaciones como @Scope @Transactional @Service @Controller puedes ser utilizadas como metaanotaciones lo que nos va a permitir crear nuestras anotaciones con estos comportamientos. Ejemplo:
@Service @Scope("request") @Transactional(rollbackFor=Exception.class) @Retention(RetentionPolicy.RUNTIME) public @interface MiServicio { } @MiServicio public class RewardsService {…} - OXM: El soporte para marshalling/unmarshalling de XML usando OXMs que se encontraba en Spring Web Services, pasa a ser parte de Spring Framework.
- Soporte para REST: sin duda la mejor funcionalidad significativa en esta versión. Extiende Spring @MVC para soportar aplicaciones RESTful. En el caso de tener una URL con patrón http://www.example.com/owners/{ownerId}, podremos definir:
@RequestMapping("/owners/{ownerId}", method=RequestMethod.GET) public String findOwner(@PathVariable String ownerId, Model model) { Owner owner = ownerService.findOwner(ownerId); model.addAttribute("owner", owner); return "displayOwner"; } - Más anotaciones para Spring @MVC: Se han añadido @CookieValue y @RequestHeaders a la lista.
- Abstracción para TaskScheduler: Spring provee ahora una facade scheduling API. En la próxima RC van a incorporar un namespace para scheduling.
- Y cosas pendientes: Hibernate Validator, JEE 6 (JSF 2, JPA2…).
En los próximos días estaré enredando un poco con las nuevas funcionalidades…
Filed under: spring | Leave a Comment
Después de anunciar el partnership con SpringSource, la semana pasada impartí el primer curso en España (Madrid) junto a David Gómez (compañero de Extrema) y Ben Corrie (consultor de SpringSource).

El curso se llenó con 15 personas (normalmente van a ser un máximo de 12 personas) procedentes de diferentes partes: Madrid, Valencia, Tenerife, San Sebastián, Asturias y Huesca. Next stop Barcelona!
También aproveche para quedar con Abraham y poder charlar un breve rato sobre diferentes temas de javaHispano, siempre un placer coincidir cuando los integrantes estamos tan repartidos geográficamente.
Filed under: formación, spring | Leave a Comment
Recientemente SpringSource ha sacado lo que ha llamado Spring University, dando acceso a tres certificaciones (solo una disponible por el momento). Hoy me he decidido a realizar la certificación SpringSource Certified Spring Professional, obteniéndola con un 88%.
La verdad es que me esperaba un examen un poco más fácil y más balanceado. Me explico: el examen consiste en 50 preguntas multirespuesta (creo que solo han salido 3 multirespuesta, las otras eran de respuesta simple pero con las opciones típicas: Todas las anteriores, Ninguna de las anteriores, La a y la b son correctas…) a contestar en un tiempo de 90 minutos; el problema es que el peso de cada tema, no se corresponde porcentualmente con las preguntas. Mi impresión es que en el examen los dos temas más fuertes han sido JMS y JMX (también podría destacar 3 preguntas de remoting referentes a Hessian / Burlap), con lo que no creo que haga justicia a evaluar lo que realmente tiene más importancia. Esta es una cuestión que están intentando arreglar; por lo que se ve, las preguntas se seleccionan de un pool al azar, dando la posibilidad que salgan más preguntas de JMS que de el propio contenedor de beans o AOP.
Las personas certificadas disponen de un grupo en LinkedIn, donde a día de hoy hay registradas 71 personas (a escala mundial). Este bajo número me hace pensar en lo diferenciador que hace tener una de estas certificaciones teniendo en cuenta el panorama actual en que la tendencia de demanda de profesionales en Spring sigue en ascenso. El único requisito para poder realizar la certificación es asistir a un curso oficial de SpringSource o bien ser considerado un candidato “grandfathered”. En España se van a empezar a impartir cursos en breve (Madrid, Barcelona), así que os animo a ser uno de los primeros en obtener la certificación en nuestro territorio
Filed under: spring | 4 Comments
Entradas Recientes
- Hands-on Spring 3: The next generation (SOCF)
- Grails y novedades en el grupo de usuarios de Spring en UK
- Claves del éxito en el proceso emprendedor
- Probando Spring Roo: Primera parte
- Libro de Spring Web Flow 2
- Un pasito adelante hacia Spring 3.0
- Primer curso Core Spring realizado
- SpringSource Certified Spring Professional
Categorías
- emprendedores (2)
- formación (1)
- grails (1)
- spring (3)
- Uncategorized (3)
