You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Dmitri Blinov (JIRA)" <ji...@apache.org> on 2018/03/05 06:41:00 UTC

[jira] [Comment Edited] (JEXL-255) Ability to continue interrupted scripts

    [ https://issues.apache.org/jira/browse/JEXL-255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16385649#comment-16385649 ] 

Dmitri Blinov edited comment on JEXL-255 at 3/5/18 6:40 AM:
------------------------------------------------------------

The test code I'm using is like this
{code:java}
@timeout(5) {sleep(10000); return 0}; return 42
{code}
At the moment the code returns neither 0 nor 42, but throws {{JexlException.Cancel}}
 The {{Context.processAnnotation()}} code correctly catches {{JexlException.Cancel}}
 exception that was thrown during {{sleep()}} invocation, and then returns null, since it was a timeout; The script nevertheless throws {{JexlException.Cancel}}
 at the end, once again. The expected behaviour is to return 42


was (Author: dmitri_blinov):
The test code I'm using is like this
{code}
@timeout(5) {sleep(10000); return 0}; return 42
{code}
At the moment the code returns neither 0 nor 42, but throws {{JexlException.Cancel}}
The {{Context.processAnnotation()}} code correctly catches {{JexlException.Cancel}}
exception that was thrown during {{sleep()}} invocation, and then returns null, since it was a timeout; The script nevertheless throws {{JexlException.Cancel}}
at the end, once again.


> Ability to continue interrupted scripts
> ---------------------------------------
>
>                 Key: JEXL-255
>                 URL: https://issues.apache.org/jira/browse/JEXL-255
>             Project: Commons JEXL
>          Issue Type: Improvement
>    Affects Versions: 3.1
>            Reporter: Dmitri Blinov
>            Assignee: Henri Biestro
>            Priority: Major
>             Fix For: 3.2
>
>
> I'm trying to implement the {{@timeout}} annotation that should work like the following
> {code:java}
> @timeout(15000) { return longrunningcall(); }
>  {code}
> The idea is to protect part of the script code from being executed indefinitely or more than allowed by business rules. The script should continue its evaluation after the {{@timeout}} annotation regardless of whether the timeout has taken place or not.
> There is a straightforward implementation that starts guarding thread which should invoke {{Thread.interrupt()}} for the thread executing the script. The {{InterruptedException | JexlException.Cancel}} is then caught and swallowed inside the {{processAnnotation()}} method, and if the guard thread has fired, which means the timeout occured, the {{null}} value is returned.
> I expected the script to continue its evaluation after the exception is processed inside {{processAnnotation()}} code, but the script nevertheless throwed {{JexlException.Cancel}} as a result. The suggestion is to allow script to continue its evaluation once {{InterruptedException}} or {{JexlException.Cancel}} is processed. 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)