Currently, each component manages its extension points and registries, and runtime introspection is limited to contributions (registries are not visible).
Goal is to improve features around descriptors and registries management.
Our current descriptors rely on the home made XMap system that :
- is not reversible
- does not provide an explicit way to define defaults
- does not provide the tools to generate XSD or JSON
The idea would be to switch to JAXB so that :
- we do not have to maintain a custom XML/Java mapping lib and doc
- we can leverage JAXB features
- ability to generate XSD for each extension point (Studio validation)
- ability to work with XML or JSON
This evolution of the descriptor format should be :
- backward compatible :
- older descriptors should still be readable
- versioned :
- Studio should be able to leverage versioned descriptors
Because we want a code free descriptor, we should have annotations do define the merge and override logic.
The idea would be to have the DefaultComponent provide a default implementation of all the register/unregister logic so that :
- we can limit the specific code and provide default implementation for 80% of the cases
- currently we have a lot of components not implementing at all the unregister / cleanup
- we can provide introspection API that gives access to the actual state of the merged contributions
- this would be useful for nuxeo-platform-explorer
- this would be useful for Studio (snapshot a Nuxeo target platform)
- this could be useful for snapshotting/restoring registries
The default implementation should take care about :
- merge / override contributions
- enable / disable contributions
We may also want to express potential dependencies between registries.