Hi Claude I think now I was able to get the code what you expected. And I just basically added the template merging stuff to script engine code and the flow went successfully ;-). Here is how to deal with tools with the JSR 223 API.
ScriptEngineManager manager = new ScriptEngineManager(); manager.registerEngineName("velocity", new VelocityScriptEngineFactory()); engine = manager.getEngineByName("velocity"); ScriptContext context = engine.getContext(); Properties properties = new Properties(); properties.put("resource.loader", "class"); properties.put("class.resource.loader.description", "Template Class Loader"); properties.put("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader. ClasspathResourceLoader"); CustomEvent event = new CustomEvent("MyEvent"); context.getBindings(ScriptContext.ENGINE_SCOPE).put("event", event); context.setAttribute(VelocityScriptEngine.VELOCITY_PROPERTIES, properties, ScriptContext.ENGINE_SCOPE); Writer writer = new StringWriter(); context.setWriter(writer); engine.eval("eventtool.vm"); System.out.println("####### Tools output #########\n"+writer); On Wed, Aug 1, 2012 at 12:34 AM, Dishara Wijewardana < ddwijeward...@gmail.com> wrote: > > > On Mon, Jul 30, 2012 at 12:40 AM, Claude Brisson <cla...@renegat.net>wrote: > >> On Sun, 29 Jul 2012 23:57:22 +0530 >> Dishara Wijewardana <ddwijeward...@gmail.com> wrote: >> >> > On Sun, Jul 29, 2012 at 10:20 PM, Claude Brisson <cla...@renegat.net> >> > wrote: >> > >> > > Pardon me if I'm all wrong with that, but I really thought that in >> > > the context of the JSR 223 API, templates themselves were >> > > considered as scripts. >> > > >> > > This API is a wrapper around a scripting engine, that evaluates >> > > scripts, which in our case are Velocity templates. >> > >> > My question is how do we manage following methods . We need to pass a >> > template instance or a wrapper of it in to JSR 223 ScriptEngine . How >> > to achieve this without having extensive methods in ScriptEngine API? >> > >> > template.merge(context, writer); >> > ve.getTemplate(vmTemplateFile); >> >> The Velocity context corresponds to the JSR 223 Bindings. Populating it >> should not be a problem. >> >> The evaluation itself should gather the getTemplate() step and the >> merge() step, or use one of the VelocityEngine.evaluate() method, this >> is already what you did in VelocityScriptEngine.eval() method. > > > I think now I understood what you really meant. Will provide the client > code ASAP and also I think I have to change the engine.eval() method > in JSR223 API. > > > >> So I >> really don't understand why you would need other methods. But maybe I'm >> still missing something... >> >> Oh, by the way, I still saw some method comments like the following one >> in your code: >> /** >> * Added creation inside sync block to avoid creating two factories >> from a engine by two parallel threads at the same time. >> * Also the additional null check out from sync block is to avoid >> every thread to get blocked inside it even there is an already created >> factory. */ >> >> so I recall you that such comments may be useful when reading the code, >> but they should be inside the method, not as a javadoc comment. Javadoc >> users don't care about such details. Could you please do something >> about that? > > > I thought I cleared all. Sorry for the inconvenience caused. Will clean > them all and update. > Done. > > >> >> >> Claude >> >> >> > >> > > >> > > Claude >> > > >> > > On Sun, 29 Jul 2012 00:52:08 +0530 >> > > Dishara Wijewardana <ddwijeward...@gmail.com> wrote: >> > > >> > > > On Sat, Jul 28, 2012 at 12:53 PM, Claude Brisson >> > > > <cla...@renegat.net> wrote: >> > > > >> > > > > On Sat, 28 Jul 2012 11:47:35 +0530 >> > > > > Dishara Wijewardana <ddwijeward...@gmail.com> wrote: >> > > > > >> > > > > > On Fri, Jul 27, 2012 at 2:20 PM, Claude Brisson >> > > > > > <cla...@renegat.net> wrote: >> > > > > > >> > > > > > > Well, ok, but it's still not what I asked for: I meant a >> > > > > > > command line tool that would, of course, use your JSR 223 >> > > > > > > API classes. >> > > > > > > >> > > > > > HI Claude, >> > > > > > Sorry for the inconvenience I made. So what you meant is do >> > > > > > the above similar kind of thing (a client code) which would >> > > > > > not directly goes through the velocity API but through JSR223 >> > > > > > API ? If so in that case we would need to add additional >> > > > > > methods to the JSR API ? IS that OK ? Is it what you >> > > > > > expected ? >> > > > > >> > > > > Well, the API is meant to be used, and a command line wrapper >> > > > > seems to me one of the simplest things we could do as an >> > > > > example. >> > > > > >> > > > > Why would you need additional methods to the JSR 223 API? Which >> > > > > methods? >> > > > > >> > > > JSR223 API doesn't have a concept like templates which is in >> > > > velocity. Hence it does not have getTemplate() method. ( because >> > > > I have simply to execute a similar example as given through jsr >> > > > 223 API, need a getTemplate() ) >> > > > >> > > > > >> > > > > >> > > > > Claude >> > > > > >> > > > > > >> > > > > > > Claude >> > > > > > > >> > > > > > > On Fri, 27 Jul 2012 00:00:31 +0530 >> > > > > > > Dishara Wijewardana <ddwijeward...@gmail.com> wrote: >> > > > > > > >> > > > > > > > Hi Claude, >> > > > > > > > I was finally able to got a simple code working :-) . >> > > > > > > > >> > > > > > > > public class Main { >> > > > > > > > >> > > > > > > > public static void main(String[] args) throws >> > > > > > > > Exception { VelocityContext context = new >> > > > > > > > VelocityContext(); Writer writer = new StringWriter(); >> > > > > > > > >> > > > > > > > CustomEvent event = new CustomEvent("subash"); >> > > > > > > > context.put("event", event); >> > > > > > > > Template template = >> > > > > > > > createTemplate("eventtool.vm"); >> > > > > > > > >> > > > > > > > template.merge(context, writer); >> > > > > > > > System.out.println(writer); >> > > > > > > > writer.close(); >> > > > > > > > } >> > > > > > > > >> > > > > > > > private static Template createTemplate(String >> > > > > > > > vmTemplateFile) throws Exception { >> > > > > > > > VelocityEngine ve = new VelocityEngine(); >> > > > > > > > Properties properties = new Properties(); >> > > > > > > > properties.put("resource.loader", "class"); >> > > > > > > > >> > > properties.put("class.resource.loader.description","Template >> > > > > > > > Class Loader"); >> > > > > > > > properties.put("class.resource.loader.class", >> > > > > > > > >> > > > > > > > >> > > > > >> "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); >> > > > > > > > ve.init(properties); >> > > > > > > > return ve.getTemplate(vmTemplateFile); >> > > > > > > > } >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > >> > > >> >> --------------------------------------------------------------------------------------------------------------------------------- >> > > > > > > > >> > > > > > > > And here is the template and the out put. >> > > > > > > > >> > > > > > > > *eventtool.vm* >> > > > > > > > >> > > > > > > > $event; >> > > > > > > > >> > > > > > > > Event Created by $event.getName() >> > > > > > > > Event Created on $event.getDate() >> > > > > > > > >> > > > > > > > >> > > > > > > > *Output* >> > > > > > > > * >> > > > > > > > * >> > > > > > > > This is a test event template: created bysubash on Thu >> > > > > > > > Jul 26 23:57:25 IST 2012; >> > > > > > > > >> > > > > > > > Event Created by subash >> > > > > > > > Event Created on Thu Jul 26 23:57:25 IST 2012 >> > > > > > > > >> > > > > > > > >> > > > > > > > >> > > > > > > > On Sun, Jul 22, 2012 at 4:54 PM, Claude Brisson >> > > > > > > > <cla...@renegat.net> wrote: >> > > > > > > > >> > > > > > > > > > Did you mean Velocity maven plugin tool[1] as the >> > > > > > > > > > command line tool ? If not can you please direct me >> > > > > > > > > > to a link to find the example to follow. Because in >> > > > > > > > > > the documentation page there are links to XML tool, >> > > > > > > > > > View tool, JSP tool and etc. And couldn't find >> > > > > > > > > > "command line tool" thing . Correct me if I am >> > > > > > > > > > looking for irrelevant. >> > > > > > > > > > >> > > > > > > > > > [1] - >> > > > > > > > > > >> > > > > > > > > >> > > > > > > >> > > > > >> > > >> http://velocity.apache.org/tools/devel/maven-velocity-tools-plugin/index.html >> > > > > > > > > >> > > > > > > > > No, when I say "command line tool", I only mean a plain >> > > > > > > > > old Java object with a "main(String args[])" method, >> > > > > > > > > that you can call from the command line... >> > > > > > > > > >> > > > > > > > > >> > > > > > > > > Claude >> > > > > > > > > >> > > > > > > > >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > >> > > > >> > > > >> > > >> > > >> > >> > >> >> > > > -- > Thanks > /Dishara > > -- Thanks /Dishara