ejemplo - ¿Cómo puedo depurar aplicaciones bajo Java Web Start(JNLP)?
jnlp chrome (8)
¿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?
Sé cómo puedo depurar una máquina virtual Java remota con Eclipse, pero ¿cómo puedo hacerlo con un programa 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.
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
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.
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 description , 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
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.
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:
Habilite los registros y el seguimiento de Java en el Panel de control de Java> Avanzado.
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: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:
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 here .