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
Demo de Introducción Introducción Demos Desarrollo de Add-ons Demos Proyecto SpringHispano Add-ons
 
ES  Herramienta RAD para Java (basada en texto) ES  extensible ES  para su uso es en tiempo de desarrollo ES  un generador de código NO ES  un plugin de algún IDE NO ES  un software de administración de proyectos NO ES  una herramienta para construir proyectos
AspectJ Framework para programar orientado a aspectos (AOP). Spring Roo usa los Inter-Type Declaration (ITD) Genera *_Roo_*.aj Spring Otros frameworks como: Spring Security y Spring Web Flow. Aspectos de Spring: @Configurable y manejo de transacciones Escaneo de componentes marcados con anotaciones Spring.
Alta productividad Fácil de aprender y usar TAB, hint y help Herramientas estándar Java JPA, Maven, JSP, Junit, Spring, … Sin compromisos Fácil de remover
 
Generador Pasivo Reacciona a instrucciones del usuario Generador Activo Reacciona a cambios en el código Es un generador de código hibrido PASIVO = Shell y comandos Hace el cambio y nada mas (.xml y .java) ACTIVO =Se activa sobre los .java marcados con @Roo* Monitorea los cambios en el .java y actualiza .aj, .jsp
 
Típica Aplicación Web basada en Spring MVC Base de datos Persistencia vía JPA Pruebas unitarias con JUnit Maven para construir el proyecto Spring para la inyección de dependencias. Google Web Toolkit, desde 1.1.0.M1 Add-on de Flex, desde la 1.1.0.M2 (se instala aparte) Capas: Entidad (dominio) Web Servicios y DAO (no se generan pero se pueden incluir)
 
 
Todos los comandos de Spring Roo son add-ons. Son los add-ons Base. Comando para crear un proyecto tipo "add-on": project --topLevelPackage zzz.xxx.yyyy --template ROO_ADDON_SIMPLE   Desde la 1.1.0.M2 add-ons para crear add-ons: addon create advanced addon create simple
 
 
 
El método que atiende la ejecución del comando puede: Tirar cualquier tipo de Exception para cancelar la ejecución del comando y revertir (rollback) los cambios.   Usar el Logging del JDK o regresar objetos que se imprimiran en la consola.
 
Roo tiene los siguientes servicios (entre otros) a nuestra disposicion: org.sf.roo.process.manager.FileManager crear directorios/archivos, consultar los detalles de archivos, leer InputStreams. org.sf.roo.project.PathResolver información sobre los paths, resolver paths org.sf.roo.project.ProjectOperations   acciones sobre el pom.xml org.sf.roo.metadata.MetadataService org.sf.roo.classpath.operations.ClasspathOperations
Comandos importantes: Instalar un addon: felix shell start file://<ruta> Ver los add-ons instalados: osgi ps desinstalr un addon: osgi uninstall --bundleSymbolicName zzz.xxx.yyy actualizar un addon: osgi update --bundleSymbolicName zzz.xxx.yyy 
 
Refactor->Push-in con Eclipse Buscar y reemplazar las anotaciones e imports en los Java Expresion regular = “\n.*Roo.*\n” Reemplazar con “\n” Quitar las dependencias en el pom.xml
 
Con la comunidad y para la comunidad desarrollar add-ons de Spring Roo que nos ayuden a realizar nuestra labor diaria en la escuela y/o trabajo de manera mas rápida y sencilla
Test Data Builder Addon. Auditable Fields Addon. Copy Fields Addon. SDL/Swing Addon. Jersey Addon.
Pagina: http://www.springsource.org/roo Foros:   http://forum.springsource.org/forumdisplay.php?f=67 Twitter: @SpringRoo, @benalexu, @schmidtstefan Jira: http://jira.springframework.org/browse/ROO  Repositorio Git:  git clone git://git.springsource.org/roo/roo.git Libro (próximamente): Roo in Action de Manning, @RooInAction Mi Blog: http://abaddon-gtz.blogspot.com (Etiqueta 'Spring Roo')  SpringHispano Addons:  http://code.google.com/p/springhispano-addons/
 

