Actually, another way of presenting your proposal in a more generic way would 
be: "Add support for component Aliases".

It's slightly more generic since it's not just about default. If you wish to 
change a hint for another one because it's not well named you could do it 
through an alias.

This would also mean adding a ComponentManager.setAlias(String alias, Type 
existingRole, String existingHint).

Anyway, the next step IMO is to check what Guice/CDI and OSGi are doing in this 
regards.

Thanks
-Vincent

On Apr 5, 2012, at 5:55 PM, Sergiu Dumitriu wrote:

> Hi devs,
> 
> Currently, requesting a component instance without a hint will look for the 
> implementation that uses the "default" hint, which makes it difficult to 
> change the implementation in an XWiki instance. Sure, it is easy as long as 
> all the implementations use the "default" hint, but choosing the default 
> between alternative implementations that should all still be usable by 
> themselves is not possible.
> 
> Also, "default" is not really a good hint, since it describes the state of 
> the implementation, not the technology, the aspect that makes it different 
> from the others. It would be better to name each implementation with a proper 
> hint.
> 
> I propose to define a mapping that can specify which hint is the default for 
> a component. In a text file, META-INF/component-defaults.txt, we'll keep 
> componentinterface=defaulthint mappings. For example:
> 
> com.xpn.xwiki.store.XWikiStoreInterface=hibernate
> com.xpn.xwiki.store.migration.DataMigrationManager=hibernate
> 
> And then, when we lookup the current storage implementation, we don't need to 
> check what is the configured hint in xwiki.cfg (or xwiki.properties), we can 
> just request the default implementation.
> 
> If there's no mapping for a component, we'll continue to use the "default" 
> hint.
> 
> I'm not sure where exactly to keep such files. We bundle a components.txt 
> file in each jar containing component implementations. We could do the same 
> for the components we consider the platform defaults, and allow overrides in 
> the WEB-INF/classes/META-INF/component-defaults.txt file. Still, this means 
> that whenever platform defaults change, we need to keep another special 
> section in the release notes, to let users know about these changes, so that 
> they can manually revert to the old default if they need to.
> 
> In the future we could change existing components to give proper hints 
> instead of "default", where such a change is applicable.
> 
> Another idea is to not use "default" at all, and instead go for a generic 
> "xwiki", "xe", "xwiki-platform" or something like that whenever there's just 
> one implementation for a component and we can't find another hint to describe 
> it.
> 
> WDYT?
> -- 
> Sergiu Dumitriu
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to