If you face bugs due to sharing of compiled code within the same engine
instance, please do report with a test case.
-Sundar
On 12/01/17, 3:43 PM, Sundararajan Athijegannathan wrote:
Not sure what you mean by "engine is shared between scripts". Each
separate Nashorn ScriptEngine instance is isolated. Nothing is shared
across different script engine instances. There are no java level
"statics" (i.e., process wide globals) that cut across engine
instances. On the same engine, there is compiled code is shared
(.class and Class objects in some cases) when possible. That should
also not result in any issue (there may be bugs).
Hope I addressed your questions,
-Sundar
On 12/01/17, 1:42 PM, Andreas Mueller wrote:
Will do.
Can you tell me whether the engine is shared between scripts? Is
there a way to use one engine per script and to start absolute clean
(no caches, no refs from previous runs) just like when the JVM was
started?
Thanks,
Andreas
Am 12.01.2017 um 05:23 schrieb Sundararajan
Athijegannathan<sundararajan.athijegannat...@oracle.com>:
Will you please submit a bug with a compilable/runnable test case
attached?
Thanks,
-Sundar
On 11/01/17, 11:09 PM, Andreas Mueller wrote:
Hi,
it seems I have a problem understanding Nashorn’s bindings...
I have multiple scripts, each independent of each other. They
should run concurrently with their own context and engine scope
bindings. This is created as follows for each script:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName((String)
entity.getProperty("script-language").getValue());
if (engine == null)
throw new Exception("Engine for script-language '" +
entity.getProperty("script-language").getValue() + "' not found!");
ScriptContext newContext = new SimpleScriptContext();
streamContext.engineScope =
newContext.getBindings(ScriptContext.ENGINE_SCOPE);
Internally we have a Java-based processor which calls Javascript
functions (callbacks). It is always the same thread.
It works fine when I start a script the first time. If I stop it
(without stopping the JVM) and restart it (it runs through the code
above) or if I run another script concurrently, I’m getting
problems in so far that calls inside a Javascript callback to Java
objects that set data don’t work. The data is not null on the
Javascript callback but null inside the Java method.
Here is an example callback:
stream.create().memoryGroup("queues", "name").onCreate(function
(memoryGroup, key) {
stream.create().memory(key);
print("Add:"+ key+"="+stream.memory(key));
});
The above “stream.create().memory(key)” is a Java method that has a
printout:
AddMem: orderpos, mem=HeapMemory{name='orderpos’}
But when I retrieve it with "stream.memory(key)” in the print
statement of the Javascript function I’m getting:
Add:orderpos=null
For me this points to the bindings, e.g. a binding from a previous
running instance of the script or something else. Can somebody
provide some help? What do I need to do to have always a clean
instance of a binding when I rerun a script without stopping the JVM?
Thanks,
Andreas
IIT Software GmbH
Münsterstr. 111, 48145 Münster, Germany
Phone: +49 (0)2506 3049340
Managing Director: Andreas Müller
District Court: Amtsgericht Münster, HRB 16294
VAT-No: DE199945912
This e-mail may contain confidential and/or privileged information.
If you are not the intended recipient (or have received this e-mail
in error) please notify the sender immediately and destroy this
e-mail. Any unauthorized copying, disclosure or distribution of the
material in this e-mail is strictly forbidden.