quinta-feira, dezembro 16, 2004

Debuggar aplicações WEB remotamente com Eclipse e Tomcat

O Servidor Tomcat possibilita que você faça debug das aplicações sem precisar rodar localmente, para isto é necessário habilitar o JPDA.

Você sabe o que é JPDA?

JPDA (Java Plataform Debugger Architecture) prove uma infra-estrutura necessária para você criar um debugger para aplicações J2SE.

Ela inclui 3 níveis de API:
  • - Java Debug Interface (JBI), interface da linguagem de alto nível para programação, incluindo suporte para debugging remoto.
  • - Java Debug Wire Protocol (JDWP), o qual define o formato das informações e requisições transferidas entre o processo de debugging e a tela do debugger.
  • - A JVM Tools Interface (JVM TI). Esta que é a interface nativa que define os serviços que a JVM fornece para as ferramentas, incluindo o debugging.
Mas o nosso foco é no debugging remoto, e como as aplicações se comunicarão?

Quando a JVM é configurada para rodar com o JPDA, ela cria um servidor que fica escutando em um "port" definido em sua inicialização.
O Eclipse lhe possibilita criar uma chamada a este servidor para trocar informações entre as JVM's e assim conseguir debugar uma aplicação utilizando a fonte em sua máquina e a aplicação rodando no servidor.

Mas como configurar o servidor?

Estas configurações funcionam perfeitamente no Tomcat 4.1 e no 5.0, para isto é necessário configurar o Tomcat para rodar em Debug mode. É necessário informar alguns parâmetros para a execução do Tomcat, estes parâmetros são:

transport - que pode ter o valor "dt_socket" ou "dt_shmem", onde:
"dt_socket" tem as chamadas através de socket
"dt_shmem" é feito por compartilhamento de memória e funciona apenas no Windows.

address - onde é informado o valor do "port" para comunicação


Existem duas formas de informá-las:

1 - Procurando no arquivo TOMCAT_HOME/bin/catalina.bat no caso do windows e

TOMCAT_HOME/bin/catalina.sh no linux e trocando para os valores:

transport=dt_socket
address=5000 (Definido o "port" para 5000, mas pode ser colocado em qualquer um que não haja conflito)

2 - Colocando como variáveis de ambiente do sistema operacional, sendo definido o tipo e seu valor:

No Windows 2000:
  • a - Clique com o botão direito no ícone "Meu Computador"
  • b - Clique na aba "Avançado" e no botão "Variáveis de Ambiente"
  • c - Clique em novo e na janela que se abre, coloque:
    - Tipo: JPDA_TRANSPORT
    - Valor: dt_socket
  • d - Clique em Ok.
  • e - Repita o passo C com os valores:
    - Tipo: JPDA_ADDRESS
    - Valor: 5000
  • f - Feche todas as janelas clicando em OK.

No Linux:
  • a - Edite o arquivo dentro do seu HOME, .bashrc e inclua as duas linhas
    export JPDA_TRANSPORT=dt_socket
    export JPDA_ADDRESS=5000
  • b - Salve, feche e abra novamente a janela do terminal.


Agora precisa fazer com que o Tomcat rode em debug mode, para isto eu achei mais simples ir até o arquivo TOMCAT_HOME/bin/catalina.bat no caso do windows e TOMCAT_HOME/bin/catalina.sh no linux, procurar a linha que contém:
JPDA=


e trocá-la para:
JPDA=jpda


Depois rodar o servidor normalmente utilizando o arquivo de lote ou batch:
startup.bat/startup.sh

Você pode verificar com o comando netstat -a (no caso do Windows) para saber se o porto está aberto.

Agora como acesso com o Eclipse?

Para acessar o servidor JPDA no Eclipse, basta ir ao menu Run->Debug...

Selecione o item de Configuração "Remote Java Application".

Clique no botão "New"

Na aba "Connect", selecione o projeto onde tem as fontes no campo "Project"
No campo "Connection Type" mantenha "Standard (Socket Attach)"
Em "Connection Properties" coloque em "Host" o nome do servidor onde está o Tomcat e em "Port" o valor colocado na variável ADDRESS.

Depois clique na aba "Source" e selecione a pasta onde tem suas fontes, pesquisando dentro da pasta Default. é importante que esteja selecionado a pasta do projeto onde tem as fontes, pois se manter na pasta "Default" não será encontrado seus fontes.

Por fim, clique em "Debug" e veja na sua perspectiva de Debug do Eclipse que o serviço está rodando.
Coloque um Breakpoint em sua fonte e faça uma chamada, assim você verá as requisições passar pela sua máquina antes de retornar a requisição ao cliente.

:D

As configurações aqui explicadas são para o servidor Tomcat, é possível configurar para demais servidores, para isto eu aconselho a procurar como fazê-lo para seu servidor.
As informações aqui colocadas foram tiradas de pesquisa na Internet, do site da SUN e do que foi necessário fazer para que o processo funcionasse.

Alguns pontos ao qual seria boa alguma pesquisa:
- Como fazer para rodar o servidor em modo de debug como serviço do Windows?

Espero que vocês possam tirar bons proveitos

Para mais informações:
http://java.sun.com/products/jpda/

2 comentários:

Anônimo disse...

Sim, provavelmente por isso e

Orações e Novenas disse...

Fiz toda a configuração mas está dando erro "Failed to connect to remote VM. Connection refused." O que pode ser? Obrigada!