[
https://issues.apache.org/jira/browse/JEXL-255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16385726#comment-16385726
]
Henri Biestro commented on JEXL-255:
------------------------------------
New commit; separated cancellation and interruption. The 'cancelled' property
is global to the script, the 'interrupted' flag local to a thread.
Should perform as intended, sorry for the mishap (do *not* commit late on
Sundays :-) ).
> 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)