You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Bertrand Delacretaz (JIRA)" <ji...@apache.org> on 2009/09/16 11:42:58 UTC
[jira] Issue Comment Edited: (SLING-1111) RhinoJavaScriptEngine
does not preserve scope between eval()s
[ https://issues.apache.org/jira/browse/SLING-1111?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12755960#action_12755960 ]
Bertrand Delacretaz edited comment on SLING-1111 at 9/16/09 2:42 AM:
---------------------------------------------------------------------
Just a minor comment about your patch, we usually don't do @author tags...mainly to avoid people contacting you privately when they read the code later ;-)
Apart from that the patch looks ok to me - I'm no expert in Rhino scopes, but it makes sense to couple the scope to a given engine.
That's assuming each Sling request gets a new engine...do we have tests that demonstrate that?
was (Author: bdelacretaz):
Just a minor comment about your patch, we usually don't do @author tags...mainly to avoid people contacting you privately when the read the code later ;-)
Apart from that the patch looks ok to me - I'm no expert in Rhino scopes, but it makes sense to couple the scope to a given engine.
That's assuming each Sling request gets a new engine...do we have tests that demonstrate that?
> RhinoJavaScriptEngine does not preserve scope between eval()s
> -------------------------------------------------------------
>
> Key: SLING-1111
> URL: https://issues.apache.org/jira/browse/SLING-1111
> Project: Sling
> Issue Type: Bug
> Components: Scripting
> Affects Versions: Scripting JavaScript 2.0.4
> Reporter: Vidar S. Ramdal
> Fix For: Scripting JavaScript 2.0.6
>
> Attachments: SLING-1111.patch
>
>
> The RhinoJavaScriptEngine does not preserve it scope, so that the scope is reset between each call to eval().
> So that:
> RhinoJavaScriptEngineFactory factory = new RhinoJavaScriptEngineFactory();
> ScriptEngine engine = factory.getScriptEngine();
> engine.eval("var f = 1");
> engine.eval("f += 1");
> ... fails with a "ReferenceError: "f" is not defined"
> The problem seems to be that "scope" is a local variable in RhinoJavaScriptEngine.eval(), while it should have been a class field.
> I have prepared a patch and a test (coming up), but I'm not familiar with the script engine code, so the fix might very likely break other stuff.
> So please review this.
> More background: http://www.coderanch.com/t/460570/Other-JSE-JEE-APIs/java/javax-script-Save-state-scope
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.