Does Nashorn (org.openjdk.nashorn) have any support for Java 17?

Attila Szegedi szegedia at gmail.com
Mon Jun 28 22:37:56 UTC 2021


> On 2021. Jun 28., at 19:30, Remi Forax <forax at univ-mlv.fr> wrote:
> 
> 
> In the meantime, I think you can use Lookup.defineClass() or do you rely on the weird security model of the anonymous classes ?

Thankfully, no. Nashorn regenerates code for the same function sometimes so it was convenient having old versions get garbage collectible when they were individual anonymous classes; not being registered with class loader didn’t make their reachability dependent on one another. I could simulate it with one class loader per generated class; but it’ll cause a bit of a proliferation of class loader objects. Anon classes were just convenient in this regard.

IIUC Lookup.defineClass() doesn’t help me with that. Does it have some benefits over defining a class through a class loader?

Attila.

> 
>> 
>> Hope this helps,
>> Attila.
> 
> Rémi
> 
>> 
>> [0] https://mail.openjdk.java.net/pipermail/core-libs-dev/2021-May/077347.html
>> 
>> 
>>> On 2021. Jun 28., at 18:24, Greg Watts <gwatts at us.ibm.com> wrote:
>>> 
>>> 
>>> Dear Nashorn development team,
>>> 
>>> I am trying to run an ANT build of our product using
>>> nashorn-core:15.1.1.jar with Java 17 (pre-release - build 27) and I get:
>>> 
>>> BUILD FAILED
>>> java.lang.ExceptionInInitializerError
>>>   at
>>> org.openjdk.nashorn.internal.runtime.Context.compile(Context.java:1509)
>>>   at
>>> org.openjdk.nashorn.internal.runtime.Context.compileScript(Context.java:1449)
>>>   at
>>> org.openjdk.nashorn.internal.runtime.Context.compileScript(Context.java:759)
>>>   at
>>> org.openjdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:528)
>>>   at
>>> org.openjdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:517)
>>>   at
>>> org.openjdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:395)
>>>   at
>>> org.openjdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:151)
>>>   at
>>> java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:262)
>>>   at
>>> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
>>> Method)
>>>   at
>>> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
>>>   at
>>> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>   at java.base/java.lang.reflect.Method.invoke(Method.java:568)
>>>   at org.apache.tools.ant.util.ReflectUtil.invoke(ReflectUtil.java:108)
>>>   at
>>> org.apache.tools.ant.util.ReflectWrapper.invoke(ReflectWrapper.java:81)
>>>   at
>>> org.apache.tools.ant.util.optional.JavaxScriptRunner.evaluateScript(JavaxScriptRunner.java:103)
>>>   at
>>> org.apache.tools.ant.util.optional.JavaxScriptRunner.executeScript(JavaxScriptRunner.java:67)
>>>   at
>>> org.apache.tools.ant.taskdefs.optional.Script.execute(Script.java:52)
>>>   at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
>>>   at jdk.internal.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
>>>   at
>>> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>   at java.base/java.lang.reflect.Method.invoke(Method.java:568)
>>>   at
>>> org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
>>>   at org.apache.tools.ant.Task.perform(Task.java:348)
>>>   at org.apache.tools.ant.Target.execute(Target.java:392)
>>>   at org.apache.tools.ant.Target.performTasks(Target.java:413)
>>>   at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
>>>   at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
>>>   at
>>> org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
>>>   at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
>>>   at org.apache.tools.ant.Main.runBuild(Main.java:811)
>>>   at org.apache.tools.ant.Main.startAnt(Main.java:217)
>>>   at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
>>>   at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
>>> Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: no
>>> such method:
>>> sun.misc.Unsafe.defineAnonymousClass(Class,byte[],Object[])Class/invokeVirtual
>>>   at org.openjdk.nashorn.internal.runtime.Context
>>> $AnonymousContextCodeInstaller.lambda$getDefineAnonymousClass
>>> $0(Context.java:335)
>>>   at
>>> java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
>>>   at org.openjdk.nashorn.internal.runtime.Context
>>> $AnonymousContextCodeInstaller.getDefineAnonymousClass(Context.java:327)
>>>   at org.openjdk.nashorn.internal.runtime.Context
>>> $AnonymousContextCodeInstaller.<clinit>(Context.java:317)
>>>   ... 33 more
>>> Caused by: java.lang.NoSuchMethodException: no such method:
>>> sun.misc.Unsafe.defineAnonymousClass(Class,byte[],Object[])Class/invokeVirtual
>>>   at
>>> java.base/java.lang.invoke.MemberName.makeAccessException(MemberName.java:976)
>>>   at java.base/java.lang.invoke.MemberName
>>> $Factory.resolveOrFail(MemberName.java:1117)
>>>   at java.base/java.lang.invoke.MethodHandles
>>> $Lookup.resolveOrFail(MethodHandles.java:3643)
>>>   at java.base/java.lang.invoke.MethodHandles
>>> $Lookup.findVirtual(MethodHandles.java:2680)
>>>   at org.openjdk.nashorn.internal.runtime.Context
>>> $AnonymousContextCodeInstaller.lambda$getDefineAnonymousClass
>>> $0(Context.java:329)
>>>   ... 36 more
>>> Caused by: java.lang.NoSuchMethodError: 'java.lang.Class
>>> sun.misc.Unsafe.defineAnonymousClass(java.lang.Class, byte[],
>>> java.lang.Object[])'
>>>   at java.base/java.lang.invoke.MethodHandleNatives.resolve(Native
>>> Method)
>>>   at java.base/java.lang.invoke.MemberName
>>> $Factory.resolve(MemberName.java:1085)
>>>   at java.base/java.lang.invoke.MemberName
>>> $Factory.resolveOrFail(MemberName.java:1114)
>>>   ... 39 more
>>> 
>>> 
>>> So I was curious to know please if Nashorn will be supported in Java 17,
>>> and if so, when you might anticipate that to be released (ballpark
>>> estimate)?
>>> 
>>> 
>>> Greg Watts
>>> WebSphere Zombie Apocalypse Team
>>> External: 507-253-8901
>>> email: gwatts at us.ibm.com
>>> 
>>> "Take risks:  if you win, you will be happy; if you lose, you will be wise"
>>> - Unknown



More information about the nashorn-dev mailing list