> On 03 Apr 2016, at 10:49, Thomas Mortagne <thomas.morta...@xwiki.com> wrote:
> 
> You will start catching when you want to deal with errors (before that
> the Velocity macro will deal with it for you automatically) and it
> does not really cost much more lines to deal with errors that way than
> using checking for null return (for method that actually return
> something that could be null to indicate errors) and getLastError()
> concept like we do now.

Yes, and in addition it will prevent side effects. Right now if you call a 
method than can fail and you don’t check the result, the next lines will be 
wrong and can even cause problems.

For example:

{{velocity}}
#set ($someVar = $someobject.somethod()) ## result of server-side computation 
that failed and return null
#set ($somedoc = $xwiki.getDocument("${someVar}-whatever”))
$somedoc.save()
{{/velocity}}

If someobject.somemethod() throws an Exception then there’s no risk of causing 
side effects.

Thanks
-Vincent

> 
> On Sun, Apr 3, 2016 at 12:19 AM, Eduard Moraru <enygma2...@gmail.com> wrote:
>> +0
>> 
>> I can`t help but feel we are stretching Velocity more than what it was
>> built for and we might end up with a more verbose and spaghetti code than
>> what we would have liked (and than we currently have).
>> 
>> As long as we try not to abuse it, I guess we can see how it goes.
>> 
>> Thanks,
>> Eduard
>> 
>> On Sat, Apr 2, 2016 at 11:59 AM, Vincent Massol <vinc...@massol.net> wrote:
>> 
>>> 
>>>> On 01 Apr 2016, at 23:04, Sergiu Dumitriu <ser...@xwiki.org> wrote:
>>>> 
>>>> I think that it's a good idea for script services to throw somewhat
>>>> expected exceptions, signalling invalid usage attempts (user not
>>>> authorized, wrong arguments...) that would then be caught in Velocity.
>>>> But deeper platform issues (DB errors, unexpected NPE, OOM...) should be
>>>> handled outside the user's code itself, at the skin level (view.vm).
>>> 
>>> Sure, that’s the point. The scripts can decide to catch or not (ie. to
>>> handle or not). If not then it’s caught anyway at the level of
>>> MacroTransformation (for macros) or at the level of contentview.vm. In the
>>> majority of cases there isn’t much that the script can do and it shouldn’t
>>> catch anything (it should catch only if it can handle it, i.e. do something
>>> with the exception).
>>> 
>>> Thanks
>>> -Vincent
>>> 
>>>> 
>>>> On 04/01/2016 05:45 AM, Vincent Massol wrote:
>>>>> So far we have the following devs who agree:
>>>>> - thomas
>>>>> - marius
>>>>> - vincent
>>>>> 
>>>>> What about Edy, Sergiu and the others?
>>>>> 
>>>>> Thanks
>>>>> -Vincent
>>>>> 
>>>>>> On 31 Mar 2016, at 14:17, Vincent Massol <vinc...@massol.net> wrote:
>>>>>> 
>>>>>> Guys, I’d like that we progress on this.
>>>>>> 
>>>>>> I didn’t get any agreement or disagreement to this proposal.
>>>>>> 
>>>>>> Any take?
>>>>>> 
>>>>>> Thanks
>>>>>> -Vincent
>>>>>> 
>>>>>> 
>>>>>>> On 18 Jan 2016, at 11:03, vinc...@massol.net wrote:
>>>>>>> 
>>>>>>> Hi devs,
>>>>>>> 
>>>>>>> After a lot of thinking and experimentation (see the thread’s
>>> details), I have found that this first proposal is not a good idea. I’m
>>> thus proposing to replace it with the following best practice:
>>>>>>> 
>>>>>>> * Let our script services generate exceptions
>>>>>>> * If the velocity scripts with to handle the exceptions, then they
>>> should use the #try() directive. If they don’t want to, they don’t have to
>>> do anything since the MacroTransformation or the template (contentvars.vm
>>> for example) will catch it and display it to the user.
>>>>>>> 
>>>>>>> More precisely I’m proposing that:
>>>>>>> 
>>>>>>> * Existing Script APIs in Java should not be modified as that would
>>> break backward compatibility. New signatures can be added and old one
>>> deprecated and moved to the legacy modules. After new signatures have been
>>> introduced, existing velocity scripts can be updated to use the new
>>> signatures and to use the #try directive if needed.
>>>>>>> * New Script APIs must use the new best practices (if agreed :)),
>>> i.e. throw Exceptions, and new velocity scripts must use the #try()
>>> directive if they need to handle exceptions.
>>>>>>> 
>>>>>>> WDYT?
>>>>>>> 
>>>>>>> Thanks
>>>>>>> -Vincent
>>>>>>> 
>>>>>>> 
>>>>>>> On 14 Jan 2016 at 17:51:04, vinc...@massol.net (vinc...@massol.net
>>> (mailto:vinc...@massol.net)) wrote:
>>>>>>> 
>>>>>>>> Hi devs,
>>>>>>>> 
>>>>>>>> Right now our strategy is for script services and script APIs in
>>> general to catch exceptions, store them and offer a getLastError() method
>>> to get them (see
>>> http://extensions.xwiki.org/xwiki/bin/view/Extension/Script+Module#HBestPractices
>>> )
>>>>>>>> 
>>>>>>>> However it would be much nicer to:
>>>>>>>> * Let our script services generate exceptions
>>>>>>>> * Offer a velocity script service to get the last exception raised
>>> by a java call from velocity
>>>>>>>> * Implement this uberspector to catch the exceptions and to set them
>>> in the execution context
>>>>>>>> 
>>>>>>>> That should be quite easy to implement IMO.
>>>>>>>> 
>>>>>>>> WDYT?
>>>>>>>> 
>>>>>>>> Thanks
>>>>>>>> -Vincent
>>>>>>>> 
>>>>>>>> PS: This is http://jira.xwiki.org/browse/XWIKI-2374

_______________________________________________
devs mailing list
devs@xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to