Yes, but I really think that, if we define what is part of  the "core OFBiz 
framework" we could even go with merging the "core code" into one component.
That would be even easier... but this is food for another day, I can survive 
even if makeValue returns a Map for now.

Jacopo

On Mar 13, 2012, at 12:14 PM, Adrian Crum wrote:

> Yes, the arch-nemesis of innovation - component cross-dependency.
> 
> That's why the script helper needs a factory.
> 
> I was thinking we can insert a script component in between the service and 
> common component dependency. Move all of the script classes there - 
> *Util.java, event handlers, services engines, etc. It would make life a lot 
> easier.
> 
> -Adrian
> 
> On 3/13/2012 11:08 AM, Jacopo Cappellato wrote:
>> Is there a reason for not returning a GenericValue from:
>> 
>>     Map<String, Object>  makeValue(String entityName)
>> 
>> ?
>> 
>> Well, the good reason is probably the dependency issue between framework 
>> components... in my opinion it would be a good time to start thinking to 
>> drop it and consider the "core framework components" all together: 
>> base+service+entity
>> 
>> Jacopo
>> 
>> 
>> On Mar 13, 2012, at 11:51 AM, Jacopo Cappellato wrote:
>> 
>>> I think that this is because of the way it is initialized:
>>> 
>>>        ScriptContext scriptContext = new SimpleScriptContext();
>>>        ScriptHelper helper = createScriptHelper(scriptContext);
>>> 
>>> 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

Reply via email to