[graalvm-users] Migrate from Nashhorn JSR 223 Scripting Engine to Graal

Andreas Woess andreas.woess at oracle.com
Fri Jun 22 06:10:37 PDT 2018


Hi Andreas,

Looks like either:
1. `interval` is not an int value (e.g. "3", 3.5, undefined, ...)
2. TimerCallback is not an interface annotated with @FunctionalInterface

Possible workarounds:
1. ensure interval is an integer value
e.g.: seconds(interval | 0)
2. onTimer({execute: function(timer){}})
(where execute is the name of the interface method)
or if possible, add @FunctionalInterface to the interface

Note that our implicit conversions may be too conservative in some 
cases. If you think there's a problem, let us know and we'll see what we 
can do.

- Andreas


On 22.06.18 14:05, Andreas Mueller wrote:
> Hi Christian,
>
> thanks. After adding the jars to the classpath, the engine was available.
>
> However, I’m getting this while evaluating a script:
>
> javax.script.ScriptException: org.graalvm.polyglot.PolyglotException: 
> TypeError: INVOKE on JavaObject[IntervalTimer{name='scheduler', 
> millis=0} (com.swiftmq.impl.streams.comp.timer.IntervalTimer)] failed 
> due to: UnsupportedTypeException
> at 
> com.oracle.truffle.js.scriptengine.GraalJSScriptEngine.eval(GraalJSScriptEngine.java:183)
> at 
> com.oracle.truffle.js.scriptengine.GraalJSScriptEngine.eval(GraalJSScriptEngine.java:155)
> at com.swiftmq.impl.streams.StreamController.evalScript(Unknown Source)
> at com.swiftmq.impl.streams.StreamController.start(Unknown Source)
>
> The script does this:
>
> stream.create().timer("scheduler").interval().seconds(interval).onTimer(function 
> (timer) {
> ...
> }
>
> The Java class “IntervalTimer” has this “seconds” and “onTimer" methods:
>
> public IntervalTimer seconds(int n) {
>     millis += (long) n * 1000L;
>     return this;
> }
>
>     @Override
>     public Timer onTimer(TimerCallback callback) {
>         this.callback = callback;
>         return this;
>     }
>
>
> Any hints?
>
> Thanks,
> Andreas
>
> -- 
> Andreas Mueller
> IIT Software GmbH
> http://www.swiftmq.com 
> <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.swiftmq.com&d=DwMFaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=CUkXBxBNT_D5N6HMJ5T9Z6rmvNKYsqupcbk72K0lcoQ&m=TP6vDFIvOwHIJubzP5a3mC1OLNpov_7VuXVjRKUILpY&s=9FM150Blv30fDT3EnnLT4BX13ZpAdhoPfJbyD5QbUwM&e=>
>
>
>
>> On 22 Jun 2018, at 09:48, Christian Wirth <christian.wirth at oracle.com 
>> <mailto:christian.wirth at oracle.com>> wrote:
>>
>> Hi Andreas,
>>
>> currently, we strongly endorse the use of GraalVM. That 
>> guarantees that you use Graal JavaScript with Graal as optimizing 
>> compiler.
>>
>> What you tried to achieve will work; note, however, that in such 
>> a setup (on JDK 8) Graal is NOT used as optimzing compiler 
>> (but HotSpot Server Compiler C2 is), thus the performance of 
>> Graal JavaScript will likely be much worse than it would be on GraalVM.
>>
>> Your commandline was probably missing 
>> the $GRAALVM/jre/lib/boot/graaljs-scriptengine.jar file? I am using 
>> a commandline like:
>>
>>    GRAALVM=/path/to/GraalVM
>>    /path/to/jdk8/bin/java 
>> -cp $GRAALVM/jre/languages/js/graaljs.jar:$GRAALVM/jre/lib/truffle/truffle-api.jar:$GRAALVM/jre/lib/boot/graal-sdk.jar:$GRAALVM/jre/lib/boot/graaljs-scriptengine.jar:$GRAALVM/jre/tools/regex/tregex.jar:. MyJavaApp
>>
>> In MyJavaApp, you can start Graal JavaScript via ScriptEngine; 
>> it registers under several names, including "graal.js". Again, 
>> note that performance will be suboptimal this way; use GraalVM for 
>> better results.
>>
>> For JDK 11 and beyond, you can execute Graal JavaScript with Graal as 
>> optimizing compiler on a stock JVM already. We are currently working 
>> on improved packaging/modularizing and should be able to publish some 
>> documentation on that in the coming weeks.
>>
>> Best,
>> Christian Wirth
>> Graal JavaScript team
>>
>>
>>
>>
>>> From: Andreas Mueller <am at iit.de <mailto:am at iit.de>>
>>> Subject: [graalvm-users] Migrate from Nashhorn JSR 223 Scripting 
>>> Engine to Graal
>>> Date: 18 June 2018 at 15:05:22 CEST
>>> To: graalvm-users at oss.oracle.com
>>>
>>> Hi,
>>>
>>> I was cold hitted by the announcement that Nashorn might be 
>>> deprecated in future. Since we have a lot JS scripts implemented 
>>> that run on the JVM and interact with Java very well, I need an 
>>> alternative JSR 223 JavaScript engine. So GraalVM comes to mind (and 
>>> is suggested).
>>>
>>> GraalVM seems to me a JDK replacement rather than a scripting 
>>> engine. I downloaded it but didn’t find a jar file (such as 
>>> graaljs.jar) that contains the JSR 223 engine and that I just add to 
>>> the classpath of a legacy JDK 1.8.x and then it is automatically 
>>> available when I list the engines.
>>>
>>> Can anybody tell me how I can achieve this?
>>>
>>> Thanks,
>>> Andreas
>>>
>>> -- 
>>> Andreas Mueller
>>> IIT Software GmbH
>>> http://www.swiftmq.com
>>>
>>> <swiftmq_logo_positiv.png>
>>>
>>>
>>>
>>> IIT Software GmbH
>>> Falkenhorst 11, 48155 Münster, Germany
>>> Phone: +49 (0)251 39 72 99 00
>>> 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.
>>> _______________________________________________
>>> GraalVM-Users mailing list
>>> GraalVM-Users at oss.oracle.com
>>> https://oss.oracle.com/mailman/listinfo/graalvm-users
>>
>> _______________________________________________
>> GraalVM-Users mailing list
>> GraalVM-Users at oss.oracle.com <mailto:GraalVM-Users at oss.oracle.com>
>> https://oss.oracle.com/mailman/listinfo/graalvm-users
>
>
>
> ------------------------------------------------------------------------
> IIT Software GmbH
> Falkenhorst 11, 48155 Münster, Germany
> Phone: +49 (0)251 39 72 99 00
> 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.
>
>
> _______________________________________________
> GraalVM-Users mailing list
> GraalVM-Users at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/graalvm-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://oss.oracle.com/pipermail/graalvm-users/attachments/20180622/5040d859/attachment-0001.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: swiftmq_logo_positiv.png
Type: image/png
Size: 10241 bytes
Desc: not available
Url : http://oss.oracle.com/pipermail/graalvm-users/attachments/20180622/5040d859/attachment-0001.png 


More information about the GraalVM-Users mailing list