HOME

TheInfoList



OR:

Spring Roo is a
open-source Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use and view the source code, design documents, or content of the product. The open source model is a decentrali ...
software tool that uses convention-over-configuration principles to provide
rapid application development Rapid application development (RAD), also called rapid application building (RAB), is both a general term for adaptive software development approaches, and the name for James Martin's method of rapid development. In general, RAD approaches to ...
of
Java Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
-based
enterprise software Enterprise software, also known as enterprise application software (EAS), is computer software used to satisfy the needs of an organization rather than its individual users. Enterprise software is an integral part of a computer-based information ...
. The project has been deprecated and active development has ended.


Motivation and history

Spring Roo's mission statement is to ''"fundamentally improve Java developer productivity without compromising engineering integrity or flexibility"''. The technology was first demonstrated during the opening keynote at the SpringOne Europe developer conference on 27 April 2009, with an initial alpha release concurrently being published. During the keynote an application was built live on-stage that would be used by conference attendees to vote on the preferred name for the project (which at that time was codenamed "Roo" within
SpringSource Spring (previously known as SpringSource) was a software company founded by Rod Johnson, who also created the Spring Framework, an open-source application framework for enterprise Java applications. VMware purchased Spring for $420 million in ...
). Ultimately the name "Spring Roo" was preferred over alternatives including Spring Boost, Spring Spark, Spring HyperDrive and Spring Dart. Several releases followed, with the Roo 1.0.0.RELEASE (
general availability The software release life cycle is the process of developing, testing, and distributing a software product (e.g., an operating system). It typically consists of several stages, such as pre-alpha, alpha, beta, and release candidate, before the fi ...
) released in December 2009. In October 2010, Spring Roo 1.1.0.RELEASE was released. The 1.1.0 release moved to an OSGi foundation with associated add-on discovery model, plus added support for incremental database reverse engineering, Spring MVC page complexity reduction, Google Web Toolkit, Google App Engine, Apache Solr, JSON and smaller features like serializable automation. In 201
DISID
took over the leadership of the open source framework Spring Roo after a partnership agreement with Pivotal. DSID and VMware deprecated Spring Roo and announced the end of active development in 2019 and the repository was archived in 2022.


Standards and technology compatibility

Roo's default installation facilitates the creation of applications that comply with the following standards and major technologies: * Apache ActiveMQ (as an embedded JMS implementation) *
Apache Maven Maven is a build automation tool used primarily for Java projects. Maven can also be used to build and manage projects written in C#, Ruby, Scala, and other languages. The Maven project is hosted by The Apache Software Foundation, where it was ...
(version 3.2 or above) *
Apache Tomcat Apache Tomcat (called "Tomcat" for short) is a free and open-source implementation of the Jakarta Servlet, Jakarta Expression Language, and WebSocket technologies. It provides a "pure Java" HTTP web server environment in which Java code can also ...
(embedded execution support) *
AspectJ AspectJ is an aspect-oriented programming (AOP) extension for the Java programming language, created at PARC. It is available in Eclipse Foundation open-source projects, both stand-alone and integrated into Eclipse. AspectJ has become a widely ...
(used for AOP plus
mixin In object-oriented programming languages, a mixin (or mix-in) is a class that contains methods for use by other classes without having to be the parent class of those other classes. How those other classes gain access to the mixin's methods depe ...
s to achieve
separation of concerns In computer science, separation of concerns (sometimes abbreviated as SoC) is a design principle for separating a computer program into distinct sections. Each section addresses a separate '' concern'', a set of information that affects the code o ...
) * AspectJ Development Tools (Eclipse plugin) * Bootstrap (version 3.3.6 or above) *
Cloud computing Cloud computing is "a paradigm for enabling network access to a scalable and elastic pool of shareable physical or virtual resources with self-service provisioning and administration on-demand," according to International Organization for ...
(via SpringSource Cloud Foundry,
Google App Engine Google App Engine (also referred to as GAE or App Engine) is a cloud computing platform used as a service for developing and hosting web applications. Applications are sandboxed and run across multiple Google-managed servers. GAE supports aut ...
and VMforce) *
Eclipse IDE Eclipse is an integrated development environment (IDE) used in computer programming. It contains a base workspace and an extensible plug-in system for customizing the environment. It had been the most popular IDE for Java development until 20 ...
(concurrent execution and project metadata creation) *
EclipseLink EclipseLink is the open source Eclipse Persistence Services Project from the Eclipse Foundation. The software provides an extensible framework that allows Java developers to interact with various data services, including databases, web services, ...
(as a JPA implementation) *
Hibernate Hibernation is a state of minimal activity and metabolic reduction entered by some animal species. Hibernation is a seasonal heterothermy characterized by low body-temperature, slow breathing and heart-rate, and low metabolic rate. It is most ...
(as a JPA implementation) * Java Bean Validation (JSR 303) (including Hibernate Validator) * Java API for XML Web Services (both services and clients) *
Java Message Service The Jakarta Messaging API (formerly Java Message Service or JMS API) is a Java application programming interface (API) for message-oriented middleware. It provides generic messaging models, able to handle the producer–consumer problem, that can ...
(both message producers and consumers) *
Java Persistence API Jakarta Persistence, also known as JPA (abbreviated from the former name Java Persistence API) is a Jakarta EE application programming interface specification that describes the management of relational data in enterprise Java applications. Per ...
(multiple implementations) *
Java Transaction API The Jakarta Transactions (JTA; formerly Java Transaction API), one of the Jakarta EE APIs, enables distributed transactions to be done across multiple X/Open XA resources in a Java environment. JTA was a specification developed under the Java Com ...
(via Spring transaction abstraction) *
Java Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
(version 5, 6 or 7). Java 7 is supported since Roo 1.2.4. * JQuery (version 1.11 or above) *
JSON JSON (JavaScript Object Notation, pronounced or ) is an open standard file format and electronic data interchange, data interchange format that uses Human-readable medium and data, human-readable text to store and transmit data objects consi ...
(REST support) *
JUnit JUnit is a test automation framework for the Java programming language. JUnit is often used for unit testing, and is one of the xUnit frameworks. JUnit is linked as a JAR at compile-time. The latest version of the framework, JUnit 5, resides ...
(automated tests for user projects) * Log4J (installation and configuration) *
OSGi OSGi is an open specification and open source project under the Eclipse Foundation. It is a continuation of the work done by the OSGi Alliance (formerly known as the Open Services Gateway initiative), which was an open standards organization fo ...
(the Roo tool is built on OSGi) * Representational State Transfer (REST) * Spring Boot (version 1.4 or above) * Spring Data JPA (version 1.10 or above) * Spring Framework (version 4 or above) * Spring Security (version 4 or above) *
Spring Web Flow Spring Web Flow (SWF) is the sub-project of the Spring Framework that focuses on providing the infrastructure for building and running Rich Internet application, rich web applications. The project tries to solve 3 core problems facing web applicat ...
(installation and flow definition) * SpringSource Tool Suite (STS has an embedded Roo shell and Roo command helpers) * Thymeleaf (version 3 or above) The above list can be augmented through additional Roo add-ons, which provide Roo's method of
extensibility Extensibility is a software engineering and systems design principle that provides for future growth. Extensibility is a measure of the ability to extend a system and the level of effort required to implement the extension. Extensions can be t ...
.


