Introduce (symbolic) component link and break up environment
This is a useful pre-requisite for a flexible rearrangement of environment definitions as to avoid having to maintain complex definitions, such as web server configuration across multiple environments that would only differ in, for example, database configurations.
With the symbolic (component) link, a component definition would be completely delegated to another component without having the caller be aware of it.
Particular considerations are however:
a) access to component resources
b) defaulting e.g. Java component of the linked component.
The symbolic (component) link would delegate a) and b) to the target component name, that is, if M1/a linked to M2/b, the Java component defaulted to in M2/b would be M2/java.
In order to make sure a) can be implemented, simply having a "proxy" component is not sufficient, as that would not delegate file resource access today.
Hence either support on lower levels is required, or resource access is also delegatable via an Resource.as(...) invocation.
Note in documentation:
- the behavior for default lookups (IResourceHandle, IResourceObserver, IComponentDescriptor)
- how dependencies are handled
Break Up of Environment¶
In order to avoid repititive complex configurations when customizing the system environment module, the environment module is now by default a collection of link components pointing to resources and other definitions in an environment.base module.
Customization of the environment module is now a simple matter of piecemeal adaptation