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.

Foi útil?

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:

  1. Habilitar os logs de Java e rastreamento no Painel de Controle Java> Avançado. Painel de Controle Java: registros e rastreamento

  2. 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:

    Java Painel de Controle: argumentos JVM

  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top