The Fabric3 Service Delivery Model
Traditional deployment models for Java EE and Servlet applications involve packaging a single archive and deploying it to a one-size-fits-all server distribution such as an application server. Many production environments will automate this process by creating installation and deployment scripts. Advanced setups may use IT automation software such as Docker, Chef or Puppet. Integrating Java-based server distributions often leads to complex automation scripts since those servers were originally designed to be manually installed.
This picture has been further complicated by the drive toward greater modularity and designing applications as loosely coupled services. Packaging applications as a single archive, while simple, does not lend itself well to modularity. Fabric3 addresses these requirements by providing Gradle and Maven plugin for assembling a custom runtime image including application modules as part of an automated build. The produced image can then be integrated into a deployment setup managed by IT automation software. The following illustrates a typical (and recommended) Fabric3 delivery model:
Instead of packaging an application separately from the server image, the Fabric3 assembly plugins allow you to define a runtime image including a set of contributions that contain application services. The runtime image can be customized to contain only extensions required for the application and custom configuration. After the runtime image is built, it can be released to a repository and further integrated with a deployment system.