Hi Sergiu,

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?

This is not really how it's been designed ATM. Whenever you wish to use a 
different implementation of a component you use a component implementation with 
the same role and same hint. You then make it available in your classpath. (Of 
course you can also do this at runtime simply by registering a new 
implementation over the old one).

To decide which implementation is used you use a priority order, as described 
on:
http://extensions.xwiki.org/xwiki/bin/view/Extension/Component+Module#HOverrides

I'd be curious to know your exact use case and understand why the current 
mechanism doesn't work for it.

Thanks
-Vincent

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to