1. SPRING ROO: MEJORA TU PRODUCTIVIDAD DANDO SALTOS CON EL CANGURO Rafael Antonio Gutiérrez Turullols @abaddon_gtz [email_address] http://abaddon-gtz.blogspot.com Septiembre 4, 2010, México, D.F
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Notas del editor
Llevaremos la siguiente agenda: Introduccion Mision Descripcion de usuario
Es una herramienta RAD para Java basada en texto via un shell. RAD es el acrónimo para Rapid Application Development, y es un tipo de metodología de desarrollo que usa un mínimo de planeación y diseño del software para favorecer un rápido desarrollo del mismo construyendo prototipos. Es extesible, tiene una arquitectura basada en add-ons con los cuales podemos extender la funcionalidad. Mas adelante veremos un pequeño demo de como trabajan los addons. Su uso es en tiempo de desarrollo no en tiempo de ejecucion por lo mismo no agrega carga en runtime a nuestra aplicacion. No agrega JARs extra en el classpath de la aplicacion ni en el empaquetado. Usa anotaciones, pero estas no son compiladas a los archivos .class Es un generador de codigo que aprovecha las mejores caracteristicas de los generadores de codigo activos y pasivos.
AspectJ es un poderoso y muy maduro framework para programar orientado a Aspectos (AOP). Spring desde hace algunos años tiene gran soporte para AspectJ. Spring tiene proyectos que en cierta medida ofrecen soporte a AspectJ o dependen de AspectJ para funcionar. Ejemplos: Spring Security, Spring Insight, SpringSource tc Server, SpringSource dm Server, Spring Enterprise y Spring Roo. Roo usa las Inter-Type Declaration (ITD) de AspectJ. Las ITD de AspectJ permiten alterar la estructura estática de clases, interfaces, y aspectos en el sistema. De esta forma, las ITD permiten a Roo generar código de una clase (como métodos, atributos, etc.) en una archivo de código distinto al .java con el cual estamos trabajando. Asi, Roo administra el contenido y ciclo de vida de estos archivos de manera independiente a los .java con los que trabajamos. Estos ITD generados por Roo son los *_Roo_*.aj. Uno no debe editar estos archivos ya que son administrados por Roo. Todas las aplicaciones en Roo, obviamente, usan Spring. Pueden llegar librerías como: Spring Security, Spring Web Flow, entre otras. Toda la inyección de dependencias es vía Spring. Usan aspectos de Spring (con AspectJ) para asegurar la inyección de dependencias de aquellos componentes marcados con @Configurable y ademas el manejo de las transacciones. Usan escaneo de componentes basados en las anotaciones de Spring para la debida creacion e injeccion de dependencias.
Esta es una vision general de como esta implementado Spring Roo. La parte de abajo es nuestro proyecto el cual consiste de archivos .java, .jsp, .properties, xml de configuracion, etc. En la parte de arriba podemos ver la infraestructura de Roo. Que como se puede observar mucho de esa infraestructura esta constituida por los Add-ons. Esta parte realiza la tarea de monitorear los cambios en el proyecto o cambiar archivos del mismo. Roo se puede usar a traves de una consola (shell) o el Spring Tool Suite. El Spring Tool Suite es el IDE que ha desarrollado Spring Source. Hay anotaciones que nos da Roo para usar en el proyecto. Todas las anotaciones empiezan en su nombre con @Roo. Estas anotaciones no se quedan en nuestro componente .class, lo que no agrega carga en runtime a nuestro proyecto (por eso la retencion de solo codigo). ¿QUE TIPOS DE RETENCION HAY?
Roo se enfoca en crear aplicaciones empresariales creadas en Java. Estas aplicaciones, actualmente en esta versión de Roo, tienen generalmente una base de datos, persistencia vía JPA, pruebas unitarias con JUnit, el proyecto se construye con Maven, y, obviamente, Spring para la inyección de dependencias. En la parte web se tiene Spring MVC y Google Web Toolkit. Pero no todas las aplicaciones tiene que ser Web. Roo no te impone restricciones para crear otro tipo de aplicaciones. Roo podría ayudarnos a generar la persistencia y nosotros extender la aplicación para hacer otro tipo de cosas. También podríamos crear addons a la medida para generar otro tipo de componentes. Es muy común ver capas de DAO, servicios, dominio, controllers en la mayoría de las aplicaciones empresariales java. Roo no genera capas innecesariamente. En una aplicación típica de Roo, se tiene una capa de entidades (o de dominio) y una capa Web. Una capa de servicios se agrega solo si la aplicacion lo requiere y en lo que respecta a la capa de DAO es muy raro que se agrege una.
FileManager = permite a los add-ons modificar archivos PathResolver = pertime a los addons resolver paths hacia recursos del proyecto ProjectOperations = permite a los add-ons realizar operaciones sobre el pom.xml como: agregar o quitar dependencias, propiedaes, plugins, repositorios, etc. StaticFieldConverter = agrega o remueve clases que proveen campos estaticos.