Depuradores - Notas sobre o Release

1.0 Introdução
2.0 Problemas Conhecidos
   2.1 Ambiente de Desenvolvimento da Web
   2.2 Depuração do WebSphere Application Server
   2.3 Depurador de JavaScript
   2.4 Depurador de Procedimento Armazenado SQL
   2.5 Ferramentas de Teste e de Implementação (Ferramentas do Servidor)
   2.6 Depurador JDT (Java Development Tools)
   2.7 Limitações do Idioma Nacional
   2.8 Depurador de Procedimento Armazenado SQL (Linux)
   2.9 Depurador SQLJ

1.0 Introdução

Os depuradores no WebSphere Studio fornecem as ferramentas necessárias para depurar aplicativos da Web, JavaScript do lado do servidor, Java, SQLJ, Procedimentos Armazenados de SQL e linguagens compiladas. Este arquivo leia-me descreve os problemas e limitações conhecidos que estão associados aos depuradores do WebSphere Studio.

2.0 Problemas Conhecidos

2.1 Ambiente de Desenvolvimento da Web

Depuração de JSP:

2.2 Depuração do WebSphere Application Server

2.3 Depurador de JavaScript

2.4 Depurador de Procedimento Armazenado SQL

2.5 Ferramentas de Teste e de Implementação (Ferramentas do Servidor)

Considere o seguinte, quando decidir executar um servidor no modo de depuração:

2.6 Depurador JDT (Java Development Tools)

Informações sobre os problemas e limitações conhecidos com as ferramentas de desenvolvimento Java estão disponíveis nas notas sobre o release de JDT (Java Development Tools) e do Workbench (IDE). Essas notas podem ser acessadas a partir de links do Leia-me principal do produto que foi instalado com este produto.

2.7 Limitações do Idioma Nacional

2.8 Depurador SQL Stored Procedure (Linux)

Quando você estiver depurando um SQL Stored Procedure em um banco de dados local, é possível receber o erro número SQL1224N:

COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1224N A database agent could not be started to service a request, or was terminated as a result of a database system shutdown or a force command. SQLSTATE=55032