Dando saltos con Spring Roo

  • 1.
    SPRING ROO: MEJORATU 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.
    Demo de IntroducciónIntroducción Demos Desarrollo de Add-ons Demos Proyecto SpringHispano Add-ons
  • 3.
  • 4.
    ES HerramientaRAD para Java (basada en texto) ES extensible ES para su uso es en tiempo de desarrollo ES un generador de código NO ES un plugin de algún IDE NO ES un software de administración de proyectos NO ES una herramienta para construir proyectos
  • 5.
    AspectJ Framework paraprogramar orientado a aspectos (AOP). Spring Roo usa los Inter-Type Declaration (ITD) Genera *_Roo_*.aj Spring Otros frameworks como: Spring Security y Spring Web Flow. Aspectos de Spring: @Configurable y manejo de transacciones Escaneo de componentes marcados con anotaciones Spring.
  • 6.
    Alta productividad Fácilde aprender y usar TAB, hint y help Herramientas estándar Java JPA, Maven, JSP, Junit, Spring, … Sin compromisos Fácil de remover
  • 7.
  • 8.
    Generador Pasivo Reaccionaa instrucciones del usuario Generador Activo Reacciona a cambios en el código Es un generador de código hibrido PASIVO = Shell y comandos Hace el cambio y nada mas (.xml y .java) ACTIVO =Se activa sobre los .java marcados con @Roo* Monitorea los cambios en el .java y actualiza .aj, .jsp
  • 9.
  • 10.
    Típica Aplicación Web basadaen Spring MVC Base de datos Persistencia vía JPA Pruebas unitarias con JUnit Maven para construir el proyecto Spring para la inyección de dependencias. Google Web Toolkit, desde 1.1.0.M1 Add-on de Flex, desde la 1.1.0.M2 (se instala aparte) Capas: Entidad (dominio) Web Servicios y DAO (no se generan pero se pueden incluir)
  • 11.
  • 12.
  • 13.
    Todos los comandosde Spring Roo son add-ons. Son los add-ons Base. Comando para crear un proyecto tipo &quot;add-on&quot;: project --topLevelPackage zzz.xxx.yyyy --template ROO_ADDON_SIMPLE   Desde la 1.1.0.M2 add-ons para crear add-ons: addon create advanced addon create simple
  • 14.
  • 15.
  • 16.
  • 17.
    El método que atiende la ejecución delcomando puede: Tirar cualquier tipo de Exception para cancelar la ejecución del comando y revertir (rollback) los cambios.   Usar el Logging del JDK o regresar objetos que se imprimiran en la consola.
  • 18.
  • 19.
    Roo tiene lossiguientes servicios (entre otros) a nuestra disposicion: org.sf.roo.process.manager.FileManager crear directorios/archivos, consultar los detalles de archivos, leer InputStreams. org.sf.roo.project.PathResolver información sobre los paths, resolver paths org.sf.roo.project.ProjectOperations   acciones sobre el pom.xml org.sf.roo.metadata.MetadataService org.sf.roo.classpath.operations.ClasspathOperations
  • 20.
    Comandos importantes: Instalarun addon: felix shell start file://<ruta> Ver los add-ons instalados: osgi ps desinstalr un addon: osgi uninstall --bundleSymbolicName zzz.xxx.yyy actualizar un addon: osgi update --bundleSymbolicName zzz.xxx.yyy 
  • 21.
  • 22.
    Refactor->Push-in con EclipseBuscar y reemplazar las anotaciones e imports en los Java Expresion regular = “\n.*Roo.*\n” Reemplazar con “\n” Quitar las dependencias en el pom.xml
  • 23.
  • 24.
    Con la comunidady para la comunidad desarrollar add-ons de Spring Roo que nos ayuden a realizar nuestra labor diaria en la escuela y/o trabajo de manera mas rápida y sencilla
  • 25.
    Test Data BuilderAddon. Auditable Fields Addon. Copy Fields Addon. SDL/Swing Addon. Jersey Addon.
  • 26.
    Pagina: http://www.springsource.org/roo Foros:  http://forum.springsource.org/forumdisplay.php?f=67 Twitter: @SpringRoo, @benalexu, @schmidtstefan Jira: http://jira.springframework.org/browse/ROO  Repositorio Git: git clone git://git.springsource.org/roo/roo.git Libro (próximamente): Roo in Action de Manning, @RooInAction Mi Blog: http://abaddon-gtz.blogspot.com (Etiqueta 'Spring Roo')  SpringHispano Addons: http://code.google.com/p/springhispano-addons/
  • 27.

Notas del editor

  • #3 Llevaremos la siguiente agenda:   Introduccion Mision Descripcion de usuario
  • #5 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.
  • #6 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.
  • #8 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?
  • #11 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.
  • #20 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.