29
1 Your Name Your Name Line 1 of Your Affiliation Line 1 of Your Affiliation Line 2 of Your Affiliation Line 2 of Your Affiliation Desarrollo Java EE altamente productivo Desarrollo Java EE altamente productivo ISC – Noviembre 2011 ISC – Noviembre 2011 Paulo Clavijo Esteban Paulo Clavijo Esteban [email protected] [email protected] Introducción a Spring Roo Introducción a Spring Roo

Presentacion Spring ROO-Paulo Clavijo-20111110

Embed Size (px)

Citation preview

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

7

Arquitectura DDD

ISC - 2011Paulo Clavijo Esteban

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

12

Generando una aplicación

ISC - 2011Paulo Clavijo Esteban

[email protected]

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

[email protected]

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

[email protected]

15

Infraestructura Roo

ISC - 2011Paulo Clavijo Esteban

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

22

Demo 2 – Aplicación Reserva de Libros (7/9)

ISC - 2011Paulo Clavijo Esteban

[email protected]

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

[email protected]

24

Demo 2 – Aplicación Reserva de Libros (9/9)

Añadiendo seguridadapplicationContext-security.xml

        <intercept­url pattern="/autors/**" access="hasRole('ROLE_ADMIN')"/>

        <intercept­url pattern="/libroes/**" access="hasRole('ROLE_ADMIN')"/>

        <intercept­url pattern="/tipolibroes/**" access="hasRole('ROLE_ADMIN')"/>

        <intercept­url pattern="/reservas/**" access="hasRole('ROLE_USER')"/>

        <intercept­url pattern="/**" access="permitAll" />

ISC - 2011Paulo Clavijo Esteban

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

28

Alternativas a Roo?

GrailsApache IsisAppFuseOpenXava

ISC - 2011Paulo Clavijo Esteban

[email protected]