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

Henri Biestro commented on JEXL-99:
-----------------------------------

Thank you for pointing out the obsolete example; I'll update those momentarily. 
Till then, the test sources might be better examples.

Regarding thread-safety; a JEXL instance can be used as a singleton - they way 
it used to be in JEXL 1.x -, its exposed methods are thread-safe (besides when 
stating they are not) and common usage is to use one shared JexlEngine instance.
Btw, setting a cache - JexlEngine.setCache(...) - during the engine 
initialization is also usually a good practice.

A typical initialization example for your case should likely be:
{code}
private static final JexlEngine jexl = new JexlEngine();
static {
   jexl.setCache(512);
   jexl.setLenient(false);
   jexl.setSilent(false);
}
{code}

About setLenient / setSilent;
- lenient/strict tells whether 'null' is a valid operand or not, ie what is 
considered an error
- silent/verbose drives whether errors are logged (as warnings) or reported as 
JexlExcepttion (runtime exceptions), ie what should be done with errors
I gather that 
http://commons.apache.org/jexl/apidocs/org/apache/commons/jexl2/JexlEngine.html 
javadoc is not clear enough on the topic.





> Documentation of Thread Safety / Invalid code examples on homepage
> ------------------------------------------------------------------
>
>                 Key: JEXL-99
>                 URL: https://issues.apache.org/jira/browse/JEXL-99
>             Project: Commons JEXL
>          Issue Type: Task
>    Affects Versions: 2.0
>            Reporter: Marcel Schoen
>            Priority: Minor
>
> I had trouble with a custom method invoked in a JEXL script. This method 
> throws a RuntimeException, which got swallowed with JEXL 2. Using the 
> debugger, I found the "strict" flag of the Interpreter to be false, even 
> though I had invoked "JexlEngine.setLenient(false)" in my initialization code.
> Now I suspect my initialization logic to be faulty, but while I looked into 
> this, I realized that the javadoc of JexlEngine doesn't really tell me if I 
> can use it as a singleton or not (or if I should, for that matter). If so, 
> are its various methods thread-safe or not? It only says so for a few methods 
> like "setDebug()".
> In addition, some code examples on the homepage are heavily outdated. For 
> example, the first code fragment on this page
> http://commons.apache.org/jexl/reference/examples.html
> shows the usage of a class "ExpressionFactory" which doesn't even exist in 
> the JEXL 2 source tree. Of course it would be nice if these examples would 
> show how to correctly use "JexlEngine", for instance.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to