Diferencia entre revisiones de «Spring Roo»
(Spring Roo) |
(→Para que es ideal) |
||
Línea 187: | Línea 187: | ||
* Hacer backends de Administración (ABMs/CRUDs con interfaz Web) | * Hacer backends de Administración (ABMs/CRUDs con interfaz Web) | ||
+ | |||
+ | == Lo que le falta == | ||
+ | |||
+ | * La posibilidad de importar modelos de datos,ya sea desde la base de datos o bien de un archivo de configuración Hibernate. (próximamente disponible en la versión 1.1.0) |
Revisión del 14:00 28 abr 2010
Contenido
Descripción
Spring Roo es una herramienta RAD extensible. Basicamente un generador de código avanzado, que se utiliza desde la linea de comandos invocando sentencias. La idea detrás de Roo es incrementar la productividad del desarrollador Java sin comprometer la integridad estructural o la flexibilidad de la solución. No contiene un componente Runtime. Esto es muy importante, no solo pq no ata la solución al framework, sino porque no genera overhead. Se puede eliminar facilmente.
Está construido con una serie de plugins (al estilo de Maven) Fue diseñado pensando en la usabilidad. Los comandos son contextuales; tiene los comandos "hint" y "help" para consultar el uso rápidamente y la tecla TAB para autocompletar. Está basado en scripts, por lo que en caso que se cometer un error, se puede hacer rollback. Todos los comandos escritos se van guardando automáticamente (log.roo)
Generación de código
Es un generador de código hibrido, utilizando generación activa y pasiva.
Utiliza generación pasiva para generación de archivos java y xml. Utiliza generación activa para la metadata con la ayuda de los tags @Roo* e modifica gradualmente .aj y los jsp.
Sincroniza los cambios entre Roo y las modificaciones realizadas al código (roundtrip)
Librerías/Frameworks que usa
- Java
- Spring Framework
- Java Persistence API (Hibernate)
- Java Server PAges
- Spring Security
- Spring Web Flow
- Log4j
- Maven
- AspectJ
- Eclipse
- JUnit
- Selenium
Requisitos
Tener instalado Java 5 y Maven.
Configuración
Descargar la última versión de Roo del sitio oficial. Descomprimir en una carpeta en el disco local. Ej: c:\roo-1.2 Incluir la carpeta con los ejecutables dentro de la variable de entorno PATH. Ej.: c:\roo-1.2\bin
Uso
Para empezar a Roo, crear una carpeta e invocar a Roo Ej.:
mkdir helloworld cd helloworld roo
Al hacer eso se iniciará la interfaz y desplegará el siguiente mensaje:
/ __ \/ __ \/ __ \ / /_/ / / / / / / / / _, _/ /_/ / /_/ / /_/ |_|\____/\____/ 1.0.2.RELEASE [rev 638] Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER. roo>
La tecla TAB despliega las opciones:
*/ /* // ; addon date development exit help hint metadata poll project quit reference script system version roo>
La sentencia help lista todos los comandos con descripciones breves.
Ejecutar un script
Todo lo que se va ejecutando por consola, se va grabando en un archivo de log (log.roo). Es posible re-ejecutar las acciones, copiando el archivo con otro nombre y utilizando la sentencia 'script <nombre de archivo>' Ej.:
roo>script helloworld.roo
Pasos para crear una aplicación mínima
Crear un proyecto
project --topLevelPackage com.dosideas.helloroo
Elegir el framework de persistencia
Se puede elegir entre 3 frameworks y 8 bases de datos
Frameworks:
- ECLIPSELINK
- HIBERNATE
- OPENJPA
Bases de datos:
- DB2
- H2_IN_MEMORY
- HYPERSONIC_IN_MEMORY
- HYPERSONIC_PERSISTENT
- MSSQL
- MYSQL
- ORACLE
- POSTGRES
- SYBASE
Ej.:
persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
Creación del modelo de datos
Junto con la creación de la clase se puede elegir de crear los tests de componentes correspondientes.
entity --class ~.domain.Client --testAutomatically
Por cada campo a agregar a la clase es necesario definir el tipo, el nombre y las restricciones que pueda tener.
field string --fieldName name --notNull --sizeMax 24 --sizeMin 3 field string --fieldName surname --notNull --sizeMin 3 --sizeMax 24 field date --fieldName birthDate --type java.util.Date --notNull field boolean --fieldName active field number --fieldName numberOfKids --type java.lang.Integer --notNull --max 99
Expresiones regulares
Existe un bug reportado que impide el uso de expresiones regulares, si bien teoricamente son soportadas por Roo.
Interfaz gráfica
Roo permite la creación de la interfaz gráfica web, que comprende de una alta, baja, modificación y listado. Se puede especificar de que objeto de negocio se requiere o bien crearla para todos.
controller all --package ~.web
Maven
Desde Roo se pueden ejecutar varias tareas de Maven sin tener que salir del entorno. Por ejemplo:
- 'perform tests' equivale a 'mvn test'
- 'perform eclipse' equivale a 'mvn eclipse:eclipse'
Error durante la ejecución de Roo
Puede ser que a veces Roo se trabe cuando quiere abrir un archivo y emita el siguiente error: (La operación solicitada no se puede realizar en un archivo con una sección asignada a usuario abierta) Esto sucede por causa del antivirus. Desactivandolo se soluciona el problema.
Seguridad
El módulo de seguridad que viene out-of-the-box necesita unos pequeños cambios de configuración. De forma predeterminada viene configurado un path segurizado que no corresponde con la aplicación en desarrollo. Se invoca mediante la sentencia:
security setup
Ejemplo
Para ejecutar el ejemplo, seguir los siguientes pasos:
1. Crear carpeta 'helloroo' e posicionarse en ella
2. Copiar el siguiente contenido a un archivo llamado helloroo.roo
project --topLevelPackage com.dosideas.helloroo persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY entity --class ~.domain.Client --testAutomatically field string --fieldName name --notNull --sizeMax 24 --sizeMin 3 field string --fieldName surname --notNull --sizeMin 3 --sizeMax 24 field date --fieldName birthDate --type java.util.Date --notNull field boolean --fieldName active field number --fieldName numberOfKids --type java.lang.Integer --notNull --max 99 controller all --package ~.web perform tests perform eclipse
3. Ejecutar la sentencia
script helloroo.roo
4. Ejecutar 'q' (para salir)
5. Ejecutar mvn tomcat:run desde linea de comando.
Para que es ideal
- Hacer backends de Administración (ABMs/CRUDs con interfaz Web)
Lo que le falta
- La posibilidad de importar modelos de datos,ya sea desde la base de datos o bien de un archivo de configuración Hibernate. (próximamente disponible en la versión 1.1.0)