I first described a difficult scenario that I faced a few years ago. This article is my recommendations to the current custodians of that project on what to change and how.

With the help of open source frameworks like Spring Cloud and open source platforms like Cloudfoundry, you aren’t forced into having a fragile, manual SDLC. The first step is to embrace change and join a vibrant community that is succeeding in software development.

Overview

Increase agility through process, tools and culture

Examine the code and depedencies, determine modules based on business domain.

Refactor the monolithic EAR into microservices living in JARs guided by the 12 Factor Application patterns and microservices recommendations.

12FA – III – Store configuration in the environment (or even better use a configuration server)

Change the Development Process, Frameworks, Libraries and Tools.

Change the Build Process and Tools. Embrace Gradle, Maven, JDK 8.

Change the Delivery Process. Enact Continuous delivery.

Change the Database modifications and migration Process and Tools.

Change the run-time platform from legacy application server to a PaaS.

Centralize the logging. Using PCF Loggregator and tools like ELK and PaperTrail.

Embrace industry standard open source tools, libraries and frameworks

Good code fails when you don’t have good process and a platform to help you.

Good teams fail when you don’t have a good culture that embraces DevOps, microservices and not giant monoliths.

So how could we have improved our process? The first step is to admin you have a problem and seek help. By looking to the community, open source and successful startups that have faced similar struggles with monolithic J2EE code bases (Ebay, Netflix), we can determine some functional patterns.

Patterns and Principles for Change

Use Jenkins to deploy your app with no downtime to CloudFoundry.

Use CloudFoundry deployments to do A/B testing with no downtime or difficulty.

Bind to database, using the same process in development, test, Q/A and production. No manual configuration or configuration changes. Operators make available the correct database settings through the marketplace. Same manifest and bindings will point to different databases in different spaces.

To migrate database changes use flywaydb or liquibase. These are very well integrated into Spring Boot.

Look at NoSQL for part of your database workload, polyglot persistence makes sense in many cases. For MongoDB development, you handle change management with Mongeez, which is automatically done with JHipster.

Smoke tests and automated tests tied to Jenkins.

Test against CloudFoundry development for local development, fast deployments, run unit and integration tests locally.

Nodejitsu is another Node.js PAAS that offers a free plan. The free plan is shared hosting through Joyent. The performance of NodeJitsu’s free plan is very good, especially considering it’s free. To start sign up on NodeJitsu’s site with the free plan and then follow the Getting Started instructions. It was a very quick process on Windows. You can use either their command line, Node.JS based jitsu tool, use the admin web site or use the HTTP API.

Executing the basic jitsu command will show you the following information:

This NYC Node.js PAAS is very performant with a fast easy to use tool. I am liking them so far. They are also very Node.JS oriented, being the only of the PAAS vendors to use Node.JS for their command line tool.

They have also developed the very interesting FlatIron Framework, which I will be looking at next.

I’ve been evaluating a few different technologies for doing some rapid web development work and recently I have been looking at the bounty of available tools, libraries, frameworks and associates of Spring. Spring ROO and Groovy/Grails are the big two RAD tools from SpringSource and they look pretty amazing. I don’t think I’ve found the Holy Grail of Web App development, but these two tools are really helpful in rapidly developing apps. I am hoping someone combines Roo or Grails with Vert.x to make a really awesome alternative to Node.JS. I like Node.JS and have been doing JavaScript for a decade, but I prefer the languages of the JVM and Vert.x’s support for multiple languages is pretty awesome. Hmmm, Vert.x in Grails.

With the excellent STS inside Eclipse, this gives Groovy and Java a great IDE for development, testing and debugging. And that is something that is lacking for Node.JS. Node.JS has a few tools out there, but nothing open source, free, full of awesome mature plugins (PMD, Checkstyle, GIT, Maven, JUnit, FindBugs, …) and just plain easy to use. Eclipse also has plugins for working with CloudFoundry, Heroku, OpenShift and other Cloud environments.

Between Grails and Roo, I really like the fact that I can remove Roo at anytime and still have a fully functionally application setup that utilizes standard Spring tools. It’s also easier to add other cool Spring projects like Spring Social, Spring Mobile, Spring Data and more.

Both Grails and Roo support MongoDB very well and that’s great too see. I have a few Mongo DB instances on MongoLab, MongoHQ and OpenShift. These services all have great free developer services that are great for learning, prototyping and for tutorials. I am really loving Heroku and OpenShift. It’s hard to pick one, so I didn’t. I use them both.

Vert.x + Groovy is really cool, but again not much IDE support, tools or extra libraries. It should grow start building support now, but competition with Node.JS is pretty fierce.

Part of the plug-in for Eclipse includes an awesome JUnit Test Case Generator. It generates a lot of code you need for your unit test, much better than the OOTB Eclipse Junit Class Generator. It generates all the methods you need to start with and most of the boilerplate test code. It saves a lot of time and gives you a nice skeleton to start adding tests to. Google’s CodePro is a nice free tool and a great addition to my toolbox.

My tip: I have specific Eclipse installs for all my different tools. One for Android Development, One Spring STS version, one JBoss/OpenShift version, one for Heroku, one for JEE, one for Client Focused / HTML 5, one for Mobile, etc… That way I am not loading any extra plugins.

You definitely don’t want Android tools in your Eclipse if you are not going to do be doing Android apps everytime, keep that in a separate Eclipse install. You can install as many as you want, space is cheap. I have some that run of USB Sticks fine.