Diferencia entre revisiones de «Spring Roo»

De Dos Ideas.
Saltar a: navegación, buscar
(Para que es ideal)
(Ver también)
 
(No se muestran 75 ediciones intermedias de 5 usuarios)
Línea 1: Línea 1:
== Descripción ==
+
[[Spring Roo]] es una herramienta RAD extensible para [[Java]] basada en [[Spring Framework]]. Basicamente es un generador de código avanzado, que se utiliza desde la linea de comandos invocando sentencias.
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)
+
La idea detrás de [[Spring 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 porque no ata la solución al framework, sino porque no genera overhead. Se puede eliminar facilmente.
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.
+
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.  
Todos los comandos escritos se van guardando automáticamente (log.roo)
+
 
 +
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).
 +
 
 +
== Características ==
 +
* Permite desarrollar una aplicación Web en minutos. Genera un war. Construye dos capas: la de persistencia y la de presentación. Para agregar la capa de negocio, se pueden agregar las clases manualmente a los controladores generados con Roo.
 +
* Permite generar un modelo de datos complejo, incluyendo validaciones.
 +
* La aplicación Web es RESTful y tiene soporte para internacionalización en varios idiomas.
 +
* Tiene soporte de seguridad out-of-the-box.
 +
* La presentación usa [[Dojo]] (incorporar otro, por ejemplo [[JQuery]], se hace a mano y es costoso).
  
 
=== Generación de código ===
 
=== Generación de código ===
 
Es un generador de código ''hibrido'', utilizando generación activa y pasiva.
 
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 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.
+
Utiliza generación activa para la metadata con la ayuda de los tags @Roo* y modifica gradualmente .aj y los jsp.
  
Sincroniza los cambios entre Roo y las modificaciones realizadas al código (roundtrip)
+
Sincroniza los cambios entre Roo y las modificaciones realizadas al código (roundtrip).
 +
 
 +
[[Spring Roo]] no interviene en runtime, solo lo hace en tiempo de desarrollo. Una vez creado el proyecto con Spring Roo, podría eliminarse y seguir trabajando con un [[IDE]].
  
 
=== Librerías/Frameworks que usa ===
 
=== Librerías/Frameworks que usa ===
  
* Java
+
* [[Java]]
* Spring Framework
+
* [[AspectJ]]
* Java Persistence API (Hibernate)
+
* [[Eclipse]]
* Java Server PAges
+
* Java Persistence API:  [[Hibernate]], [[OpenJPA]], [[EclipseLink]]
* Spring Security
+
* [[Java Server Pages]]
* Spring Web Flow
+
* [[JUnit]]
* Log4j
+
* [[Log4J]]
* Maven
+
* [[Maven]]
* AspectJ
+
* [[Selenium]]
* Eclipse
+
* [[Spring Framework]]
* JUnit
+
* [[Spring MVC]]
* Selenium
+
* [[Spring Security]]
 +
* [[Spring Web Flow]]
  
 
== Requisitos ==
 
== Requisitos ==
  
Tener instalado Java 5 y Maven.
+
Tener instalado Java y Maven, las últimas versiones estables.
  
 
== Configuración ==
 
== Configuración ==
Línea 44: Línea 50:
  
 
== Uso ==
 
== Uso ==
Para empezar a Roo, crear una carpeta e invocar a Roo
+
Para la ejecución de comandos podemos utilizar:
 +
* el shell de roo mediante linea de comando
 +
* el shell que viene embebido en el [[SpringSource Tool Suite]]
 +
* o el [[IDE]] que utilizás habitualmente, por ejemplo [[Eclipse]]. En este caso deberías instalar el plugin para trabajar con aspectos y maven.
 +
 
 +
Para empezar a usar los comandos Roo mediante el shell, crear una carpeta e invocar a [[Spring Roo]]
 
Ej.:
 
Ej.:
  
Línea 70: Línea 81:
  
 
La sentencia help lista todos los comandos con descripciones breves.
 
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 ==
 
== Pasos para crear una aplicación mínima ==
  
=== Crear un proyecto ===
+
*Crear el proyecto
 +
*Elegir el framework de persistencia
 +
*Crear el modelo de dominio
 +
*Generar de la capa de presentación
  
  project --topLevelPackage  com.dosideas.helloroo
 
 
 
=== Elegir el framework de persistencia ===
 
  
Se puede elegir entre 3 frameworks y 8 bases de datos
+
En detalle podés verlo en [[Roo: Pasos para crear una aplicación mínima]].
  
Frameworks:
+
== Manejo de propiedades ==
* ECLIPSELINK
 
* HIBERNATE
 
* OPENJPA
 
  
Bases de datos:
+
Roo genera archivos de propiedades dentro del proyecto, por ejemplo: database.properties.
* DB2
+
Dichos archivos pueden ser modificados automáticamente por los comandos de roo. Se debe tener en cuenta entonces que al ejecutar un comando que impacte valores  configurados manualmente, será necesario volver a configurarlos.
* H2_IN_MEMORY
+
Las claves definidas manualmente por el usuario no son alteradas por ningún comando de roo.
* HYPERSONIC_IN_MEMORY
 
* HYPERSONIC_PERSISTENT
 
* MSSQL
 
* MYSQL
 
* ORACLE
 
* POSTGRES
 
* SYBASE
 
  
Ej.:
+
== Maven ==
  
  persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
+
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'
  
=== Creación del modelo de datos ===
+
== Seguridad ==
  
Junto con la creación de la clase se puede elegir de crear los tests de componentes correspondientes.
+
El módulo de seguridad que viene predeterminado 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:
  
   entity --class ~.domain.Client --testAutomatically
+
   security setup
  
Por cada campo a agregar a la clase es necesario definir el tipo, el nombre y las restricciones que pueda tener.
+
== Ejecutar un script ==
  
  field string --fieldName name --notNull --sizeMax 24 --sizeMin 3
+
Todo lo que se va ejecutando por consola, se va grabando en un archivo de log (log.roo).
  field string --fieldName surname --notNull --sizeMin 3 --sizeMax 24
+
Es posible re-ejecutar las acciones, copiando el archivo con otro nombre y utilizando la sentencia 'script <nombre de archivo>'
  field date --fieldName birthDate --type java.util.Date --notNull
+
Ej.:
  field boolean --fieldName active
 
  field number --fieldName numberOfKids --type java.lang.Integer --notNull  --max 99
 
  
==== Expresiones regulares ====
+
  roo>script helloworld.roo
 
 
Existe un bug reportado que impide el uso de expresiones regulares, si bien teoricamente son soportadas por Roo.
 
  
=== Interfaz gráfica ===
+
== Ejemplos ==
  
Roo permite la creación de la interfaz gráfica web, que comprende de una alta, baja, modificación y listado.
+
Necesitamos tener correctamente instaladas las siguientes versiones (verificar la configuración de las variables de entorno PATH y JAVA_HOME):
Se puede especificar de que objeto de negocio se requiere o bien crearla para todos.
 
  
  controller all --package ~.web
+
* JDK 1.6 UPDATE 21
 +
* Spring Roo 1.0.2
 +
* Apache Maven 2.2.1
  
=== Maven ===
 
  
Desde Roo se pueden ejecutar varias tareas de Maven sin tener que salir del entorno.
+
Para poder ejecutar los siguientes ejemplos:  
Por ejemplo:
 
* 'perform tests' equivale a 'mvn test'
 
* 'perform eclipse' equivale a 'mvn eclipse:eclipse'
 
  
=== Error durante la ejecución de Roo ===
+
* [[Ejemplo de script con Spring Roo]]
 +
* [[Ejemplo de proyecto web ABM con Spring Roo]]
 +
* [[Ejemplo de proyecto web ABM con SpringSource Tool Suite]]
  
Puede ser que a veces Roo se trabe cuando quiere abrir un archivo y emita el siguiente error:
+
== Personalizacion de la capa de persistencia ==
(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 ===
+
En [[Capa de Persistencia de Spring Roo]] veremos algunas características de uso con [[Oracle]].
  
El módulo de seguridad que viene out-of-the-box necesita unos pequeños cambios de configuración.
+
== Personalizacion de la capa de presentació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
+
En [[Capa de Presentación de Spring Roo]] veremos como cambiar la apariencia de las pantallas web.
 
 
== Ejemplo ==
 
  
Para ejecutar el ejemplo, seguir los siguientes pasos:
+
== Uso de mensajeria ==
  
1. Crear carpeta 'helloroo' e posicionarse en ella
+
En [[JMS con Spring Roo]] veremos como incorporar tareas asincrónicas a la aplicación.
  
2. Copiar el siguiente contenido a un archivo llamado helloroo.roo
+
== Uso de servicios web con Rest ==
  
  project --topLevelPackage  com.dosideas.helloroo
+
En [[Restful con Spring Roo]] veremos como incorporar servicios web sencillos a la aplicación, con la tecnología [http://www.dosideas.com/noticias/java/314-introduccion-a-los-servicios-web-restful.html Rest].
  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
+
== Creación de Add On ==
  
  script helloroo.roo
+
Podemos incorporar nuevos comandos de Spring Roo, creando un Add On nuevo.
  
4. Ejecutar 'q' (para salir)
+
* [https://fisheye.springsource.org/browse/spring-roo Listado de addons existentes]
 +
* [http://www.slideshare.net/desmax74/spring-roo-internals-javaday-iv Arquitectura de Spring Roo]
 +
* [http://abaddon-gtz.blogspot.com/2010/04/un-sencillo-add-on-de-spring-roo.html Un sencillo Add On de Spring Roo]
  
5. Ejecutar mvn tomcat:run desde linea de comando.
+
== Problemas y soluciones ==
 +
* [[Problemas frecuentes con Spring Roo]]
  
 
== Para que es ideal ==
 
== Para que es ideal ==
Línea 191: Línea 169:
  
 
* 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)
 
* 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)
 +
 +
== Ver también ==
 +
* [[SpringSource Tool Suite]]
 +
* [[REST con Spring Roo]]
 +
* [http://www.springsource.org/roo/ Web oficial de Spring Roo]
 +
* [http://static.springsource.org/spring-roo/reference/html-single/index.html Manual de referencia]
 +
* [http://www.infoq.com/presentations/Introducing-Spring-Roo Presentación hecha por el creador]
 +
* [https://admin.na3.acrobat.com/_a204547676/p38684494/?launcher=false&fcsContent=true&pbMode=normal Curso de Spring Roo on-line]
 +
* [http://blog.springsource.com/2009/05/27/roo-part-2/ Ejemplo con buscador dinámico]
 +
* [http://stsmedia.net/introducing-spring-roo-part-2-security-jms-email-support/ Ejemplo con Jms y envío de mails]
 +
 +
[[Category: Spring Framework]]

Revisión actual del 18:17 28 mar 2012

Spring Roo es una herramienta RAD extensible para Java basada en Spring Framework. Basicamente es un generador de código avanzado, que se utiliza desde la linea de comandos invocando sentencias.

La idea detrás de Spring 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 porque 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).

Características

  • Permite desarrollar una aplicación Web en minutos. Genera un war. Construye dos capas: la de persistencia y la de presentación. Para agregar la capa de negocio, se pueden agregar las clases manualmente a los controladores generados con Roo.
  • Permite generar un modelo de datos complejo, incluyendo validaciones.
  • La aplicación Web es RESTful y tiene soporte para internacionalización en varios idiomas.
  • Tiene soporte de seguridad out-of-the-box.
  • La presentación usa Dojo (incorporar otro, por ejemplo JQuery, se hace a mano y es costoso).

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* y modifica gradualmente .aj y los jsp.

Sincroniza los cambios entre Roo y las modificaciones realizadas al código (roundtrip).

Spring Roo no interviene en runtime, solo lo hace en tiempo de desarrollo. Una vez creado el proyecto con Spring Roo, podría eliminarse y seguir trabajando con un IDE.

Librerías/Frameworks que usa

Requisitos

Tener instalado Java y Maven, las últimas versiones estables.

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 la ejecución de comandos podemos utilizar:

  • el shell de roo mediante linea de comando
  • el shell que viene embebido en el SpringSource Tool Suite
  • o el IDE que utilizás habitualmente, por ejemplo Eclipse. En este caso deberías instalar el plugin para trabajar con aspectos y maven.

Para empezar a usar los comandos Roo mediante el shell, crear una carpeta e invocar a Spring 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.

Pasos para crear una aplicación mínima

  • Crear el proyecto
  • Elegir el framework de persistencia
  • Crear el modelo de dominio
  • Generar de la capa de presentación


En detalle podés verlo en Roo: Pasos para crear una aplicación mínima.

Manejo de propiedades

Roo genera archivos de propiedades dentro del proyecto, por ejemplo: database.properties. Dichos archivos pueden ser modificados automáticamente por los comandos de roo. Se debe tener en cuenta entonces que al ejecutar un comando que impacte valores configurados manualmente, será necesario volver a configurarlos. Las claves definidas manualmente por el usuario no son alteradas por ningún comando de roo.

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'

Seguridad

El módulo de seguridad que viene predeterminado 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

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

Ejemplos

Necesitamos tener correctamente instaladas las siguientes versiones (verificar la configuración de las variables de entorno PATH y JAVA_HOME):

  • JDK 1.6 UPDATE 21
  • Spring Roo 1.0.2
  • Apache Maven 2.2.1


Para poder ejecutar los siguientes ejemplos:

Personalizacion de la capa de persistencia

En Capa de Persistencia de Spring Roo veremos algunas características de uso con Oracle.

Personalizacion de la capa de presentación

En Capa de Presentación de Spring Roo veremos como cambiar la apariencia de las pantallas web.

Uso de mensajeria

En JMS con Spring Roo veremos como incorporar tareas asincrónicas a la aplicación.

Uso de servicios web con Rest

En Restful con Spring Roo veremos como incorporar servicios web sencillos a la aplicación, con la tecnología Rest.

Creación de Add On

Podemos incorporar nuevos comandos de Spring Roo, creando un Add On nuevo.

Problemas y soluciones

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)

Ver también