ScriptEngineFactory implementations should declare their threading support
--------------------------------------------------------------------------
Key: SLING-1975
URL: https://issues.apache.org/jira/browse/SLING-1975
Project: Sling
Issue Type: Improvement
Components: Scripting
Affects Versions: Scripting Java 2.0.0, Scripting JavaScript 2.0.10,
Scripting JSP 2.0.14
Reporter: Felix Meschberger
Assignee: Felix Meschberger
Fix For: Scripting JSP 2.0.16, Scripting JavaScript 2.0.12,
Scripting Java 2.0.2
Our main script engines should declare in their ScriptEngineFactory
implementations their behaviour with respect to multi thread as described in
Section SCR.4.3.5.2 Metadata Methods of the JSR-223 Java Script API
specification:
Multithreaded Engine
Multi-threaded Evaluation - The implementation of the API and the engine itself
are capable of supporting concurrent evaluations by multiple threads on a
single engine instance. However the exact behavior of such concurrent execution
is ultimately determined by the script or scripts themselves. An engine which
supports concurrent execution is "multi-threaded" in the same sense that the
Java language is "multi-threaded": Evaluation by concurrent threads is allowed
and produces side effects that can be seen by other threads. The threads may
interact or not interact, utilize synchronization or not utilize
synchronization, in scripting language dependent ways.
Thread-Isolated Engine
Satisfies the requirements for Multithreaded. Also, the side-effects for
threads are isolated from one another. Specifically, the isolation limits the
visibility of changes to the state of variables in the engine scope of the
interpreter. Each thread will effectively have its own thread-local engine
scope for the engine instance. Note that this does not limit the visibility of
side effects outside the engine scope - for example, mutation of
application-level Java objects.
Stateless Engine
Satisfies the requirements for Thread-Isolated. In addition, the mappings in
the Bindings used as the engine scope of the ScriptEngine are not modified by
any ScriptExecution. The keys in the Bindings and their associated values are
exactly the same before and after each script execution.
>From this description, I would say :
JavaScript is Multithreaded because as of SLING-1972 the variables are
written back to the Engine scope bindings of the ScriptEngine instance (to
support the SLING-1111 use case)
JSP is state less because the Engine scope bindings are not modified by the
ScriptEngine
Java is state less because the Engine scope bindings are not modified by the
ScriptEngine
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira