Page 1 of 1

OpenWebstart on Mac OSX and Temurin17; --add-exports Problem

Posted: 01 Aug 2023, 10:38
by mredeker
We have an issue using latest OpenWebstart version on Mac OSX with Temurin17.
For our Swing Look&Feel we add multiple "--add-exports" and "--add-reads" to the JNLP file which is working fine with Windows and Temurin17.
But on Mac OSX it looks like that Temurin17 is not using those parameters.

The OpenWebstart log shows the following info:
[ITW-CORE][2023-07-20 18:12:53.420 MESZ][INFO ][com.openwebstart.launcher.OwsJvmLauncher] About to launch process with command:
/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home/bin/java -Xbootclasspath/a:/Applications/OpenWebStart/openwebstart.jar --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED,java.desktop --add-exports=java.base/jdk.internal.util.jar=ALL-UNNAMED,java.desktop --add-exports=java.base/com.sun.net.ssl.internal.ssl=ALL-UNNAMED,java.desktop --add-reads=java.naming=ALL-UNNAMED,java.desktop --add-exports=java.desktop/sun.awt.X11=ALL-UNNAMED,java.desktop --add-exports=java.desktop/sun.applet=ALL-UNNAMED,java.desktop,jdk.jsobject --add-exports=java.base/sun.security.action=ALL-UNNAMED,java.desktop --add-reads=java.base=ALL-UNNAMED,java.desktop --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED,java.desktop --add-exports=java.naming/com.sun.jndi.toolkit.url=ALL-UNNAMED,java.desktop --add-exports=java.base/sun.security.util=ALL-UNNAMED,java.desktop --add-reads=java.desktop=ALL-UNNAMED,java.naming --add-exports=java.desktop/sun.awt=ALL-UNNAMED,java.desktop --add-exports=java.base/sun.security.x509=ALL-UNNAMED,java.desktop --add-exports=java.desktop/javax.jnlp=ALL-UNNAMED,java.desktop --add-exports=java.base/sun.security.provider=ALL-UNNAMED,java.desktop --add-exports=java.base/sun.security.validator=ALL-UNNAMED,java.desktop net.sourceforge.jnlp.runtime.Boot -Xnofork /Users/jacky/Downloads/Installation Mig/NEO-Mig/launch NEO Mig.jnlp
You can see that the correct Java version is used and also all "--add-exports" are used when launching the client.
But in our client application log we see the following error:
Caused by: java.lang.IllegalAccessError: class de.javasoft.plaf.synthetica.SyntheticaLookAndFeel (in unnamed module @0x4b9986d1) cannot access class sun.swing.DefaultLookup (in module java.desktop) because module java.desktop does not export sun.swing to unnamed module @0x4b9986d1
at de.javasoft.plaf.synthetica.SyntheticaLookAndFeel.initialize(SyntheticaLookAndFeel.java:683)
Anybody an idea what could be the problem or where I can post this issue for the Temurin team?

Thanks,
-Marcus

Re: OpenWebstart on Mac OSX and Temurin17; --add-exports Problem

Posted: 01 Aug 2023, 13:44
by Janak Mulani
Did you try wih any other JVM (Oracle etc)?

Are you able to run the same app in stand alone mode on Mac by putting the downloaded jar files on the classpath. and starting the app using Temurin java 17?

Can you please send the OWS log of when the jnlp app runs successfully on windows and when the same jnlp app fails on Mac?

Re: OpenWebstart on Mac OSX and Temurin17; --add-exports Problem

Posted: 03 Aug 2023, 16:10
by msc
Have you tried adding "--add-exports=java.desktop/sun.swing=ALL-UNNAMED" to the list?

Re: OpenWebstart on Mac OSX and Temurin17; --add-exports Problem

Posted: 07 Aug 2023, 11:09
by mredeker
Hi guys, thanks for your feedback.

When testing with Oracle JDK17, I realized that it did not work either and took a deeper look when comparing the 2 logfiles.
I realized that not all "-add-exports=..." that we had defined showed up when using Mac, but they did with Windows.

