Spring Roo es una herramienta de software de código abierto que utiliza principios de convención sobre configuración para proporcionar un rápido desarrollo de aplicaciones de software empresarial basado en Java . [1] Las aplicaciones resultantes utilizan tecnologías Java comunes como Spring Framework , Java Persistence API , Thymeleaf , Apache Maven y AspectJ . [2] Spring Roo es miembro de la cartera de proyectos de Spring .
![]() | |
![]() Spring Roo 2.0.x | |
Desarrollador (es) | DISID, software fundamental |
---|---|
Lanzamiento estable | 1.3.2 / 1 de septiembre de 2015 |
Versión de vista previa | 2.0.0.RELEASE / 30 de septiembre de 2019 |
Escrito en | Java |
Plataforma | Java SE |
Tipo | Desarrollo rápido de aplicaciones |
Licencia | Licencia Apache 2.0 |
Sitio web | proyectos |
Motivación e historia
La declaración de misión de Spring Roo es "mejorar fundamentalmente la productividad de los desarrolladores de Java sin comprometer la integridad o flexibilidad de la ingeniería" . [3]
La tecnología se demostró por primera vez durante el discurso de apertura en la conferencia de desarrolladores SpringOne Europe el 27 de abril de 2009, con una versión alfa inicial que se publicó al mismo tiempo. Durante la conferencia magistral, se creó una aplicación en vivo en el escenario que los asistentes a la conferencia usarían para votar sobre el nombre preferido para el proyecto (que en ese momento tenía el nombre en código "Roo" dentro de SpringSource ). [4] En última instancia, se prefirió el nombre "Spring Roo" sobre alternativas como Spring Boost, Spring Spark, Spring HyperDrive y Spring Dart. [5]
Siguieron varios lanzamientos, [6] [7] con el Roo 1.0.0.RELEASE ( disponibilidad general ) lanzado en diciembre de 2009. En octubre de 2010, se lanzó Spring Roo 1.1.0.RELEASE. La versión 1.1.0 se trasladó a una base OSGi con un modelo de descubrimiento de complementos asociado, además de soporte adicional para ingeniería inversa de bases de datos incrementales, reducción de la complejidad de la página Spring MVC, Google Web Toolkit, Google App Engine, Apache Solr, JSON y características más pequeñas como serializable. automatización. [8] Los ingenieros de proyectos de Roo actuales son empleados de SpringSource y, como tales, las versiones de Roo suelen admitir las últimas versiones disponibles de otros proyectos de la cartera de Spring .
En 2014, DISID asume el liderazgo del marco de código abierto Spring Roo después del acuerdo de asociación con Pivotal. Colaboran en un mayor desarrollo del proyecto Spring Roo. Roo continuará con su objetivo de proporcionar un estilo de generación de código de marco RAD.
El proyecto Spring Roo seguirá siendo un proyecto de código abierto bajo Spring, manteniendo la misma política de licencias actual. Tanto Pivotal como DISID están haciendo un llamado a las comunidades de Spring y Java para cualquiera que quiera colaborar en el proyecto.
Compatibilidad con estándares y tecnología
La instalación predeterminada de Roo facilita la creación de aplicaciones que cumplen con los siguientes estándares y tecnologías principales: [9]
- Apache ActiveMQ (como implementación JMS integrada )
- Apache Maven (versión 3.2 o superior)
- Apache Tomcat (soporte de ejecución integrado)
- AspectJ (utilizado para AOP plus mixins para lograr la separación de preocupaciones )
- Herramientas de desarrollo de AspectJ (complemento de Eclipse)
- Bootstrap (versión 3.3.6 o superior)
- Computación en la nube (a través de SpringSource Cloud Foundry, Google App Engine y VMforce)
- Eclipse IDE (ejecución concurrente y creación de metadatos del proyecto)
- EclipseLink (como implementación de JPA )
- Hibernate (como implementación JPA )
- Validación de Java Bean (JSR 303) (incluido el Validador de Hibernate)
- API de Java para servicios web XML (tanto servicios como clientes)
- Servicio de mensajes Java (tanto productores como consumidores de mensajes)
- API de persistencia de Java (implementaciones múltiples)
- API de transacciones de Java (a través de la abstracción de transacciones de Spring )
- Java (versión 5, 6 o 7). Java 7 es compatible desde Roo 1.2.4. [10]
- JQuery (versión 1.11 o superior)
- JSON (soporte REST)
- JUnit (pruebas automatizadas para proyectos de usuarios)
- Log4J (instalación y configuración)
- OSGi (la herramienta Roo se basa en OSGi)
- Transferencia de estado representacional (REST)
- Spring Boot (versión 1.4 o superior)
- Spring Data JPA (versión 1.10 o superior)
- Spring Framework (versión 4 o superior)
- Spring Security (versión 4 o superior)
- Spring Web Flow (instalación y definición de flujo)
- SpringSource Tool Suite (STS tiene un shell Roo integrado y ayudantes de comando Roo)
- Thymeleaf (versión 3 o superior)
La lista anterior se puede aumentar mediante complementos adicionales de Roo, que proporcionan el método de extensibilidad de Roo .
Interfaz de usuario
La interfaz de usuario principal de Spring Roo es un shell de línea de comandos . El shell proporciona una interfaz de línea de comandos y también un mecanismo para alojar complementos (que se denominan "complementos" en Roo). Un objetivo de diseño clave de Roo es garantizar que un usuario pueda continuar trabajando de forma "natural", lo que normalmente significa utilizar su entorno de desarrollo integrado (IDE) o editor de texto preferido para la mayoría de las tareas. Como tal, Roo a menudo se carga en una ventana separada para el IDE o editor de texto, y monitoreará el sistema de archivos para detectar cambios realizados por el usuario fuera de Roo. También se realiza un escaneo de inicio del proyecto de un usuario para determinar cualquier cambio que se haya realizado mientras Roo no se estaba ejecutando.
El shell de la interfaz de usuario admite amplias funciones de usabilidad , incluida la finalización de la línea de comandos (es decir, presione TAB), ayuda en línea , sugerencias (una forma de ayuda sensible al contexto ) y conciencia contextual (que proporciona una inferencia automática de las intenciones probables basadas en la actividad reciente). Esto permite a un usuario crear un nuevo proyecto de software a través del shell de Roo o usar Roo en un proyecto existente. El siguiente es un ejemplo de los comandos utilizados por Roo para crear una nueva aplicación más el objetivo de ejecución del complemento Spring Boot Maven para compilar y ejecutar la aplicación utilizando un servidor HTTP integrado:
$ mkdir hola$ cd hola$ roo.shroo> configuración del proyecto --topLevelPackage com.fooroo> jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORYroo> entidad jpa --class ~ .domain.Timerroo> cadena de campo --fieldName mensaje --notNullroo> repositorio jpa --todosroo> servicio --todosroo> configuración web mvcroo> configuración de vista web mvc --type THYMELEAFroo> controlador web mvc --todos --responseType THYMELEAFroo> controlador web mvc --todos --pathPrefix / apiroo> salir$ mvn spring-boot: ejecutar
No era necesario escribir los comandos anteriores en su totalidad, sino que se completaron con TAB. Además, el comando "pista" podría haberse utilizado para obtener ayuda en cualquier momento.
Arquitectura
Si bien hay muchas formas en que el software puede generar código automáticamente , [11] Roo opera generando declaraciones entre tipos de AspectJ (también conocidas como mixins o introducciones). Esto logra la separación de preocupaciones , ya que el código mantenido por Roo está en una unidad de compilación diferente del código que escribe un usuario. Esto significa que Roo puede modificar incrementalmente las declaraciones entre tipos de AspectJ que necesita y dejar todos los demás archivos intactos. [12] [13] [14]
Spring Roo utiliza complementos para proporcionar toda la funcionalidad dentro y encima de un sistema de tiempo de ejecución OSGi basado en Apache Felix .
Complementos básicos
Hay numerosos comandos disponibles en Roo, dependiendo de qué "complementos base" (los que se envían con Roo) y "complementos de terceros" (los que no se envían con Roo) se hayan instalado. Los complementos básicos que se envían con Roo 2.0.x incluyen:
- Creador de complementos: permite la creación sencilla de complementos de Roo de terceros
- Copia de seguridad : permite realizar copias de seguridad en un archivo ZIP escribiendo
backup
- Bean Info : expone la propiedad JavaBean, el acceso y los metadatos del mutador (utilizados principalmente por otros complementos)
- Configurable : presenta la anotación @Configurable de Spring Framework (utilizada principalmente por otros complementos)
- Ingeniería inversa de bases de datos : permite la ingeniería inversa incremental de bases de datos relacionales.
- Data on Demand : proporciona datos semilla que cumplen con las anotaciones JSR 303 (JavaBean Validation) presentes en las entidades.
- DTO : amplio soporte para el mantenimiento automático de los objetos de transferencia de datos
- Correo electrónico : simplifica la configuración de correos electrónicos basados en SMTP y la compatibilidad con remitentes de correo a través de Javamail
- Entity : amplio soporte para mantener automáticamente las clases de @Entity de la API de persistencia de Java
- Java Bean : mantiene automáticamente los getters / setters de JavaBean para las clases con una anotación @RooJavaBean
- JDBC : encapsula el acceso compatible con OSGi a los controladores JDBC enviados en diferentes paquetes (utilizados principalmente por otros complementos)
- JMS : simplifica la conexión a un proveedor de JMS (o la incorporación de ActiveMQ ) y el envío / recepción de mensajes JMS
- JPA : instala un proveedor JPA especificado y configura JDBC en consecuencia
- JSON : agrega métodos de serialización y deserialización relacionados con JSON a POJO
- Registro : configura Log4j , incluida la configuración de nivel de registro basada en comandos
- Pluralización : proporciona pluralización de sustantivos (utilizado principalmente por otros complementos)
- Editor de propiedades : administra los editores de propiedades, como lo requiere Spring MVC
- Archivo de propiedades : administra archivos de propiedades de Java y proporciona comandos de shell para leer, establecer y eliminar valores de propiedad.
- Seguridad : configura Spring Security , incluidas las páginas de inicio de sesión, los filtros y las dependencias
- Prueba : produce pruebas de integración JUnit para clases de proyectos
- ToString : produce un método toString () válido para cualquier clase con la anotación @RooToString
- Web Flow : instala Spring Web Flow y crea un flujo predeterminado
- Web MVC : mantiene la capa de vista basada en las plantillas Spring MVC más Thymeleaf y la API RESTful
- WS : produce servicios SOAP y clientes SOAP
Módulos principales de Roo
Roo también incluye un conjunto básico de módulos que proporcionan un entorno de ejecución alojado para diferentes complementos. Estos módulos principales incluyen:
- Soporte : utilizado por módulos centrales y complementos para servicios de soporte de clase de utilidad común
- Metadatos : proporciona una interfaz e implementación del proveedor de servicios de metadatos que incluye el registro de dependencias y el almacenamiento en caché.
- Monitor de archivos : publica eventos después de los cambios detectados en el sistema de archivos (la implementación predeterminada utiliza sondeo de disco con escalado automático )
- Deshacer archivos : proporciona una función de deshacer archivos para que la utilice el administrador de procesos.
- Proyecto : abstrae sistemas típicos de construcción de proyectos de usuario final como Apache Maven y Apache Ant
- Administrador de procesos : ofrece una abstracción del sistema de archivos similar a ACID que incluye la reversión del disco y la sincronización de procesos
- Classpath : realiza el análisis de árbol de sintaxis abstracta y el enlace de tipos de unidades de compilación de Java y AspectJ
- Felix : se integra con Apache Felix , como proporcionar comandos "osgi" en el shell de Roo
- OBR : agrega capacidades de repositorio de paquetes Apache Felix OSGi
- Flujo de URL : encapsula el acceso a descargas en diferentes entornos de host (shell Roo, incrustación de IDE) y aplica el controlador de protocolo http: // Pretty Good Privacy basado en
Diferenciación
Spring Roo se diferencia de otras herramientas de desarrollo de aplicaciones rápidas de convención sobre configuración en las siguientes formas principales: [15]
- Productividad de la plataforma Java : Roo proporciona una solución de productividad para los desarrolladores de Java. No requiere que el usuario programe en ningún otro idioma que no sea Java . También utiliza los estándares y tecnologías de aplicaciones empresariales Java convencionales (como se enumeran anteriormente) para maximizar la reutilización del conocimiento, las habilidades y la experiencia del desarrollador existente.
- Facilidad de uso : el caparazón de Roo está diseñado para proporcionar un entorno fácil de usar y detectable que minimiza los requisitos de formación. Todas las anotaciones de Roo comienzan con @Roo para facilitar la asistencia de código ( finalización de la línea de comandos en IDE). Los usuarios pueden usar su IDE para todas las operaciones y no necesitan estar al tanto de la ejecución de Roo. Roo también permite a los usuarios editar sus archivos cuando Roo no se está ejecutando.
- Sin tiempo de ejecución : Roo no proporciona una API de tiempo de ejecución ni requiere componentes de tiempo de ejecución específicos. Esto asegura que no haya consumo de recursos de CPU , memoria y almacenamiento en disco relacionados con Roo en tiempo de ejecución. El código Roo está optimizado para la implementación en la nube de pequeña huella y los casos de uso de alta escalabilidad .
- Evita el bloqueo : Roo se puede eliminar rápidamente de un proyecto de usuario, lo que es útil para proteger contra el bloqueo del proveedor . Esto es posible porque no hay ningún componente de tiempo de ejecución para eliminar, las anotaciones de @Roo son solo "retención de fuente" (asegurando que no se conserven en archivos compilados * .class) [16] y las declaraciones entre tipos de AspectJ de Roo se pueden "insertar" a las unidades de compilación estándar * .java. [17] [18]
- Extensibilidad : la separación de Roo de la infraestructura central y los complementos base tiene la intención de permitir que terceros extiendan Roo fácilmente. [19] [20]
Ver también
- Griales (marco)
- Griffon (marco) : un marco de escritorio inspirado en Grails
- Marco de juego
Referencias
- ^ "InfoWorld: SpringSource CEO para promocionar Roo, una nueva mejora de Java" por Paul Krill; Con fecha de 2009-06-01.
- ^ "SD Times: Roo lanzado para manejar tareas repetitivas de Spring" por Alex Handy; Con fecha de 2009-10-19.
- ^ "Documentación de referencia de Spring Roo" , sección Declaración de misión; Consultado el 21 de febrero de 2010.
- ^ "Videos de tecnología: el futuro de la innovación de Java" Archivado el 9 de octubre de 2009 en Wayback Machine por Rod Johnson (CEO de SpringSource); Consultado el 17 de octubre de 2009.
- ^ "Documentación de referencia de Spring Roo" , sección Historia; Consultado el 21 de febrero de 2010.
- ^ "InfoQ: Spring Roo 1.0 M1 lanzado" por Srini Penchikala; Con fecha de 2009-5-31.
- ^ "Seguimiento de problemas de Jira para lanzamientos de Spring Roo Project" ; Consultado el 21 de febrero de 2010.
- ^ "A Big Hop Forward: Spring Roo 1.1.0 ¡Lanzamiento!" Archivado el 28 de octubre de 2010 en Wayback Machine , por Ben Alex (líder de Spring Roo en SpringSource); Consultado el 27 de octubre de 2010.
- ^ "TechCast: podcast de Spring Roo" por Ken Rimple; Consultado el 21 de febrero de 2010.
- ^ "Spring Roo 1.2.4.RELEASE disponible ahora" con fecha del 17 de octubre de 2013 .
- ^ "InfoQ: papel de la generación de código en el desarrollo de Java" por Srini Penchikala; Con fecha 2009-9-3.
- ^ "InfoQ: Introducción a la presentación en video de Spring Roo 1.0.0" , por Ben Alex (líder de Spring Roo en SpringSource); Consultado el 21 de febrero de 2010.
- ^ "Conferencia JAX Italia 2009: Spring Roo" por Massimiliano Dessì; Consultado el 21 de febrero de 2010.
- ^ "Grupo de usuarios de Java de Filadelfia: Spring Roo" por Ken Rimple; Consultado el 21 de febrero de 2010.
- ^ "Página de inicio de Spring Roo" ; Consultado el 21 de febrero de 2010.
- ^ "Sun Java 5 JavaDocs para RetentionPolicy.SOURCE" por Sun Microsystems; Consultado el 17 de octubre de 2009.
- ^ "Refactorización push-in para AJDT" por Andrew Eisenberg (líder del proyecto AJDT en SpringSource); Consultado el 17 de octubre de 2009.
- ^ "Intertipos de Eclipse AJDT y refactorización push-in" Archivado el17 de enero de 2010en la Wayback Machine por Dhruba Bandopadhyay; Fechado 2009-12-31.
- ^ "Conferencia JavaDay IV del grupo de usuarios de Java italiano: aspectos internos de Spring Roo" por Massimiliano Dessì; Consultado el 21 de febrero de 2010.
- ^ "Primavera, Roo y Alfresco también: lo que Alfresco le dio a la primavera y por qué" por Jeff Potts; Con fecha de 2009-12-16.
enlaces externos
- Página web oficial