Está en la página 1de 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 211 ISC Noviembre 211
!aulo Clavi"o Esteban !aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com clavi"o#pau$in%enieriadesoft&are'com
Introduccin a Spring Roo
Introduccin a Spring Roo
2
Agenda
Introducci(n a Sprin% )oo
*b"etivo !rincipal
+,u- es Sprin% )oo.
Sprin% )oo CLI
/enerando una aplicaci(n de e"emplo'
0ecnolo%1as 2 Ar3uitectura
N4cleo 2 Add5ons'
Demo Aplicaci(n )eserva Libros
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
6
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 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
7
Qu es Spring Roo
8en Ale9:

Roo es un pequeo genio que
observa desde un segundo plano y
gestiona todo aquello de lo que no
me quiero preocupar
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
;
Qu es Spring Roo
Sprin% )oo es una <erramienta de desarrollo
r=pido de aplicaciones o )AD> 3ue permite el
desarrollo de aplicaciones Java EE de forma mu2
productiva 2 c(moda para el desarrollador'
Las aplicaciones resultantes utili?an tecnolo%1as
Java conocidas como Sprin% @rame&orA> Java
!ersistence A!I> Java Server !a%es> Apac<e
Baven> AspectJ> etc'
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
C
!aracter"sticas principales #$%&'
/eneraci(n de c(di%o Dactiva 2 pasivaE para
aplicaciones Java con Sprin%'
Elimina el traba"o tedioso centrando el desarrollo
en la l(%ica de ne%ocio'
!aradi%ma CoC DConvenci(n sobre confi%uraci(nE'
Enfo3ue DDD DDomain5Driven DevelopmentE'
Diri%ido por el modelo de entidades'
L(%ica en las entidades D)eal *b"ect *rientedE> elimina capas
redundantes'
)ic< Domain Bodel D)DBE en oposici(n al anti5patr(n
Anemic Domain Bodel DADBE'
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
F
Ar(uitectura )))
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
G
!aracter"sticas principales #*%&'
Crea un pro2ecto en se%undos'
)ealimentaci(n: aHade valor durante todo el ciclo de vida'
Las aplicaciones si%uen las me"ores pr=cticas de diseHo'
!ermite auto5%enerar test unitarios 2 de inte%raci(n'
No incorpora elementos adicionales al entorno de
e"ecuci(n> por lo 3ue no penali?a la velocidad la
aplicaci(n'
No re3uiere nin%4n IDE'
)ecibe instrucciones a trav-s de una consola interactiva
con auto5completado 2 a2uda en l1nea'
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
I
!aracter"sticas principales #&%&'
E9tensible usando bundles *S/i'
Aprovec<a el conocimiento: no necesita m=s conocimiento 3ue el
necesario para el desarrollo de aplicaciones J2EE'
!odemos eliminar )oo de un pro2ecto en minutos'
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
1
Spring Roo !+I
Sprin% )oo es una <erramienta de Linea de Comandos DCLIE'
De f=cil uso> proporciona auto5completado J0A8K de comandos
2 ar%umentos> 2 a2uda en linea mediante el comando elp 2
int'
Se puede inte%rar con IDEs como S0S o Eclipse
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
11
,enerando una aplicacin 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 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
12
,enerando una aplicacin
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
16
-tili.ando /clipse I)/
Si se utili?a Eclipse IDE 2 no Sprin%Source 0ool
Suite DS0SE'
Instalar plu%in m2eclipse DIndi%o lo trae de serieE'
Instalar plu%in AJD0 DAspectJ Development 0oolsE
Activar JD0 Leavin%:
Lindo& M !references M JD0 Leavin%
Confi%urar refresco autom=tico:
!references " #eneral " $or%space " Refres using native
oo%s or polling
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
17
!digo 0ava generado
)oo %enera c(di%o 3ue podemos dividir en dos cate%or1as:
C(di%o %estionado por Sprin% )oo'
@ic<eros AspectJ I0D De9tensi(n 'a"E
C(di%o %estionado por el pro%ramador'
@uentes Java
En tiempo de compilaci(n> el c(di%o en los fic<eros 'a"> es te"ido
D&eavedE en el c(di%o de los fuentes Java'
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
1;
In1raestructura Roo
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
1C
)emo * 2 Aplicacin Reserva de +ibros #$%3'
)e3uerimientos
La aplicaci(n debe permitir administrar las entidades Libro>
0ipoLibro> Autor 2 )eserva' As1 como la b4s3ueda de Libro por
IS8N o titulo'
Se%uridad
Las p=%inas de %esti(n de Libro> 0ipoLibro 2 Autor son accesible a
usuarios del rol )*LE#ADBIN
La p=%ina de %esti(n de )eserva es accesible para usuarios del rol
)*LE#NSE)
!ruebas
0est de inte%raci(n de las entidades
0est autom=ticos de la capa Leb con Selenium
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
1F
)emo * 2 Aplicacin Reserva de +ibros #*%3'
Bodelo de Dominio
)elaci(n *ne5to5one entre las entidades Libro 2 0ipoLibro
)elaci(n Ban25to5one entre las entidades )eserva 2 Libro
)elaci(n Ban25to5Ban2 entre las entidades Libro 2 Autor
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
1G
)emo * 2 Aplicacin Reserva de +ibros #&%3'
roo> project --topLevelPackage com.curso.reserva
roo> jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
// Definicin 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 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
1I
)emo * 2 Aplicacin Reserva de +ibros #4%3'
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 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
2
)emo * 2 Aplicacin Reserva de +ibros #5%3'
//Relacin Uno a uno
roo> field reference --fieldName tipo --type ~.domain.TipoLibro
--notNull --class ~.domain.Libro
//Relacin 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
//Relacin 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 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
21
)emo * 2 Aplicacin Reserva de +ibros #6%3'
// Scaffolding automtico 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 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
22
)emo * 2 Aplicacin Reserva de +ibros #7%3'
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
26
)emo * 2 Aplicacin Reserva de +ibros #8%3'
AHadiendo se%uridad
El comando Osecurit2 setupO aHade Sprin% Securit2 a la
aplicaci(n'
!ara ello:
Crea el fic<ero applicationConte9t5securit2'9ml con la confi%uraci(n de
Sprin% Securit2'
Crea la vista lo%in'"sp9 para la p=%ina de lo%in'
Actuali?a el fic<ero &eb'9ml para utili?ar el filtro Sprin% Securit2 para
controlar el acceso a los recursos securi?ados'
Actuali?a pom'9ml para aHadir las dependencias de Sprin% Securit2'
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
27
)emo * 2 Aplicacin Reserva de +ibros #3%3'
AHadiendo se%uridad
applicationConte9t5securit2'9ml
<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 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
2;
Novedades Spring Roo $9*
Sprin% )oo <a tomado un enfo3ue pr=ctico para reducir la
comple"idad> a menudo innecesaria> de las capa de servicio>
repositorio o DA*'
La nueva versi(n de Sprin% )oo
1'2''B1 inclu2e ma2or soporte
para capas de ar3uitectura'
!udiendo confi%urarlas a medida
a las necesidades de la aplicaci(n'
1'2'')C1 soportara pro2ectos
Baven multi modulo'
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
2C
Ar(uitectura Roo
Construido sobre el contenedor *S/i Apac<e @eli9'
Sprin% )oo se compone de JCore BodulesK 2 J8ase
Add5*nsK
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
2F
Add:Ons
!odemos crear add5ons propios con el add5on OAdd:on
!reatorO
!ermite crear add5ons simples o avan?ados
El add5on simple es para crear confi%uraciones> modificar
fic<eros> o para copiar artefactos'
El add5on avan?ado es cuando se 3uiere %enerar c(di%o
Java 2 AspectJ I0Ds
0raba"a con las utilit2 classes 2 servicios proporcionados por
Sprin% )oo
Los desarrolladores pueden instalar add5ons disponibles en
)oo8ot u otros repositorios'
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
2G
Alternativas a Roo
/rails
Apac<e Isis
App@use
*penPava
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com
2I
)ocumentacin
)eferencia
Sprin% )** Documentaci(n de referencia
Sprin% )** 5 @oro
%vNIP 5 Documentaci(n de referencia
Libros
ISC 5 211
!aulo Clavi"o Esteban
clavi"o#pau$in%enieriadesoft&are'com

También podría gustarte