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.