[ 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)