On Mar 3, 2011, at 10:17 AM, Vincent Massol wrote: > ok I think I'm going to do something different... :) Here's a new proposal: > > * Create a XWikiWebappResourceLoader that extends Velocity Tool's > WebappResourceLoader and that sets the ServletContext in the velocity engine > application properties (required for WebappResourceLoader to work) > * Users of the xwiki-velocity module will need to specify a resource loader > (should they need one - it's not mandatory if you don't use templates). More > specifically they'll need to pass: > ** resource.loader = "xwiki" > ** xwiki.resource.loader.class = XWikiWebappResourceLoader.class.getName() > > Technically we'll be able to acces the ComponentManager in > XWikiWebappResourceLoader because in DefaultVelocityEngine's init() method, > just after we do a new org.apache.velocity.app.VelocityEngine() we'll do an > engine.setApplicationAttribute(ComponentManager.class.getName(), > componentManager) > > This is then accessible from XWikiWebappResourceLoader since the rsvc (aka > velocity engine) is accessible from there (we extend WebappResourceLoader). > > Note that this also allows us to extend/implement other Velocity subsystems > and to make our CM available to them. > > WDYT? > > I think it's much better since: > * we don't change any API > * we use the existing velocity configuration system to configure the behavior > to use > * it's in the spirit of the Velocity framework > * it's flexible for the users of the xwiki-velocity module
Done and committed (you can still comment if you have something to say on this topic!) Thanks -Vincent > Thanks > -Vincent > > On Mar 3, 2011, at 1:51 AM, Sergiu Dumitriu wrote: > >> On 03/02/2011 06:44 PM, Vincent Massol wrote: >>> I forgot to menton the alternative which is to create a >>> WebAppVelocityFactory component impl (hint = "webapp"), in the same manner >>> that I have already created WebAppVelocityConfiguration and >>> WebAppVelocityEngine. >>> >>> I think my preference foes to the API modification now. >> >> I don't like either one. >> >> Adding the hint parameter to the API is nice if there ever will be a >> need to have different types of engines at runtime. Do we have this need >> at the moment? I don't think so, so IMO it's better to keep the API as >> simple as possible while still serving our needs. >> >> Implementing WebAppVelocityFactory somehow beats the definition of a >> factory, at least in my view. A factory usually is a single class that >> knows how to create objects of different types. Normally the preferred >> approach is indeed to add a "hint" parameter, but as I said we don't >> really need it at the moment. >> >> What if we just change the implementation of the factory so that the >> default hint is taken from a configuration? What we'll need to do is to >> provide a different configuration for use inside XWiki. >> >>> Thanks >>> -Vincent >>> >>> On Mar 2, 2011, at 4:49 PM, Vincent Massol wrote: >>> >>>> ok I have no added the following 2 new component impls: >>>> * WebAppVelocityConfiguration >>>> * WebAppVelocityEngine >>>> >>>> However it's not enough since DefaultVelocityEngine.createVelocityEngine() >>>> does a component lookup on VelocityEngine and we need a way for it to look >>>> up with a passed hint. >>>> >>>> I'm proposing to modify the current VelocityFactory API from: >>>> >>>> VelocityEngine createVelocityEngine(String key, Properties properties) >>>> throws XWikiVelocityException; >>>> >>>> to: >>>> >>>> VelocityEngine createVelocityEngine(String key, Properties properties, >>>> String engineType) throws XWikiVelocityException; >>>> >>>> where engineType is the hint corresponding to the engine to look up. >>>> >>>> Then DefaultVelocityManager can call VelocityFactory, passing the "webapp" >>>> hint to createVelocityEngine. >>>> >>>> WDYT? >>>> >>>> Thanks >>>> -Vincent >>>> >>>> On Mar 2, 2011, at 1:56 PM, Vincent Massol wrote: >>>> >>>>> Just a heads up of what I'm working on right now: cleaning up >>>>> xwiki-velocity dependencies. >>>>> >>>>> I'm going to split it into several submodules: >>>>> * xwiki-velocity-management (or xwiki-velocity-jmx) >>>>> * xwiki-velocity-default >>>>> * xwiki-velocity-webapp (implementation of VelocityEngine and >>>>> VelocityConfiguration with hint = "webapp", this is to use use velocity >>>>> with the WebappResourceLoader loading templates from the webapp's root >>>>> dir) >>>>> >>>>> -Vincent > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

