¿Cómo puedo depurar aplicaciones bajo Java Web Start (JNLP)?

Sé cómo puedo depurar una máquina virtual Java remota con Eclipse, pero ¿cómo puedo hacerlo con un progtwig Java Web Start? Tengo un problema que solo ocurre en Java Web Start. Debe estar relacionado con la seguridad.

Necesito una solución que funcione con una máquina virtual Java actual, como 1.6.0_12.

    Es lo mismo que con cualquier otro proceso Java que quiera depurar de forma remota: debe configurar algunos argumentos para la VM ( -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345 ) y luego conectarse al puerto dado. En Java webstart 6.0, esto se puede hacer con la opción -J, en versiones anteriores a través de la variable de entorno JAVAWS_VM_ARGS. Ver detalles aquí .

    Inicie la máquina virtual JWS manualmente. De esta manera puede proporcionar los parámetros de inicio para abrir el puerto de depuración. Aquí hay una descripción , dice así:

     set JAVAWS_TRACE_NATIVE=1 set JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n" javaws http://server:port/descriptor.jnlp 

    En cuanto a las versiones más nuevas de Java (Java 8u20 + y Java 7u70 +), experimenté que los parámetros como -Xrunjdwp no se pueden pasar directamente ni usar JAVAWS_VM_ARGS. Rejecting attempt to specify insecure property: -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 mensaje Rejecting attempt to specify insecure property: -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 comenzó a aparecer en la salida de la consola.

    La única solución que funcionó para mí fue pasar esos argumentos a la variable de sistema JAVA_TOOL_OPTIONS.

    También puede proporcionar el parámetro de depuración al ejecutable de javaws utilizando la opción -J

    Ejemplo:

     javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp 

    Tendrá que hacer lo siguiente:

    1. Habilite los registros y el seguimiento de Java en el Panel de control de Java> Avanzado. Panel de control de Java: registros y seguimiento

    2. Habilite parámetros para depurar Java (opcional pero útil, es decir, problemas con tls / ssl handshake como close_notify o handshake_failure) y ejecute el JNLP, hay dos formas de hacerlo:

      2.a. Descargue el archivo JNLP y ejecútelo desde la línea de comandos (el comando SET no es necesario en este caso particular).

       set JAVA_TOOL_OPTIONS=-Djavax.net.debug=all javaws -wait jnlp.jnlp 

      2.b. Agregue argumentos (es decir, -Djavax.net.debug=all ) para la JVM en el Panel de control de Java> Java> Ver (esto no es obligatorio en este caso) y ejecute el archivo JNLP desde el navegador:

      Panel de control de Java: argumentos de jvm

    3. Los registros y los rastreos se encuentran en el directorio de log desde el inicio de implementación de Java desde donde pego estas ubicaciones:

      a. Windows XP: %HOME%\Application Data\Sun\Java\Deployment

      segundo. Windows 7 / Vista: %APPDATA%\..\LocalLow\Sun\Java\Deployment

      do. Linux / Solaris: %HOME%/.java/deployment

    Con javax.net.debug = todo, verá el apretón de manos si el contenedor dentro de jnlp se carga desde una conexión https. Este tipo de problemas son difíciles de depurar.

     ... %% No cached client session *** ClientHello, TLSv1.2 ... *** ... Java Web Start Main Thread, received EOFException: error Java Web Start Main Thread, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake Java Web Start Main Thread, SEND TLSv1.2 ALERT: fatal, description = handshake_failure Java Web Start Main Thread, WRITE: TLSv1.2 Alert, length = 2 Java Web Start Main Thread, called closeSocket() #### Java Web Start Error: 

    ¿Has intentado imprimir un registro de depuración? Eso es algo útil tener en cualquier caso, y podría ayudar en este caso.

    Si desea depuración real, consulte, por ejemplo: ¿Cómo puedo depurar en WebStart?

    Para depurar una aplicación Web Start en Linux, cree un script de shell ~ / bin / javaws-debug.sh con la invocación de javaws en modo de depuración como se describe arriba:

    ~ / bin / javaws-debug.sh:

     #!/bin/sh export JAVAWS_TRACE_NATIVE=1 export JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n" javaws "$@" 

    Luego, en su navegador, elija ese script como la aplicación para invocar en archivos jnlp.

    Por ejemplo, en Firefox, vaya a Edición → Preferencias → Aplicaciones, Tipo de contenido: Java Web Start, y elija “Usar otro” en Acción y elija el guión desde el cuadro de diálogo “Seleccionar aplicación auxiliar”. En Chrome, debe modificar la configuración del sistema Linux. En KDE, vaya a Configuración del sistema → Asociaciones de archivos, Tipos conocidos: aplicación: x-java-jnlp-file, agregue una nueva aplicación, elija ~ / bin / javaws-debug.sh desde “Elija aplicación para application / x-java -jnlp-file “diálogo.

    Una vez que su navegador esté configurado, la aplicación Java Web Start comenzará a usar su envoltorio, lo que permitirá que el depurador se conecte en el puerto 8989.

    Con Java 8 y Windows 10, abra el símbolo del sistema (cmd.exe) y escriba esto:

     set JAVAWS_TRACE_NATIVE=1 set JAVA_TOOL_OPTIONS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 javaws java-app.jnlp