On Tue, Aug 7, 2012 at 12:42 AM, Dishara Wijewardana < ddwijeward...@gmail.com> wrote:
> > > On Tue, Aug 7, 2012 at 12:10 AM, Claude Brisson <cla...@renegat.net>wrote: > >> > > By use of the appropriate velocityEngine.evaluate() method that >> > > takes the template as a String. It will bypass Velocity's internal >> > > cache, but our first goal is to respect the API, then to try to >> > > optimize. >> > > >> > > Speaking about it, since the engine has access to the filename, we >> > > could try to still use the cache. Velocity's cache is here to not >> > > only bypass the actual reading of the file, but also the parsing >> > > process - and since the OS will already cache the file in memory, >> > > it's the parsing of the template which is the most interesting to >> > > avoid via the caching mechanism. Here, we're given the content of >> > > the file at the same time as its name (via the special property >> > > "javax.script.filename"). So we can still do some caching, by just >> > > ignoring the newly provided content when the filename is present in >> > > the cache. >> > > >> > > For this to work properly, we may have to implement our own >> > > Velocity ResourceLoader.w >> > > >> > >> > So what you basically intending is to provide an additional context >> > parameter which has the file name of the template(so that to read it >> > inside evaluate method and use that for >> > velocityEngine.getTemplate(filename) ) while providing the script it >> > self to the evaluate method ? >> >> See page 151 of the specs. There is a bunch of reserved property names. >> Populating them is optional (and not always meaningful), but for our >> caching problem, systematically filling javax.script.filename with the >> template filename looks appropriate. >> >> We don't want to use the getTemplate() method, since we are already >> given a String or a Reader towards the template. But since we also know >> the filename it comes from, we can cache and reuse the parsed template >> each time we get the same filename. >> >> Few clarifications, > > "since we are already given a String or a Reader towards the template" you > meant passing String or reader to > velocityEngine.evaluate(velocityContext, outPut, fileName, reader); ? > > currently what I do is > > Template template = velocityEngine.getTemplate(vm-name); > template.merge(velocityContext, outPut); > > If I do not use velocityEngine.getTemplate(vm-name) how could I do > the template.merge(velocityContext, outPut); step . I think this merge > call is the one which enrich the writer with the rendered output which we > at the end used to print. > > Please correct me if I am wrong. > I think I got you ;-). I have commited the fix which sets and gets the file name as a context attribute. And if we are doing so we have to recommend users to provide the file name of the template (which is on classpath) when providing the script itself. I also got the point of caching and will commit when the fix is ready and tests passed. > > >> GSOC officials say <<Monday, 13 August is our soft >> "pencils down" date. We suggest that students have completed their >> projects by this date and spend a week writing documentation and >> wrapping up their projects. We require that students stop all coding on >> 20 August.>> >> >> It's one week from now. I think that trying to achieve this last >> feature (Velocity resource caching based only on the filename) is a >> reachable goal. >> > > ++1 > > >> >> >> Claude >> > > > > -- > Thanks > /Dishara > > -- Thanks /Dishara