Friday, October 10, 2008

Integración Spring-Ajax

Estuve buscando en La Red cual sería la mejor manera de integrar Spring con Ajax. Al parecer el framework por defecto es DWR, sin embargo no quedé convencido del todo, necesito más flexibilidad y conociendo las ventajas que ofrece Json (aqui, aqui), busqué alternativas con esa idea en mente.

Encontré dos opciones, el proyecto Spring Json View, que como su nombre lo dice, es una implementación de una vista para Spring MVC. Nada mal, lo que buscaba, el único detalle fué que al integrarlo como depedencia de Maven a mi proyecto, incluyó también (como sus dependencias) versiones de Spring y Cglib anteriores a las que estoy usando. Seguro ese detalle puede arreglarse, pero como el tiempo simpre apremia, traté de ir mejor a la otra opción.

Vino el turno de json-lib-ext-spring, que es una extensión del proyecto json-lib desarrollado por Andrés Almiray. Al igual que Spring Json View, este proyecto ofrece la implementación de una vista para Spring MVC. El lado flaco de este proyecto vino con la escasa documenteción que tiene. Sin embargo después de haber publicado algunas dudas en el foro del proyecto, la integración resultó más o menos tersa, dado los problemas que hubo con Hibernate. Sin embargo, luego de ver este post en el blog de Andrés, los problemas se solucionaron.

Creo que json-lib-ext-spring resuelve el problema de integración de manera excelente. Y como del lado del cliente pienso usar Yahoo! User Interface Library (YUI), todo está resuelto. Como decía la abuela, es cosa de coser y cantar :)

Wednesday, September 3, 2008

Configurando mi ambiente de desarrollo (Take II)

En este post comentaba cómo me gustaría que estuviera armado mi ambiente de desarrollo para trabajar en Java. Todo eso ahora está corriendo bastante bien, sin embargo falta agregar una pieza. Un buen equipo de desarrollo debe incluir además una herramienta que se encargue de las tareas de Integración Continua (Continuos Integration).

Tenía la intención de evaluar Cruise Control, Continumm y Hudson. Empecé por Hudson y creo que me voy a quedar ahi. Me llevó casi un par de días tenerla configurada y funcionando.

La integración con Subversion y Maven es realmente buena, Hudson toma los fuentes del repositorio SVN y ejecuta el goal de Maven que se le establezca. Todavía hay algunos aspectos que tengo pendientes, por ejemplo la configuración del correo electrónico, de modo que se envíen alertas por correo cuando el build no haya sido exitoso.

Como primer intento para tener Continuos Integration en el proyecto creo que Hudson es una muy buena opción. Si luego hay tiempo trataré de configurar Continnum de Apache.

Friday, July 11, 2008

Mi ambiente de desarrollo J2EE basado en Eclipse

Estoy armando el ambiente de desarrollo que usaré para un proyecto personal, aunque trataré de usarlo también en mi trabajo. Tengo alguna afinidad hacia Eclipse, fué el primer IDE que usé y sigue siendo mi favorito.

Hace poco descubrí algunos plugins para Eclipse que facilitan el desarrollo y tengo la intención de usarlos en mis proyectos. Además pretendo usar un conjunto de productos ó herramientas que permitan que el trabajo colaborativo sea más natural y sencillo.

Después de haber explorado en Internet tratando de encontrar lo que me gustaría tener en mi ambiente de desarrollo, seleccioné lo siguiente:

Herramientas:

Maven

Maven es muchas cosas, facilita tareas de compilación, distribución, documentación, pruebas, administra las dependencias del proyecto, genera una estructura de proyecto, etc. Su principio base es "Convention over configuration", y se refiere a que ofrece estrategias por default para tareas comunes, aquellas que se presentan en todo proyecto.

Assembla

Ofrece espacios de trabajo que incluyen, SVN, Trac, chat, foros de discusión, Wiki y más. Todo gratis si el proyecto no excede 500 MB, sin importar el tamaño del equipo.

Track

Herramienta de administración de proyectos, cambios y defectos. Se integra con eclipse a través de Mylyn.


Plugins para Eclipse:

Mylyn

