One of the key design principles of Fabric3 is extensibility: service containers should maintain a small footprint and only include the features required by an application. In keeping with this, Fabric3 is architected as a small kernel with additional functionality provided through extensions. This allows users to choose the capabilities they need or provide them through custom extensions.
The base runtime distribution contains only core functionality. Most applications will require one or more extensions. Fabric3 has bundled commonly used extensions in a set of profiles, which can be installed as aggregates in a runtime. Fabric3 profiles include:
- JPA/Hibernate with XA transactions
- JMS with XA transactions
- Web Services
- Web Applications
Since simplicity is also a design goal, Fabric3 attempts to make creating custom extensions as straightforward as possible: write an Fabric3 contribution and drop it in the runtime /extensions directory. The Fabric3 runtime is itself assembled from components so once you have mastered the Fabric3 programming model, you are well along to understanding how to customize the runtime.