I figured out what the problem is. Here is my Javascript callback function, simplified:
stream.create().memoryGroup("queues", "name").onCreate(function (memoryGroup, key) { stream.create().memory(key); print("Add:"+ key+"="+stream.memory(key)); }); The “stream” variable is set in the bindings before evaluating the script: ScriptContext newContext = new SimpleScriptContext(); streamContext.engineScope = newContext.getBindings(ScriptContext.ENGINE_SCOPE); streamContext.engineScope.put("stream", streamContext.stream); Now, the first statement in the function accesses: com.swiftmq.impl.streams.Stream@47273fd1 But the second statement (print) has a different “stream” instance: com.swiftmq.impl.streams.Stream@6222f856 That’s why I’m not getting data set in the “stream” because they are different instances. Seems like a binding issue. How can this happen? -- Andreas Mueller IIT Software GmbH http://www.swiftmq.com > On 12.01.2017, at 11:13, Sundararajan Athijegannathan > <sundararajan.athijegannat...@oracle.com> 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. >> >> 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.