We are using the JNLP feature with the <resource arch="..."> tag to define extra JVM parameter based on the client architecture.
The needed "--add-exports=..." were only defined for "arch=x86_64" and "arch=amd64".
We tested with an Intel based Mac which should be recognized from OpenWebstart as "x86_64" and an Apple Silicon Mac.
Both did not receive the additional JVM parameter.

After adding the needed parameters to the architectures "x86" and "i386" and also adding the architecture "aarch64" evertyhing is working :)
So for us the problem is solved.

There might be an issue on how OpenWebstart is resolving the architecture since the Mac with Intel chip is "x86_64" but was found as "x86".

Re: OpenWebstart on Mac OSX and Temurin17; --add-exports Problem

Posted: 08 Aug 2023, 10:53
by Janak Mulani
Thanks for reporting. We will investigate.

Re: OpenWebstart on Mac OSX and Temurin17; --add-exports Problem

Posted: 08 Sep 2023, 18:37
by Janak Mulani
I tried with the following jnlp file and it works ok om Mac OS X with arch x86_64:

Code: Select all

?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://192.168.2.104:8080/jnlp">
    <information>
        <title>JVM Args</title>
        <vendor>Karakun AG</vendor>
        <offline-allowed/>
    </information>
    <security>
        <all-permissions/>
    </security>
    <resources os="Windows 11" arch="amd64">
        <j2se version="17*"  java-vm-args=" -Xmx512m -Xms128m"/>
    </resources>
    <resources os="Mac OS X" arch="x86_64">
        <j2se version="17*"  java-vm-args=" -Xmx1024m -Xms64m"/>
    </resources>
    <resources>
        <jar href="generated-jars/jvm_args.jar"/>
    </resources>
    <application-desc main-class="com.karakun.ows.jvm_args.Form"/>
</jnlp>
For the above Jnlp file, correct vm args are picked up when running on Windows and Mac.

Can you please send me a sample Jnlp file like the above which I can use to reproduce your issue?

Re: OpenWebstart on Mac OSX and Temurin17; --add-exports Problem

Posted: 19 Oct 2023, 15:53
by mredeker
The problem was that my Intel based Mac picked up the parameters from <resources arch="x86"> even though it is a "x86_64" architecture.
Here is a snippet of the NOT working file.

Code: Select all

  <resources arch="x86">
      <java version="1.8*" vendor="Eclipse Adoptium" initial-heap-size="512m" max-heap-size="1024m" />
      <java version="11*" vendor="Eclipse Adoptium" initial-heap-size="512m" max-heap-size="1024m" />
      <java version="17*" vendor="Eclipse Adoptium" initial-heap-size="512m" max-heap-size="1024m" />
  </resources>
  <resources arch="i386">
      <java version="1.8*" vendor="Eclipse Adoptium" initial-heap-size="512m" max-heap-size="1024m" />
      <java version="11*" vendor="Eclipse Adoptium" initial-heap-size="512m" max-heap-size="1024m" />
      <java version="17*" vendor="Eclipse Adoptium" initial-heap-size="512m" max-heap-size="1024m" />
  </resources>
  <resources arch="amd64">
      <java version="1.8*" vendor="Eclipse Adoptium"/>
      <java version="11*" vendor="Eclipse Adoptium" />
      <java version="17*" vendor="Eclipse Adoptium" java-vm-args="--add-exports=java.desktop/sun.swing=ALL-UNNAMED --add-exports=java.desktop/sun.swing.table=ALL-UNNAMED --add-exports=java.desktop/sun.swing.plaf.synth=ALL-UNNAMED --add-opens=java.desktop/javax.swing.plaf.synth=ALL-UNNAMED --add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED --add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.desktop/javax.swing.tree=ALL-UNNAMED --add-opens=java.desktop/java.awt.event=ALL-UNNAMED --add-exports=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED --add-exports=java.desktop/sun.awt.shell=ALL-UNNAMED --add-exports=java.base/sun.security.action=ALL-UNNAMED --add-exports=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.desktop/java.beans=ALL-UNNAMED" />
  </resources>
  <resources arch="x86_64">
      <java version="1.8*" vendor="Eclipse Adoptium"/>
      <java version="11*" vendor="Eclipse Adoptium" />
      <java version="17*" vendor="Eclipse Adoptium" java-vm-args="--add-exports=java.desktop/sun.swing=ALL-UNNAMED --add-exports=java.desktop/sun.swing.table=ALL-UNNAMED --add-exports=java.desktop/sun.swing.plaf.synth=ALL-UNNAMED --add-opens=java.desktop/javax.swing.plaf.synth=ALL-UNNAMED --add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED --add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.desktop/javax.swing.tree=ALL-UNNAMED --add-opens=java.desktop/java.awt.event=ALL-UNNAMED --add-exports=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED --add-exports=java.desktop/sun.awt.shell=ALL-UNNAMED --add-exports=java.base/sun.security.action=ALL-UNNAMED --add-exports=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.desktop/java.beans=ALL-UNNAMED" />
  </resources>
