-
Notifications
You must be signed in to change notification settings - Fork 7
Home
Gravia is a Modular Build System and Abstraction Layer that unifies a set of core concepts across various modular environments. It provides guarantees for modular consistency at build/runtime.
- Provide a repository of vendor approved artefacts that contains self describing resources
- Provide a feature provisioning system that guaranties build/runtime consistency
- Support abstract feature descriptions that can be provisioned
- Guaranty wiring completeness/consistency
Integration can be broken down into these areas
- Class Loading & Modularity
- [Provisioning]
- [Management]
- [Configuration]
- Container manages a set of Resources at runtime.
- Resource is associated with Capabilities/Requirements.
- Repository contains all known Resources.
- Resolver resolves a given set of Resources
- Provisioner installs a set of Resources into the Container
At build time every artefact goes through a tooling layer that provides capability/requirement metadata. The build artefact together with its metadata are loaded as a Resource into the Repository. The Repository also holds abstract (feature) Resources which reference actual binary Resources. At the end of this phase, everything that can possibly be provisioned to the Container is known to the Repository.
Following that, the build process would give a set of coarse grained product requirements to the Provisioner (e.g. webservices, ejb3, security, etc). The Provisioner gets the wiring candidates from the Repository. The Resolver is tasked to find a consistent wiring solution.
Ultimately, the Provisioner installs the set of Resources in the Container. There is a guarantee that the wiring is both complete and consistent. Every code path in every artefact is wired to an artefact that provides the needed packages. This concludes the initial build procedure. The wiring is recorded and reused on subsequent startups.
At runtime, deployed artefacts would go through a similar procedure to make sure that they can get installed/resolved consistently. The wiring graph is determined by the Resolver and not a human decision. Resources can be reasoned about without needing to know what other Resources are currently installed in the Container (i.e. they define their own respective capabilities/requirements and are not tightly coupled to other resources)
Performance is not affected because the wiring graph is determined at build time.