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

