Skip to main content

The Promise of Spring Roo

I've been thinking about a project scaffolding tool for Java for a long time now. Many modern technologies now come with CLIs that can lay down project skeletons and add conventional concerns by simply executing command line actions. This scaffolding, as it has come to be known, jump-starts project work significantly by laying down the typical boilerplate and, in many cases, simplifies the wiring of ancillary technologies.

As a top-tier technology, Java has benefited from the many available IDEs that also provide scaffolding-like functionality. These IDEs, and even Maven archetypes to some extent, provide very powerful tools for project foundations and instrumentation of specialized components. You are even able to produce your own extension, provided you're willing to figure out some of the rather obscure mechanisms to do so.

However, architectural patterns change very rapidly and IDEs fail to keep pace. Plus, the IDE capabilities are usually driven through user interface interaction, so there's no repeat-ability or auditing of the process involved with scaffolding an application. Additionally, any scaffolding system currently available falls short of delivering a complete application. In my opinion, these shortcomings result in a significantly lost opportunity.

Imagine you can define your application's domain model, behaviors, and workflows independently of technology, architecture, and patterns. Now imagine that you can run that definition through an enhanced scaffolding mechanism (ESM) capable of generating your entire application using any technology, following any architecture, and implementing any set of patterns. That would be miraculous!

I believe that Spring Roo is a technology capable of delivering on that proposition. It has the mechanisms to deliver that promise and it's up to us to unlock the potential of decoupling the application domain from its underlying architecture. This is a very tough problem to solve and many have tried.

To me, the most incredible benefit is a system that is capable of generating the entirety of an application merely from a description. Extending an application is a simple matter of adding or changing the description. Refactoring is a simple matter of updating the generation components and then passing the description through the ESM again. When you want to change the entire architecture of the deployment model, select a different ESM model. The build pipeline could just accept the application description and generate the code during the build process.

I will be conducting a series of experiments with Spring Roo and creating some "add-ons" in order to test these theories and I hope you find them interesting.

Comments

Popular posts from this blog

Astronauts?

Something happened today that me disturbed. I didn't notice this "thing" that has been occurring over the past two months, but had I, I'd have spoken out sooner. Today, Blue Origin sent another group of tourists into space for a short time. The headliner was William Shatner, a cultural icon. I'm happy for him and the rest of the group for being able to have the experience. This isn't the thing that's bothering me. On their descent back to earth, the mission control commander dubbed them America's newest astronauts, designating them an incremental astronaut number somewhere in the 500's. Astronauts? If what they did, which was to sit in a seat, qualifies them as astronauts, then everyone flying as passengers on an airliner should be anointed "pilots". Correct me if I'm wrong, but astronauts spend decades learning and practicing science, engineering, or aeronautics before applying to and being accepted into one of the most rigorous prog...

Judging UCSD's HealthHack 2016 this Weekend

This weekend, I will have the opportunity to advise and judge some 200 UCSD engineering students during this year's HealthHack . I am excited and honored to represent my company ( ResMed ) while also getting an opportunity to meet some motivated and talented students. From the "brief" briefing I received, my responsibilities include assisting various teams of competitors develop their prototypes and judging the entries in the end to select an overall winner.

Introduction to Spring Roo Shell

Spring Roo is available as a CLI shell-style application and as an STS plugin. Since I'm not a fan of the Eclipse IDE (no offense and I don't need to debate it), the focus will be on using the CLI. The first step is to download the latest release from the Spring Roo project homepage . Before getting too far into it, it will be helpful to understand some basics about the Roo Shell (RS) application. The startup script can be used to bootstrap RS commands or to simply launch the shell program when no commands are included. The commands are applied relative to the current working directory, so be prepared for that. The recommended approach is to unpack the Spring Roo distribution to its own folder, add its /bin directory to the path, and execute RS from your project directories. This will become more obvious in the examples below. To keep it simple, I've created a directory under my Linux home directory and unpacked the distro: ~ $ mkdir spring-roo ~ $ cd spring-roo/...