The Intercloud Fabric for Business (ICFB) recently released its newest version code named Diablo (v3.1.1). The product was a nearly complete rewrite of the underlying platform, and boasts a modern UI, and a full complement of REST APIs. The implementation uses the following technologies are also used in the platform:
- Mongo DB (for the configuration database): We chose MongoDB because it was a commercial product with an open source version which gave us the option to engage with the Mongo services should the need arise. The choice of a NoSQL database provided us with a lot of advantages in terms of programming ease, upgradeability, clustering etc.
- Spring: The Spring platform offers many frameworks that make development in Java extremely productive. Specifically we use the following Spring framework components:
- Spring Data and Spring Data Mongo DB: This framework auto generates most of the code that we need to perform database CRUD operations. This saves us a significant amount of work;
- Spring Security: For securing our web application
- Spring Boot: Built in microservices support for our different services (encryption services, workflow engine etc)
- Spring MVC: For REST Controllers and REST API support (we also use Jersey in the 3.1.1 version of the platform but are hoping to convert to Spring MVC completely over time)
- Spring Websocket: For websocket support for the ICF UI
- Spring JMS: For JMS access to the message broker (see #4 below)
- Apache Activiti Workflow Engine: For long running tasks, we use the wonderfully architected Open Source Apache Activiti Workflow engine. The engine provides full BPMN 2.0 support which includes transactional support and greatly simplifies what could have otherwise been quite complicated to implement;
- Active MQ Messaging Server: For interprocess communication as well as to build in resiliency we use an Active MQ message broker and communicate using messages between the various components.
In addition we have started to use Swagger annotations to generate documentation for our REST APIs. In upcoming blog entries, I will attempt to hit on some of the lessons we learnt and things that we did during the course of the year long development of the product.