Como eu posso depurar aplicativos em Java Web Start (JNLP)?
-
22-08-2019 - |
Pergunta
Eu sei como eu pode depurar um controle remoto Java VM com o Eclipse, mas como posso fazê-lo com um programa Java Web Start. Eu tenho um problema que só ocorre em Java Web Start. Deve estar relacionado a segurança.
Eu preciso de uma solução que irá trabalhar com uma corrente Java VM como 1.6.0_12.
Solução
É exatamente o mesmo como com qualquer outro processo de Java você deseja depurar remotamente: Você tem que configurar alguns argumentos para a VM (-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345
) e, em seguida, conectar-se à porta dada. Em Java WebStart 6.0 isso pode ser feito com a opção -J, na versão anterior através JAVAWS_VM_ARGS ambiente variáveis. Veja detalhes aqui .
Outras dicas
Inicie o JWS VM manualmente. Desta forma, você pode fornecer os parâmetros de arranque para abrir a porta de depuração. Aqui é um descrição , ele vai como esta:
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
Como para as versões mais recentes do Java (Java 8u20 + e Java 7u70 +) eu experimentei que parâmetros como -Xrunjdwp não pode ser passado diretamente nem usando JAVAWS_VM_ARGS.
mensagem
Rejecting attempt to specify insecure property: -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
começou a aparecer na saída do console.
A única solução que funcionou para mim foi passar esses argumentos na variável sistema JAVA_TOOL_OPTIONS.
Você também pode fornecer o parâmetro de depuração para os javaws executável usando a opção -J
Exemplo:
javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp
Você precisará fazer o seguinte:
-
Habilitar os logs de Java e rastreamento no Painel de Controle Java> Avançado.
-
Ativar parâmetros para a depuração Java (problemas opcionais, mas úteis, ou seja, com TLS / SSL handshake como close_notify ou handshake_failure) e lançar o JNLP, há duas maneiras que você pode fazê-lo:
2.a. Baixe o arquivo JNLP e executá-lo a partir da linha de comando (o comando
SET
não é necessária neste caso particular).set JAVA_TOOL_OPTIONS=-Djavax.net.debug=all javaws -wait jnlp.jnlp
2.b. Adicionar argumentos (ou seja
-Djavax.net.debug=all
) para a JVM no Painel de Controle Java> Java> Vista (isso não é necessário neste particular), e iniciar o arquivo JNLP do navegador: -
Os logs e rastreios estão localizados no diretório
log
do Java Deployment Início de onde eu colar estes locais:a. Windows XP:
%HOME%\Application Data\Sun\Java\Deployment
b. Windows 7 / Vista:
%APPDATA%\..\LocalLow\Sun\Java\Deployment
c. Linux / Solaris:
%HOME%/.java/deployment
Com javax.net.debug = tudo o que você vai ver o aperto de mão se o frasco dentro da jnlp é carregado a partir de uma conexão HTTPS. Este tipo de problemas são difíceis de depuração.
...
%% 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:
Com Java 8 e Windows 10, comando de abertura rápida (cmd.exe) e digite o seguinte:
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
Você tentou imprimir um log de depuração? Isso é uma coisa útil para ter de qualquer forma, e podem ajudar neste caso.
Se você quiser depuração real, ver por exemplo, aqui: Como posso depuração sob WebStart?
Para depurar um aplicativo Web Start no Linux, crie um shell script ~ / bin / javaws-debug.sh com a invocação javaws no modo de depuração, como descrito acima:
~ / 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 "$@"
Então, em seu navegador, escolha esse script como o aplicativo para invocar em arquivos JNLP.
Por exemplo, no Firefox, vá em Editar ? Preferências ? Aplicações, tipo de conteúdo: Java Web Start, e escolha "Use Outros" em ação e escolher o roteiro a partir do diálogo "Select aplicação auxiliar". No Chrome, você precisa alterar as configurações do sistema Linux. No KDE, vá para Configurações do sistema ? Associações de arquivo, tipos conhecidos: application: x-java-jnlp-file, adicionar um novo aplicativo, escolher ~ / bin / javaws-debug.sh da Aplicação "Escolha para application / x-java -jnlp-file" diálogo.
Uma vez que seu navegador está configurado, a aplicação Java Web Start vai começar a utilizar o seu invólucro, o que permitirá depurador para conectar na porta 8989.