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

Reply via email to