This is now fixed in rev. 1300202 By the way: we will need to carefully review the way ScriptHelper/ContextHelper are built (and especially how the context is passed) in order to make sure the code is thread safe.
Jacopo On Mar 13, 2012, at 11:42 AM, Jacopo Cappellato wrote: > Ok thanks... it doesn't work for me because the scriptType is set to UNKNOWN > instead of SERVICE... I am debugging it now. > > Jacopo > > On Mar 13, 2012, at 11:16 AM, Adrian Crum wrote: > >> org.ofbiz.service.engine.ScriptEngine.java, line 85 and below. >> >> -Adrian >> >> On 3/13/2012 10:11 AM, Jacopo Cappellato wrote: >>> Hey Adrian, >>> >>> a quick question before I dig into the details. >>> I am using the success(..)/error(...) methods to get a result Map (for >>> services) or result String (for Events) and I have noticed that in the new >>> implementation they are saved using the ContextHelper.putResults method. >>> Who is supposed to call the ContextHelper.getResults() method? It would be >>> nice if this was done automatically by the framework (service/event >>> handlers) rather than the script itself... but I am testing it with a >>> service and I can't get the message back. >>> If you could show me a code snippet it would help... if not do not worry I >>> will figure it out. >>> >>> Thanks, >>> >>> Jacopo >>> >>> On Mar 13, 2012, at 8:58 AM, Adrian Crum wrote: >>> >>>> On 3/13/2012 7:46 AM, Jacopo Cappellato wrote: >>>>> On Mar 13, 2012, at 7:59 AM, Adrian Crum wrote: >>>>> >>>>>> Jacopo, >>>>>> >>>>>> Could you share with the rest of us the limitations caused by the >>>>>> refactoring? >>>>>> >>>>> Definitely: I will review, study and use the new code and I will provide >>>>> feedback about the gaps I see. >>>> Oh. I thought you were talking about the ScriptUtil refactoring. >>>> >>>>> One thing that I am not sure I like is the fact that now some of the >>>>> strings in Groovy will be expanded using the FlexibleStringExpander >>>>> rather than the Groovy GStrings... this could be confusing when you are >>>>> programming in Groovy. >>>>> I was also planning to use closures to manage nicely >>>>> EntityListIterators... but I can probably still do this in the >>>>> GroovyBaseScript. >>>>> >>>>>> The work I committed is just a springboard - anyone can modify it/extend >>>>>> it in any way they want. >>>>> Ok, this is good... and dangerous if anyone will add what they want >>>>> without first agreeing/understanding on the purpose of this class. Do we >>>>> all agree that it should stay clean and light by providing simple access >>>>> for common operations rather than providing access to all the possible >>>>> operations? I mean, it should provide a mechanism to perform tasks in the >>>>> most common ways; for special (less frequent) tasks the calling script >>>>> should use the features provided natively by the language and the >>>>> standard API (delegator/dispatcher/etc...). >>>> I agree. Let's keep the API limited to OFBiz-specific artifacts: entity >>>> engine, service engine, logging, etc. >>>> >>>>>> As I mentioned previously, the GroovyBaseScript class can simply >>>>>> delegate to the helper class: >>>>> Yes, I will re-implement it following this design and let you know how it >>>>> goes; but we will still need the Groovy service engine and Groovy event >>>>> handlers... in order to keep the architecture clean should we start to >>>>> think to them as extensions for the applications only? I mean that they >>>>> could be part of the future release of "OFBiz Applications" and not part >>>>> of the future release "OFBiz Framework". In this way the dependency and >>>>> custom Groovy code will all be in the Applications (if they will be >>>>> reimplemented in Groovy) and the framework will stay clean and light. >>>> I was planning on having mini-lang's MethodContext extend ScriptHelper so >>>> all scripting languages (including mini-lang) are running on the same code >>>> base. >>>> >>>> I'm thinking all of this will tie up rather nicely once we have a reduced >>>> framework. Scripting can be its own component that runs on top of the new >>>> framework. Higher-level applications can then extend the scripting >>>> component >>>> >>>> >>>>> Jacopo >>>>> >>>>>> abstract class GroovyBaseScript extends Script implements ScriptHelper { >>>>>> ... >>>>>> >>>>>> private final ScriptHelper helper; >>>>>> >>>>>> Map runService(String serviceName, Map inputMap) throws >>>>>> ScriptException { >>>>>> return helper.runService(serviceName, inputMap); >>>>>> } >>>>>> >>>>>> Map makeValue(String entityName) throws ScriptException { >>>>>> return helper.makeValue(entityName); >>>>>> } >>>>>> >>>>>> ... >>>>>> >>>>>> } >>>>>> >>>>>> -Adrian >>>>>> >>>>>> >>>>>> On 3/13/2012 5:49 AM, Jacopo Cappellato wrote: >>>>>>> Adrian, thank you for your work. >>>>>>> >>>>>>> What I was writing was actually an extension to Groovy for making it >>>>>>> OFBiz friendly; now we have a "reusable" (? by other languages) version >>>>>>> of it... my guess is that you did it because you liked the ideas in it >>>>>>> (and I appreciate it) and you thought it was useful for other languages >>>>>>> as well; and you may be right about this even if, as I initially >>>>>>> mentioned, I would have preferred to complete my work, or at least add >>>>>>> a bit more to it, test the DSL with more poc and Minilang-->Groovy >>>>>>> conversions before crystallizing it into an interface (one of the >>>>>>> advantages in doing it in Groovy was that I could implement it without >>>>>>> the need to build/restart the system)... now I have an interface and an >>>>>>> implementation of it to take care of. >>>>>>> But I don't want to complain (*) and I will review your work closely >>>>>>> and see what I can do to use it properly in Groovy. This refactoring >>>>>>> has introduced a series of limitations that I am determined to resolve >>>>>>> and it will require some more study around Groovy and ideas to cope >>>>>>> with them... I really want that, if we will ever adopt Groovy as our >>>>>>> next language for the applications, it will look as perfect and simple >>>>>>> and natural and integrated as possible: the natural language for OFBiz >>>>>>> (like Minilang is now) rather than OFBiz implemented in Groovy. >>>>>>> >>>>>>> But before I proceed: what is the next step in your plan? What should >>>>>>> go in the ScriptHelper interface? Am I allowed to enhance it based on >>>>>>> my discoveries in my poc work (Minilang-->Groovy) or should I consider >>>>>>> it a final interface that doesn't have to be modified? Should I ask >>>>>>> before enhancing it? I don't want to hijack your work. And more >>>>>>> importantly: can I assume that this helper class will stay light and >>>>>>> simple? I really don't want to see it transformed into a huge class >>>>>>> containing a big amount of methods from different APIs... the fact that >>>>>>> all languages will potentially use it and may wish to extend it with >>>>>>> util methods that make sense to them concerns me a little bit (for >>>>>>> example, a language with weak support for Map handling may need utils >>>>>>> methods to manage Maps that could be useless for Groovy). >>>>>>> >>>>>>> Kind regards and again thank you, >>>>>>> >>>>>>> Jacopo >>>>>>> >>>>>>> (*) even if I find a bit annoying to see my work intercepted and >>>>>>> re-routed while I was in the middle of it, I also appreciate the time >>>>>>> and effort you spent on it and I really want to accept the fact that >>>>>>> working in a community means that I have to blend and negotiate my own >>>>>>> ideas and plans with the ones from others: sometimes it means that you >>>>>>> get great help, sometimes it means that your own beautiful and perfect >>>>>>> ideas are touched and rearranged to fit other's plans and other's >>>>>>> beautiful ideas. >>>>>>> I hope that the good attitude and flexibility I am trying to apply here >>>>>>> will be also used by you and others when it will be time for you to >>>>>>> accept other's proposals/changes >>>>>>> >>>>>>> >>>>>>> On Mar 13, 2012, at 12:35 AM, Adrian Crum wrote: >>>>>>> >>>>>>>> Jacopo, >>>>>>>> >>>>>>>> I committed a generic, reusable version of this idea in rev 1299924. >>>>>>>> >>>>>>>> -Adrian >>>>>>>> >>>>>>>> On 3/8/2012 6:02 PM, Jacopo Cappellato wrote: >>>>>>>>> Hi all, >>>>>>>>> >>>>>>>>> I have just completed my first pass in the implementation of a DSL >>>>>>>>> (Domain Specific Language) for OFBiz that can be used by Groovy >>>>>>>>> services to act like a modern version of Minilang. >>>>>>>>> >>>>>>>>> Please review my notes here: >>>>>>>>> >>>>>>>>> https://cwiki.apache.org/confluence/display/OFBIZ/Groovy+Services+and+DSL+for+OFBiz >>>>>>>>> >>>>>>>>> I look forward to your comments and feedback but please consider that >>>>>>>>> 1) it is a work in progress, 2) I spent a lot of time and mental >>>>>>>>> energy in the effort (reaching simplicity is really complex task!)... >>>>>>>>> so please don't be too picky :-) >>>>>>>>> >>>>>>>>> Regards, >>>>>>>>> >>>>>>>>> Jacopo >>>>>>>>> >>>>>>>>> PS: if you find it useful, I can commit the Groovy service mentioned >>>>>>>>> in the page in Confluence >