Este documento introduce Spring Roo, una herramienta que mejora la productividad del desarrollo Java EE. Spring Roo permite generar rápidamente aplicaciones que siguen las mejores prácticas mediante una consola interactiva. El documento explica características como la generación de código, arquitectura, add-ons y provee un ejemplo demostrativo.
1. Introducción a Spring Roo
Desarrollo Java EE altamente productivo
Your Name
Line 1 of Your Affiliation
ISC – Noviembre 2011
Line 2 of Your Affiliation
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com
1
2. Agenda
Introducción a Spring Roo
Objetivo Principal
¿Qué es Spring Roo?
Spring Roo CLI
Generando una aplicación de ejemplo.
Tecnologías y Arquitectura
Núcleo y Add-ons.
Demo – Aplicación Reserva Libros
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 2
3. Objetivo Principal
“El objetivo principal de Spring
ROO es mejorar la productividad
de los desarrollos Java sin
comprometer la integridad y
flexibilidad del sistema”
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 3
4. ¿Qué es Spring Roo?
Ben Alex:
“Roo es un pequeño genio que
observa desde un segundo plano y
gestiona todo aquello de lo que no
me quiero preocupar”
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 4
5. ¿Qué es Spring Roo?
Spring Roo es una herramienta de desarrollo
rápido de aplicaciones o RAD, que permite el
desarrollo de aplicaciones Java EE de forma muy
productiva y cómoda para el desarrollador.
Las aplicaciones resultantes utilizan tecnologías
Java conocidas como Spring Framework, Java
Persistence API, Java Server Pages, Apache
Maven, AspectJ, etc.
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 5
6. Características principales (1/3)
Generación de código (activa y pasiva) para
aplicaciones Java con Spring.
Elimina el trabajo tedioso centrando el desarrollo
en la lógica de negocio.
Paradigma CoC (Convención sobre configuración).
Enfoque DDD (Domain-Driven Development).
Dirigido por el modelo de entidades.
Lógica en las entidades (Real Object Oriented), elimina capas
redundantes.
Rich Domain Model (RDM) en oposición al anti-patrón
Anemic Domain Model (ADM).
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 6
8. Características principales (2/3)
Crea un proyecto en segundos.
Realimentación: añade valor durante todo el ciclo de vida.
Las aplicaciones siguen las mejores prácticas de diseño.
Permite auto-generar test unitarios y de integración.
No incorpora elementos adicionales al entorno de
ejecución, por lo que no penaliza la velocidad la
aplicación.
No requiere ningún IDE.
Recibe instrucciones a través de una consola interactiva
con auto-completado y ayuda en línea.
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 8
9. Características principales (3/3)
Extensible usando bundles OSGi.
Aprovecha el conocimiento: no necesita más conocimiento que el
necesario para el desarrollo de aplicaciones J2EE.
Podemos eliminar Roo de un proyecto en minutos.
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 9
10. Spring Roo CLI
Spring Roo es una herramienta de Linea de Comandos (CLI).
De fácil uso, proporciona auto-completado “TAB” de comandos
y argumentos, y ayuda en linea mediante el comando help y
hint.
Se puede integrar con IDEs como STS o Eclipse
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 10
11. Generando una aplicación en minutos
Demo 1 – Aplicación Inventario
roo> project topLevelPackage com.curso.inventario
roo> jpa setup provider HIBERNATE database HYPERSONIC_IN_MEMORY
roo> entity class ~.domain.Producto testAutomatically
roo> field number fieldName idProducto type int notNull
roo> field string fieldName nombre notNull
roo> field string fieldName descripcion
roo> field number fieldName precio type double
roo> web mvc setup
roo> web mvc all package ~.web
roo> perform tests
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 11
12. Generando una aplicación
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 12
13. Utilizando Eclipse IDE
Si se utiliza Eclipse IDE y no SpringSource Tool
Suite (STS).
Instalar plugin m2eclipse (Indigo lo trae de serie).
Instalar plugin AJDT (AspectJ Development Tools)
Activar JDT Weaving:
Window > Preferences > JDT Weaving
Configurar refresco automático:
Preferences > General > Workspace > Refresh using native
hooks or polling
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 13
14. Código Java generado
Roo genera código que podemos dividir en dos categorías:
Código gestionado por Spring Roo.
Ficheros AspectJ ITD (extensión .aj)
Código gestionado por el programador.
Fuentes Java
En tiempo de compilación, el código en los ficheros .aj, es tejido
(weaved) en el código de los fuentes Java.
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 14
16. Demo 2 – Aplicación Reserva de Libros (1/9)
Requerimientos
La aplicación debe permitir administrar las entidades Libro,
TipoLibro, Autor y Reserva. Así como la búsqueda de Libro por
ISBN o titulo.
Seguridad
Las páginas de gestión de Libro, TipoLibro y Autor son accesible a
usuarios del rol ROLE_ADMIN
La página de gestión de Reserva es accesible para usuarios del rol
ROLE_USER
Pruebas
Test de integración de las entidades
Test automáticos de la capa Web con Selenium
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 16
17. Demo 2 – Aplicación Reserva de Libros (2/9)
Modelo de Dominio
Relación One-to-one entre las entidades Libro y TipoLibro
Relación Many-to-one entre las entidades Reserva y Libro
Relación Many-to-Many entre las entidades Libro y Autor
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 17
18. Demo 2 – Aplicación Reserva de Libros (3/9)
roo> project topLevelPackage com.curso.reserva
roo> jpa setup provider HIBERNATE database HYPERSONIC_IN_MEMORY
// Definición de las entidades
roo> entity class ~.domain.TipoLibro testAutomatically
field string fieldName nombre notNull sizeMin 3 sizeMax 20
field string fieldName descripcion
roo> entity class ~.domain.Autor testAutomatically
field string fieldName nombre notNull
field string fieldName biografia
roo> enum type class ~.reference.FormatoLibro
enum constant name papel
enum constant name digital
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 18
19. Demo 2 – Aplicación Reserva de Libros (4/9)
roo> entity class ~.domain.Reserva testAutomatically
roo> field string fieldName nombre notNull
roo> field string fieldName email notNull
roo> entity class ~.domain.Libro testAutomatically
roo> field string fieldName isbn notNull sizeMin 10 sizeMax 13
roo> field string fieldName titulo notNull
roo> field string fieldName resumen sizeMax 250
roo> field date fieldName fechaPublicacion type java.util.Date
roo> field number fieldName numeroPaginas type int
roo> field enum fieldName formato type ~.reference.FormatoLibro
notNull
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 19
20. Demo 2 – Aplicación Reserva de Libros (5/9)
//Relación Uno a uno
roo> field reference fieldName tipo type ~.domain.TipoLibro
notNull class ~.domain.Libro
//Relación Uno a muchos
roo> field reference fieldName libro type ~.domain.Libro class
~.domain.Reserva
roo> field set fieldName reservas type ~.domain.Reserva mappedBy
libro notNull false cardinality ONE_TO_MANY class
~.domain.Libro
//Relación Muchos a muchos
roo> field set fieldName autores type ~.domain.Autor class
~.domain.Libro
roo> field set fieldName libros type ~.domain.Libro mappedBy
autores notNull false cardinality MANY_TO_MANY class
~.domain.Autor
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 20
21. Demo 2 – Aplicación Reserva de Libros (6/9)
// Scaffolding automático de la capa web
roo> web mvc setup
roo> web mvc all package ~.web
roo> web mvc language code es
//Buscadores
roo> finder add finderName findLibroesByIsbn class ~.domain.Libro
roo> finder add finderName findLibroesByTitulo class ~.domain.Libro
roo> web mvc finder all
// Ajuste del nivel de log
roo> logging setup level INFO
roo> perform tests
roo> perform eclipse
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 21
22. Demo 2 – Aplicación Reserva de Libros (7/9)
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 22
23. Demo 2 – Aplicación Reserva de Libros (8/9)
Añadiendo seguridad
El comando 'security setup' añade Spring Security a la
aplicación.
Para ello:
Crea el fichero applicationContext-security.xml con la configuración de
Spring Security.
Crea la vista login.jspx para la página de login.
Actualiza el fichero web.xml para utilizar el filtro Spring Security para
controlar el acceso a los recursos securizados.
Actualiza pom.xml para añadir las dependencias de Spring Security.
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 23
25. Novedades Spring Roo 1.2
Spring Roo ha tomado un enfoque práctico para reducir la
complejidad, a menudo innecesaria, de las capa de servicio,
repositorio o DAO.
La nueva versión de Spring Roo
1.2.0.M1 incluye mayor soporte
para capas de arquitectura.
Pudiendo configurarlas a medida
a las necesidades de la aplicación.
1.2.0.RC1 soportara proyectos
Maven multi modulo.
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 25
26. Arquitectura Roo
Construido sobre el contenedor OSGi Apache Felix.
Spring Roo se compone de “Core Modules” y “Base
Add-Ons”
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 26
27. Add-Ons
Podemos crear add-ons propios con el add-on 'Add-on
Creator'
Permite crear add-ons simples o avanzados
El add-on simple es para crear configuraciones, modificar
ficheros, o para copiar artefactos.
El add-on avanzado es cuando se quiere generar código
Java y AspectJ ITDs
Trabaja con las utility classes y servicios proporcionados por
Spring Roo
Los desarrolladores pueden instalar add-ons disponibles en
RooBot u otros repositorios.
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 27
28. Alternativas a Roo?
Grails
Apache Isis
AppFuse
OpenXava
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 28
29. Documentación
Referencia
Spring ROO – Documentación de referencia
Spring ROO - Foro
gvNIX - Documentación de referencia
Libros
ISC - 2011
Paulo Clavijo Esteban
clavijo_pau@ingenieriadesoftware.com 29