You can see that the "x86" architecture did not have the extra "java-vm-args" but the "x86_64" did have them.
But it did not work with Java17 on my Mac. Only after I added the extra "java-vm-args" also to the "x86" section it did work.

Re: OpenWebstart on Mac OSX and Temurin17; --add-exports Problem

Posted: 31 Oct 2023, 08:35
by Janak Mulani
Ok Thanks for the sample. I will try to reproduce it.

Re: OpenWebstart on Mac OSX and Temurin17; --add-exports Problem

Posted: 10 Nov 2023, 14:34
by Janak Mulani
I am able to reproduce the problem on Intel Mac with the following Jnlp file:

Code: Select all

...
    <resources arch="x86">
        <java version="17*" vendor="Eclipse Adoptium" initial-heap-size="511m" max-heap-size="1023m" />
		<jar href="generated-jars/jvm_args.jar"/>
    </resources>

    <resources arch="x86_64">
		<java version="17*" vendor="Eclipse Adoptium" java-vm-args="--add-exports=java.desktop/sun.swing=ALL-UNNAMED --add-exports=java.desktop/sun.swing.table=ALL-UNNAMED --add-exports=java.desktop/sun.swing.plaf.synth=ALL-UNNAMED --add-opens=java.desktop/javax.swing.plaf.synth=ALL-UNNAMED --add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED --add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.desktop/javax.swing.tree=ALL-UNNAMED --add-opens=java.desktop/java.awt.event=ALL-UNNAMED --add-exports=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED --add-exports=java.desktop/sun.awt.shell=ALL-UNNAMED --add-exports=java.base/sun.security.action=ALL-UNNAMED --add-exports=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.desktop/java.beans=ALL-UNNAMED" />
	    <jar href="generated-jars/jvm_args.jar"/>
    </resources>
	
    <application-desc main-class="com.karakun.ows.jvm_args.Form"/>
</jnlp>
Happens with Java 11 too.

Re: OpenWebstart on Mac OSX and Temurin17; --add-exports Problem

Posted: 22 Nov 2023, 13:36
by Janak Mulani
Hi

The order in which the resources are specified matters. If you switch the order of x86 and x86_64 as follows it will pick up vmargs for x86_64:

Code: Select all

    <resources arch="x86_64">
		<java version="17*" vendor="Eclipse Adoptium" java-vm-args="--add-exports=java.desktop/sun.swing=ALL-UNNAMED .../>
	    <jar href="generated-jars/jvm_args.jar"/>
    </resources>

<resources arch="x86">
        <java version="17*" vendor="Eclipse Adoptium" initial-heap-size="511m" max-heap-size="1023m" />
		<jar href="generated-jars/jvm_args.jar"/>
    </resources>

Re: OpenWebstart on Mac OSX and Temurin17; --add-exports Problem

Posted: 05 Dec 2023, 08:53
by mredeker
Thanks for the info.
Since I added the extra params to all architecture, the problem was solved that way :)