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