Hi,
Good to know that you've spotted the issue and fixed it! Thanks for
informing us...
-Sundar
On 12/01/17, 8:01 PM, Andreas Mueller wrote:
So I wrote the test case! But I were not able to reproduce it - but
found a bug on my side! Forgot to remove a listener somewhere which
produced events on an old stream instance…
I’m developing since decades but still need to realize that there is
only a very little chance it is a JDK bug. It’s always my code! I need
to pin that mantra on my office wall. ;-)
So, thanks a lot for you help!
--
Andreas Mueller
IIT Software GmbH
http://www.swiftmq.com
On 12.01.2017, at 13:54, Sundararajan Athijegannathan
<sundararajan.athijegannat...@oracle.com
<mailto:sundararajan.athijegannat...@oracle.com>> wrote:
That does not give us much info. to debug the issue :( Please provide
us with a simple test case that reproduces the issue mentioned.
Thanks,
-Sundar
On 12/01/17, 5:02 PM, Andreas Mueller wrote:
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
<Mail Attachment.png>
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.
------------------------------------------------------------------------
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.