Represents the aspect runtime system.
Manages the different parts of the runtime system and provides and API to access and manage the system.
There is an AspectSystem per ClassLoader. An AspectSystem is aware of the classloader hierarchy and reflects it by gathering the AspectManager, which represents a single <system ..> entry.
When an instance of an AspectSystem is created (perClassLoader), it checks for existence of previous AspectManager defined in parent ClassLoader. AspectManager are shared among AspectSystem as shown below:
[0d, 1d, 2d] (3 SystemDefs, all defined in this classloader) / \ [0r, 1r, 2r, 3d] \ (3 reused, one more defined) [0r, 1r, 2r, 3d] (one more defined, not the same)
This composition strategy allow to avoid global static repository, but is tight to following ClassLoader parent hierarchy. If an AspectManager is added at runtime, it should be added in the whole child hierarchy. TODO
TODO: caution when addding a new SystemDefinition in between. TODO: move the remote proxy elsewhere unless defining classloader is needed.
@author
Jonas Bon�r
@author
Alexandre Vasseur