Features currently consist of a Java class that is complied at build time, plus a number of js and css resources. These are then installed and persisted using the ServerFeature bean and queried at runtime.
However, there is no reason to require such a complex process for creating, building and installing features, and I propose instead we follow Shindig's approach and create an XML-based loading process.
This would use a feature.xml file to configure each Feature object, e.g.:
This can then be loaded and transformed into an IFeature implementation class at runtime.
The Wave feature is a little more complex, but could be handled more simply as an exceptional case where the WaveAPIImpl <IFeature> class is added explicitly to the feature loader.