Es un plugin muy interesante que tiene dos principales características. Por un lado le permite al programador visualizar las tareas que deberá atacar en la semana actual (puede integrarse con varios repositorios de tareas, incluyendo Trac). Y por otro, al estar el programador trabajando en alguna tarea particular, Mylyn crea un workspace que tiene sólo los recursos que permiten atacar tal tarea.

Esto hace que el programador sea mas productivo, puesto que solo ve las tareas de la semana que esta corriendo y al seleccionar alguna de ellas, el IDE muestra los recursos que tienen que ver con esa tarea, en lugar de tener que navegar en toda la estructura del proyecto

Spring IDE

Para proyectos Spring, Spring IDE facilita mucho el el trabajo, sobre todo con los archivos de configuración.

Hibernate Tools for Eclipse

Un plugin muy útil si se trabaja con Hibernate. Es posible generar los archivos xml (mappings) usando ingeniería en reversa. Trae un editor HQL (Hibernate Query Language) que permite probar las consultas antes de integrarlas al código del proyecto, entre otras cosas.

Subclipse y Maven Integration for Eclipse

Plugins para integrar Subversion y Maven con Eclipse


Aquí esta pues lo que pretendo usar. Estaré contando como me voy sintiendo con todo esto. Tal vez en el camino integre algo más, o tal vez quite algo de lo que está en la lista. Veremos.

Monday, June 23, 2008

Empezando a practicar con Spring

Hace un año y medio empezaba a leer acerca de Spring, desde entonces estoy convencido de que es un framework que debo usar en mis proyectos ya que facilita en gran medida el desarrollo de aplicaciones.

Inyección de dependencias (DI ó Dependency Injection) y AOP (Aspect Object Programming) son su core. Este par de conceptos llevados a la práctica permite tener aplicaciones con bajo acoplamiento.

Con DI es posible tener código (clases) totalmente agonósticas de sus dependencias, de modo que tales dependencias les son dadas por el contenedor ligero de Spring, de acuerdo a la configuración hecha a través de un archivo XML (típicamente). Con esto, con solo cambiar la configuración en dicho archivo es posible inyectar dependencias diferentes.

Con AOP se obtiene también desacoplamiento, pero diferente a DI. AOP permite agregar funcionalidad a nuestro código en tiempo de ejecución. Es posible, por ejemplo, establecer el conjunto de métodos que podrán demarcar una transacción sin que la clase contenedora de tales métodos se entere de que tendrá esa funcionalidad. Este "aumento" en la funcionalidad para una clase dada es conocido como aspecto. Así, otras responsabilidades pueden ser manejadas como aspectos, típicamente aquellas que se presentan en más de una capa de la aplicación, conocidas como crosscutting concerns.

Con Spring tendremos aplicaciones que serán mucho mas fáciles de probar y mantener.

Tal está siendo el éxito de Spring que ya se puede considerar como la plataforma tecnolólogica de facto en el desarrollo empresarial con Java.

Desarrollando ágil

Durante el tiempo que he trabajado en Softtek, he estado involucrado en proyectos donde se han usado diferentes procesos de desarrollo de software. Tales procesos han ido desde el clásico y tradicional Cascada, Cascada "rupizado", RUP y un proceso de Softtek llamado PDSS (Process Development Software Softtek) que recoge el aprendizaje en el desarrollo de software que Softtek ha tenido durante los más de 25 años que la organización lleva de vida.

He participado en dos proyectos donde se usó el PDSS. No hay duda que el camino puede ser más sencillo (y divertido). Es tiempo ya de empezar a explorar las metodologías ágiles.

Organizaciones como Softtek deben de voltear a ver a los procesos ágiles. El mercado es muy competido y aquellas organizaciones que sean capaces de desarrollar sus productos de manera expedita y con calidad, tendrán mayores posibilidades de crecer más y más rápido.

Por tanto, mi interés ahora es empezar una jornada que de entrada creo será muy interesante, excitante y de mucho aprendizaje. El primer paso lo pienso dar de la mano de Tom y Mary Poppendieck, acabo de ordenar su libro: Implementing Lean Software Development: From Concept to Cash. Ahora que voy a mudarme al centro de desarrollo de Aguascalientes seguramente habrá oportunidad de llevar a la práctica algo de lo que para entonces ya haya leído. Seguiré contando...