Isso é devido a um problema no kernel do Linux (Bugzilla do kernel Linux bug #351). As instruções a seguir são uma solução alternativa que utiliza o método de conexão TCPIP do DB2 (como um loopback) em vez de CLI (Call Level Interface). Este procedimento permitirá que o depurador utilize o mesmo alias de banco de dados de antes.

  1. Se uma porta para clientes remotos de DB2 não tiver sido configurada, crie uma porta TCP/IP em /etc/services, (por exemplo, db2cdb2inst1 50000/tcp # porta de conexão do serviço DB2). Uma porta existente para clientes remotos DB2 pode ser utilizada.

    As etapas de 2 a 7 a seguir exigem que você efetue login como proprietário da instância do DB2.

  2. Configure o gerenciador do banco de dados para iniciar o gerenciador de conexão para o protocolo de comunicação TCP/IP. Se você não estiver certo sobre se isso já foi feito, emita o seguinte comando:
    db2set db2comm

    Se a saída não contiver a palavra-chave tcpip, você precisará inserir o seguinte comando para atualizar a variável do registro db2comm para incluir tcpip:

    db2set db2comm=<nomes de protocolos existentes>,tcpip

    A variável do registro db2comm determina qual gerenciador de conexão de protocolo será ativado quando o gerenciador do banco de dados for iniciado. Você pode definir essa variável para vários protocolos de comunicação separando as palavras-chave com vírgulas, por exemplo, db2set db2comm=tcpip,appc.

    É preciso emitir novamente o comando db2start para iniciar os gerenciadores de conexão para os protocolos especificados pelo parâmetro do registro db2comm. Como o DB2 será reiniciado na etapa 7 a seguir, não é necessário fazer isso agora.

    .
  3. Atualize o parâmetro de configuração SVCENAME do gerenciador de banco de dados com o nome do serviço de conexão definido em /etc/services (etapa 1).

    Para verificar a definição atual de SVCENAME, insira o seguinte comando:

    db2 get dbm cfg | grep -i svcename

    Se precisar atualizar a definição de SVCENAME, insira o seguinte comando:

    db2 update dbm cfg using svcename <nome do serviço de conexão>

    em que <nome do serviço de conexão> faz distinção entre maiúsculas e minúsculas e deve corresponder ao nome da porta de serviço que você colocou em /etc/services (por exemplo, db2 update dbm cfg using svcename db2cdb2inst1).

    A atualização da configuração do gerenciador do banco de dados não será efetivada até que o próximo comando db2start seja emitido. Isso será feito na etapa 7 a seguir.

  4. Catalogue o nó de loopback inserindo o seguinte comando:
    db2 catalog tcpip node <nome_do_nó> remote 127.0.0.1 server <nome do serviço de conexão>

    em que <nome_do_nó> é um alias local para o nó a ser catalogado. Este é um nome arbitrário na estação de trabalho, utilizado para identificar o nó (por exemplo, db2 catalog tcpip node mynode remote 127.0.0.1 server db2cdb2inst1).

    Para verificar se o comando catalog funcionou corretamente, emita o seguinte comando:

    db2 list node directory

    Uma amostra da saída desse comando é (as linhas em branco foram removidas para facilitar a leitura):

    Node Directory
    Number of entries in the directory = 1
    Node 1 entry:
    Node name = MYNODE
    Comment =
    Protocol = TCPIP
    Hostname = 127.0.0.1
    Service name = db2cdb2inst1
  5. Catalogue o banco de dados da seguinte maneira. Consulte os comandos dados a seguir para gerar saída de amostra se desejar monitorar os efeitos de cada comando:
    1. db2 catalog db <nome do banco de dados> as <alias do banco de dados>
    2. db2 uncatalog db <nome do banco de dados>
    3. db2 catalog db <alias do banco de dados as <nome do banco de dados> at node <nome do nó>
    por exemplo,
    db2 catalog db WAS as WASLOOP
    db2 uncatalog db WAS
    db2 catalog db WASLOOP as WAS at node MYNODE

    Notas:

    • O alias do banco de dados pode ser qualquer nome que se queira mas não pode ser igual ao nome do banco de dados.
    • Você receberá o erro número SQL1334N se não tiver catalogado o banco de dados corretamente.
    • É preciso repetir as etapas de 5a a 5c para cada banco de dados no qual você desejar depurar um procedimento armazenado.

    Amostra da saída para as etapas 5a a 5c

    Antes da etapa 5a, um banco de dados local denominado WAS já foi criado. O comando db2 list db directory tem a seguinte saída:

    System Database Directory
    Number of entries in the directory = 1

    Database 1 entry:

    Database alias = WAS
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    Após a etapa 5a, db2 list db directory tem a seguinte saída:

    System Database Directory
    Number of entries in the directory = 2

    Database 1 entry:

    Database alias = WAS
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    Database 2 entry:

    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    Após a etapa 5b, db2 list db directory tem a seguinte saída:

    System Database Directory
    Number of entries in the directory = 1

    Database 1 entry:

    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    Após a etapa 5c, db2 list db directory tem a seguinte saída:

    System Database Directory
    Number of entries in the directory = 2

    Database 1 entry:

    Database alias = WAS
    Database name = WASLOOP
    Node name = MYNODE
    Database release level = 9.00
    Comment =
    Directory entry type = Remote
    Catalog node number = -1

    Database 2 entry:

    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    Para verificar se o comando catalog db funcionou corretamente, emita os seguintes dois comandos (e consulte a amostra de saída a seguir):

    db2 connect to wasloop
    db2 connect to was

    em que db2 connect to wasloop deve imprimir as informações sobre a conexão e db2 connect to was deve dar SQL1403N.

    Amostra da saída de db2 connect to wasloop:

    Database Connection Information
    System Database Directory

    Database server = DB2/6000 6.1.0
    SQL authorization ID = CTSUI
    Local database alias = WASLOOP

    Amostra da saída de db2 connect to was:

    SQL1403N The username and/or password supplied is incorrect. SQLSTATE=08004
  6. Atualize o mecanismo de autenticação para Client authentication. Insira o comando:
    db2 update dbm cfg using authentication client

    Para verificar se o comando funcionou corretamente, exiba a nova definição com o seguinte comando:

    db2 get dbm cfg

    Amostra da saída:

    ....
    Database manager authentication         (AUTHENTICATION) = CLIENT
    ....
  7. Reinicie o DB2 para atualizar o cache do diretório. Por exemplo:
    db2stop
    db2start
  8. Para o WAS, não é necessário atualizar o arquivo admin.config. Para um aplicativo do Websphere, não há necessidade de alterar a configuração de origem de dados existente.
  9. Se você quiser eliminar o banco de dados, faça o seguinte:
    1. db2 attach to <nome_do_nó> user <id_do_usuário> using <senha>
    2. db2 drop db <nome do banco de dados>
      por exemplo, db2 attach to MYNODE user myid using mypasswd
      db2 drop db WAS

2.9 Depurador SQLJ

Ao executar troca a quente durante depuração com a JVM J9, se houver muitos métodos SQLJ na pilha de chamadas, você verá um diálogo Obsolete methods on the stack. Se a troca a quente foi de uma classe SQLJ, a classe será recarregada na JVM, mas você não verá o novo código sendo executado até a próxima vez em que um método na classe for chamado.

Se você fizer troca a quente de uma classe SQLJ, os pontos de interrupção SQLJ podem não funcionar para essa classe durante a sessão de depuração atual.

Retornar para o arquivo leia-me principal