User interface

Spring Roo's main user interface is a command-line
shell Shell may refer to: Architecture and design * Shell (structure), a thin structure ** Concrete shell, a thin shell of concrete, usually with no interior columns or exterior buttresses Science Biology * Seashell, a hard outer layer of a marine ani ...
. The shell provides both a
command-line interface A command-line interface (CLI) is a means of interacting with software via command (computing), commands each formatted as a line of text. Command-line interfaces emerged in the mid-1960s, on computer terminals, as an interactive and more user ...
and also a mechanism to host plug-ins (which are called "add-ons" in Roo). One key design goal of Roo is to ensure a user can continue to work in a "natural way", which typically means using their preferred
integrated development environment An integrated development environment (IDE) is a Application software, software application that provides comprehensive facilities for software development. An IDE normally consists of at least a source-code editor, build automation tools, an ...
(IDE) or
text editor A text editor is a type of computer program that edits plain text. An example of such program is "notepad" software (e.g. Windows Notepad). Text editors are provided with operating systems and software development packages, and can be used to c ...
for most tasks. As such Roo is often loaded in a separate window to the IDE or text editor, and will monitor the file system for changes made by the user outside of Roo. A startup-time scan of a user's project is also performed to determine any changes that may have been made while Roo was not running. The user interface shell supports extensive
usability Usability can be described as the capacity of a system to provide a condition for its users to perform the tasks safely, effectively, and efficiently while enjoying the experience. In software engineering, usability is the degree to which a softw ...
features including
command-line completion Command-line completion (also tab completion) is a common feature of command-line interpreters, in which the program automatically fills in partially typed commands. Command line interpreters are programs that allow a user to interact with the ...
(i.e. press TAB),
online help Online help is a form of user assistance that provides topic-oriented, procedural or reference information designed to assist in using a software application, web application or operating system. Online help linked to the application's state ( ...
, hinting (a form of context-sensitive help) and contextual awareness (which provides automatic inference of likely intentions based on recent activity). This allows a user to create a new software project via the Roo shell, or use Roo on an existing project. The following is an example of the commands used by Roo to create a new application plus the Spring Boot Maven plugin ''run'' goal to compile and run the application using an embedded HTTP server: $ mkdir hello $ cd hello $ roo.sh roo> project setup --topLevelPackage com.foo roo> jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY roo> entity jpa --class ~.domain.Timer roo> field string --fieldName message --notNull roo> repository jpa --all roo> service --all roo> web mvc setup roo> web mvc view setup --type THYMELEAF roo> web mvc controller --all --responseType THYMELEAF roo> web mvc controller --all --pathPrefix /api roo> quit $ mvn spring-boot:run The above commands did not need to be typed in full, but rather were completed using TAB. Additionally, the "hint" command could have been used to acquire help at any time.


