1
Your NameYour Name
Line 1 of Your AffiliationLine 1 of Your AffiliationLine 2 of Your AffiliationLine 2 of Your Affiliation
Desarrollo Java EE altamente productivoDesarrollo Java EE altamente productivo
ISC – Noviembre 2011ISC – Noviembre 2011Paulo Clavijo EstebanPaulo Clavijo [email protected][email protected]
Introducción a Spring RooIntroducción a Spring Roo
2
Agenda
Introducción a Spring RooObjetivo Principal¿Qué es Spring Roo?Spring Roo CLIGenerando una aplicación de ejemplo.Tecnologías y ArquitecturaNúcleo y Add-ons.
Demo – Aplicación Reserva Libros
ISC - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 JavaEn tiempo de compilación, el código en los ficheros .aj, es tejido (weaved) en el código de los fuentes Java.
ISC - 2011Paulo Clavijo Esteban
16
Demo 2 – Aplicación Reserva de Libros (1/9)
RequerimientosLa 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_ADMINLa página de gestión de Reserva es accesible para usuarios del rol ROLE_USER
PruebasTest de integración de las entidadesTest automáticos de la capa Web con Selenium
ISC - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
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 - 2011Paulo Clavijo Esteban
23
Demo 2 – Aplicación Reserva de Libros (8/9)
Añadiendo seguridadEl 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 - 2011Paulo Clavijo Esteban
24
Demo 2 – Aplicación Reserva de Libros (9/9)
Añadiendo seguridadapplicationContext-security.xml
<intercepturl pattern="/autors/**" access="hasRole('ROLE_ADMIN')"/>
<intercepturl pattern="/libroes/**" access="hasRole('ROLE_ADMIN')"/>
<intercepturl pattern="/tipolibroes/**" access="hasRole('ROLE_ADMIN')"/>
<intercepturl pattern="/reservas/**" access="hasRole('ROLE_USER')"/>
<intercepturl pattern="/**" access="permitAll" />
ISC - 2011Paulo Clavijo Esteban
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 Roo1.2.0.M1 incluye mayor soportepara capas de arquitectura. Pudiendo configurarlas a medida a las necesidades de la aplicación.1.2.0.RC1 soportara proyectosMaven multi modulo.
ISC - 2011Paulo Clavijo Esteban
26
Arquitectura Roo
Construido sobre el contenedor OSGi Apache Felix.Spring Roo se compone de “Core Modules” y “Base Add-Ons”
ISC - 2011Paulo Clavijo Esteban
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 RooLos desarrolladores pueden instalar add-ons disponibles en RooBot u otros repositorios.
ISC - 2011Paulo Clavijo Esteban
28
Alternativas a Roo?
GrailsApache IsisAppFuseOpenXava
ISC - 2011Paulo Clavijo Esteban
29
Documentación
ReferenciaSpring ROO – Documentación de referenciaSpring ROO - ForogvNIX - Documentación de referencia
Libros
ISC - 2011Paulo Clavijo Esteban