Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

With Java 7 Update 45, the System Properties no Longer Set from JNLP Tag "Property"

Tags:

We run the application from the attached JNLP. On the Java console, we have output the system properties with D. The properties from our JNLP files are not set any more. This is the first Java version that we get this sort of problems with. Everything was working fine up to and including 7 Update 40.

We have all the jars signed but there are no security attributes in their manifests.

<?xml version="1.0" encoding="UTF-8"?>  <jnlp spec="1.0+" codebase="http://10.0.10.230/webstart/app" href="desktop.jnlp"> <information> <title>MyApp Desktop</title> <vendor>MyApp GmbH</vendor> <homepage href="http://www.myres-edv.de"/> <description>MyApp Desktop</description> <offline-allowed/> </information> <security> <all-permissions/> </security> <resources> <j2se version="1.5+" initial-heap-size="512M" max-heap-size="1024M" javaws-vm-args="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8200"/>   <property name="org.omg.CORBA.ORBInitialHost" value="10.0.10.230"/>               <property name="org.omg.CORBA.ORBServerHost" value="10.0.10.230" />  <property name="sun.net.spi.nameservice.provider.1" value="dns,sun" />  <property name="MyApp.baktswritedos" value="true"/>  <property name="MyApp.nocomm" value="true"/>  <property name="MyApp.la.erfassungdos" value="true"/>  <property name="com.sun.corba.ee.transport.ORBTCPConnectTimeouts" value="500:30000:40:30000" />  <property name="deployment.trace.level" value="all" />   <jar href="myresjar/ejb/myres/myres_ejb_client.jar" main="true" download="eager"/>  <jar href="myresjar/ejb/myres/myres_ejb.jar" download="eager"/>  <extension name="jars" href="commonejbjars.jnlp"/>  <extension name="jars" href="jr.jnlp"/>  <extension name="jars" href="commonjars.jnlp"/>  <extension name="jars" href="commonjh.jnlp"/>  <nativelib href="myresjar/ejb/myres/myres_dll.jar"/> </resources> <resources os="Windows">     <nativelib href="myresjar/myres/native-dlls.jar" download="eager"/> </resources> <application-desc main-class="de.myapp.gui.desktop.mainframe.DesktopMainFrame">    <argument>-serverIP=10.0.0.230</argument>     <argument>-initNewDayAction=true</argument>  </application-desc> </jnlp>     
like image 290
user2885888 Avatar asked Oct 16 '13 10:10

user2885888


People also ask

How do I set Java to default to JNLP?

In the top right corner of the Control Panel, select Category from the view by: pull down menu. Click the Programs link. Under Default Programs, click the Make a file type always open in a specific program link. Under the Name column, locate and select JNLP from the list of Extensions.

Is JNLP still supported?

Oracle has announced that Java Applet and WebStart functionality, including the Applet API, The Java plug-in, the Java Applet Viewer, JNLP and Java Web Start (containing the javaws tool) are all deprecated in JDK 9 and will be removed in a future release.

How do I fix a JNLP file?

Because JNLP files are program-specific, your computer may not properly recognize JNLP files to execute them using the Java Web Start application. If this happens, you need to modify your computer's file associations so that JNLP files open correctly with the Java Web Start application.

How do I enable JNLP files?

Select the 'Security tab', click the [Edit Site List] button, and add https://ecf.ca5.uscourts.gov/ to the Exception Site List. 4. Select the 'Advanced' tab, click the 'Always allow' radio button under JNLP File/MIME Association, and click [OK].


1 Answers

We experienced the same Problem with Java 7 Update 45 (1.7.0_45). The JNLP Spec gave a hint for a work-around:

Properties set in the jnlp file will normally be set by Java Web Start after the VM is started but before the application is invoked. Some properties are considered "secure" properties and can be passed as -Dkey=value arguments on the java invocation command line.

The following properties, as well as properties beginning with either "javaws." or "jnlp.", are considered "secure" and will be passed to the VM in this way: ...

While "insecure" properties stopped working, we realized that "secure" properties would still be set correctly. Maybe the mechanism that sets properties after the VM is started but before the application is invoked, got broken with this Java update, or maybe this was an intentional but undocumented change.

The work-around now depends on the type of system properties:

For system properties that affect Java behavior or libraries, we changed our code to call System.setProperty() at the application start instead of setting them in the JNLP.

For properties that we use to configure the application from the JNLP file, we added the jnlp. prefix so that they are passed correctly again.

<property name="myconfig" value="DE" /> 

to

<property name="jnlp.myconfig" value="DE" /> 

Edit: According to OpenJDK Bug JDK-8023821, the change was intentional:

Starting from 7u45 launch descriptor (JNLP file) need to be signed in order to set insecure system properties. So it is expected behaviour in 7u45... (from a comment)

Instructions for signing a JNLP.

like image 83
Michael Paesold Avatar answered Oct 11 '22 12:10

Michael Paesold