Architecture

Roo operates by generating
AspectJ AspectJ is an aspect-oriented programming (AOP) extension for the Java programming language, created at PARC. It is available in Eclipse Foundation open-source projects, both stand-alone and integrated into Eclipse. AspectJ has become a widely ...
inter-type declarations (otherwise known as
mixin In object-oriented programming languages, a mixin (or mix-in) is a class that contains methods for use by other classes without having to be the parent class of those other classes. How those other classes gain access to the mixin's methods depe ...
s or introductions). This achieves
separation of concerns In computer science, separation of concerns (sometimes abbreviated as SoC) is a design principle for separating a computer program into distinct sections. Each section addresses a separate '' concern'', a set of information that affects the code o ...
, as the code maintained by Roo is in a different compilation unit from the code a user writes. This means Roo can incrementally modify the AspectJ inter-type declarations that it needs to and leave all other files intact. Spring Roo uses add-ons to provide all the functionality within and on top of an
OSGi OSGi is an open specification and open source project under the Eclipse Foundation. It is a continuation of the work done by the OSGi Alliance (formerly known as the Open Services Gateway initiative), which was an open standards organization fo ...
runtime system based on
Apache Felix Apache Felix is an open source implementation of the OSGi Core Release 6 framework specification. The initial codebase was donated from the Oscar project at ObjectWeb. The developers worked on Felix for a full year and have made various improvem ...
.


Differentiation

Spring Roo differs from other convention-over-configuration rapid application development tools like so: # Java platform productivity: Roo provides a productivity solution for Java developers. It does not require the user to program in any language other than
Java Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
. It also uses mainstream Java enterprise application standards and technologies (as listed above) to maximize reuse of existing developer knowledge, skills and experience. # Usability: Roo's shell is designed to provide a discoverable, easy-to-use environment that minimizes training requirements. Roo annotations all start with @Roo to facilitate code assist ( command line completion in IDEs). Users can use their IDE for all operations and do not need to be aware of Roo running. Roo also supports users editing their files when Roo is not running. # No runtime: Roo does not provide a runtime API or require specific runtime components. This ensures there is no Roo-related
CPU A central processing unit (CPU), also called a central processor, main processor, or just processor, is the primary processor in a given computer. Its electronic circuitry executes instructions of a computer program, such as arithmetic, log ...
,
memory Memory is the faculty of the mind by which data or information is encoded, stored, and retrieved when needed. It is the retention of information over time for the purpose of influencing future action. If past events could not be remembe ...
and
disk storage Disc or disk may refer to: * Disk (mathematics) In geometry, a disk (Spelling of disc, also spelled disc) is the region in a plane (geometry), plane bounded by a circle. A disk is said to be ''closed'' if it contains the circle that constitut ...
resource consumption at runtime. Roo code is optimized for small-footprint
cloud In meteorology, a cloud is an aerosol consisting of a visible mass of miniature liquid droplets, frozen crystals, or other particles, suspended in the atmosphere of a planetary body or similar space. Water or various other chemicals may ...
deployment and high
scalability Scalability is the property of a system to handle a growing amount of work. One definition for software systems specifies that this may be done by adding resources to the system. In an economic context, a scalable business model implies that ...
use cases. # Avoids lock-in: Roo can be rapidly removed from a user project, which is useful to protect against
vendor lock-in In economics, vendor lock-in, also known as proprietary lock-in or customer lockin, makes a customer dependent on a vendor for products, unable to use another vendor without substantial switching costs. The use of open standards and alternati ...
. This is possible because there is no runtime component to remove, @Roo annotations are "source retention" only (ensuring they are not preserved in compiled *.class files) and Roo's AspectJ inter-type declarations can be "pushed in" to standard *.java compilation units. # Extensibility: Roo's separation of core infrastructure and base add-ons intends to allow third parties to easily extend Roo."Spring, Roo, and Alfresco Too: What Alfresco Gave to Spring and Why"
by Jeff Potts; Dated 2009-12-16.


See also

*
Grails (framework) Grails is an Open-source software, open source web application framework that uses the Apache Groovy programming language (which is in turn based on the Java (Sun)#Platform, Java platform). It is intended to be a high-productivity framework by fo ...
* Griffon (framework) – A Desktop framework inspired by Grails *
Play Framework Play Framework is an open-source web application framework which follows the model–view–controller (MVC) architectural pattern. It is written in Scala and usable from other programming languages that are compiled to JVM bytecode, e.g. Java. ...


References


External links

* {{Java (Sun) Free computer libraries Free software programmed in Java (programming language) Java development tools Java enterprise platform Web frameworks