Serviço de Conexão de Teste

O WebSphere Application Server fornece um serviço de conexão de teste para validar configurações da origem de dados. A operação testConnection instancia a configuração de origem de dados, obtém uma conexão e, em seguida, fecha imediatamente a conexão.

Se a definição da origem de dados incluir uma variável do WebSphere, é necessário determinar como as suas configurações de escopo para que a variável e a origem de dados possam afetar os resultados da conexão de teste. Sua próxima etapa é escolher de qual das três maneiras deseja ativar o serviço de conexão de teste: por meio do console administrativo, da ferramenta wsadmin ou do programa independente Java™.

Verificando as Configurações de Escopo

Associar variáveis do WebSphere a configurações de origem de dados pode induzir a resultados de conexão de teste incongruentes com o comportamento de tempo de execução de seu aplicativo. Em alguns casos, uma operação de conexão de teste falha, mas a origem de dados física funciona normalmente durante o tempo de execução do aplicativo. A causa do possível conflito é a diferença entre como o servidor de aplicativos trata as configurações de escopo das variáveis do WebSphere no tempo de execução e como ele trata essas mesmas configurações de escopo para uma operação de conexão de teste. Entender a diferença ajuda a criar configurações bem-sucedidas da origem de dados.

No tempo de execução, o WebSphere Application Server chama uma origem de dados física resolvendo a variável apropriada em um nível em que existe um dos seguintes critérios:
  • O escopo da variável pode conter a configuração da origem de dados, isto é, a variável tem um escopo maior.
  • A variável e a origem de dados têm escopos idênticos.
O Application Server atende a essas condições tentando resolver a variável em cada nível do espectro do escopo. Isto é, o produto tenta resolver a variável no escopo do servidor e, em seguida, no escopo do cluster, depois no escopo do nó e, por último, no escopo da célula.
No entanto, o Application Server testa as conexões apenas em um escopo; ele executa a operação de teste na JVM do mesmo escopo daquele da configuração da origem de dados. O produto tenta resolver a variável de caminho de classe do driver apenas nesse escopo.
Tabela 1. Correlação do Escopo da Origem de Dados com a JVM de Conexão de Teste. A correlação do escopo da origem de dados da Célula, do Nó, do Cluster e do Servidor com a JVM da conexão de teste correspondente em que a operação ocorre.
Escopo da Origem de Dados JVM em que ocorre a operação de conexão de teste
Célula Processo do gerenciador
Processo do agente de nó (do nó relevante)
Cluster Agente do nó para cada nó que contém um membro de cluster
Servidor Servidor; se o servidor não estiver disponível, a operação de conexão de teste será tentada novamente no agente do nó que contém o servidor de aplicativos.
[z/OS]Restrição: Em uma implementação de rede do servidor de aplicativos, não é possível testar conexões para as origens de dados a seguir no nível do nó ou no nível do cluster:
  • Origem de dados do IBM Data Server Driver para JDBC e SQLJ com driver tipo 2
  • Origem de dados do DB2 Universal JDBC Driver Provider com driver tipo 2
É possível criar configurações no nível do nó ou no nível do cluster das origens de dados para uso do aplicativo; estas configurações devem funcionar corretamente no ambiente de tempo de execução. Para executar com sucesso a conexão de teste nas origens de dados, no entanto, você deve testar as origens de dados apenas no nível do servidor. O servidor de aplicativos emitirá a exceção a seguir para uma conexão de teste no nível do nó:
java.sql.SQLException: Falha no carregamento da biblioteca nativa T2 db2jcct2DSRA0010E: Estado de SQL = nulo, Código de Erro = -99,999
Em alguns casos, porém, o erro pode ser semelhante à mensagem a seguir:
Exceção T2zOS: [jcc][T2zos]T2zosReusableConnection.flowConnect:initRRSAFAttach
:2528: Conexão inativa
Ambas as origens de dados são baseadas em drivers JDBC tipo 2, que precisam de acesso às bibliotecas nativas T2. O ambiente de tempo de execução para o servidor de aplicativos fornece esse acesso para origens de dados em um processo do servidor, mas o serviço de conexão de teste não fornece acesso a esses arquivos nativos quando ele é executado no processo do agente do nó.

Portanto, quando você cria estas origens de dados no escopo do nó ou no escopo de cluster, pode desejar criar temporariamente as mesmas configurações em um escopo do servidor para propósitos de teste. Execute a operação de conexão de teste no nível do servidor para determinar se as configurações de origem de dados são válidas para sua configuração geral.

Se o escopo da variável do WebSphere for menor que o da origem de dados, a operação da conexão de teste falhará. A tabela a seguir mostra os cenários que produzem essa falha e também os que produzem o sucesso.
Tabela 2. Resultados da Conexão de Teste para Diferentes Combinações de Origens de Dados e Variáveis do WebSphere. Os resultados de teste para diferentes combinações de origem de dados e de variáveis do WebSphere são mostrados na tabela.
Escopo da Origem de Dados Variáveis no Nível da Célula Variáveis no Nível do Nó Variáveis no Nível do Servidor
Nível da célula Ok Falha Falha
Nível do nó Ok Ok Falha
Nível do Servidor Ok Ok Ok

Contrário às expectativas, essas falhas de conexão de teste geralmente não se convertem em falhas de tempo de execução. Assegure-se de que o local dos arquivos do driver JDBC esteja acessível a cada cliente que precisa utilizar a origem de dados, e configure a variável do WebSphere com o caminho completo desse local.

Porém, uma das combinações de escopo listadas na Tabela 2 pode produzir o cenário reverso: a operação de conexão de teste é bem-sucedida, mas a origem de dados falha no tempo de execução. Essa irregularidade ocorre no caso de uma origem de dados com escopo na célula que utiliza uma variável do WebSphere com escopo na célula. O teste de conexão é bem-sucedido porque a operação ocorre no processo do gerenciador de implementação (conforme indicado na Tabela 1), em que o Application Server pode resolver a variável com escopo de célula. Essa origem de dados pode falhar no tempo de execução porque a variável com escopo de célula pode ser substituída por um valor nulo.

Quando você cria um nó, o Application Server cria variáveis de ambiente para todos os drivers JDBC suportados no escopo do nó e inicializa cada variável com uma cadeia vazia. Como um servidor de aplicativo tenta resolver variáveis do low end do espectro do escopo até o high end, a variável do escopo do nó substitui a variável do escopo da célula no tempo de execução. O servidor lê a cadeia vazia e a aceita como o caminho de classe do driver JDBC. O caminho de classe nulo leva a uma exceção classNotFound quando o servidor tenta utilizar a origem de dados.

Utilizando qualquer uma das opções administrativas do Application Server, você pode evitar que uma cadeia vazia se torne o valor final para a variável de caminho de classe do driver.

  • Usando o console administrativo do WebSphere Application Server: O programa do assistente de origem de dados copia o valor da variável com escopo na célula (o qual você especifica no assistente de criação do provedor JDBC) na variável com escopo no nó com o mesmo nome. O programa do assistente executará esta operação de cópia apenas se a variável com escopo de nó tiver o valor de cadeia vazia; assim, o programa não altera um caminho de classe válido especificado anteriormente.
    Para garantir que a origem de dados funcione com a variável com escopo de nó no tempo de execução, siga estas etapas:
    1. Instale os arquivos do driver JDBC no nó do gerenciador de implementação e também em cada nó em que a origem de dados deve funcionar.
    2. Utilize o caminho de arquivo do driver no gerenciador de implementação para definir a variável do WebSphere para um provedor JDBC no escopo da célula.
    3. Certifique-se de que a origem de dados esteja associada ao provedor JDBC do gerenciador de implementação e tenha o mesmo escopo da célula.
      Importante: Garanta o sucesso instalando os arquivos do driver em locais com nomes de caminho completo idênticos em todos os nós, incluindo o nó do gerenciador de implementação. Caso contrário, é provável que ocorra novamente o mesmo cenário de sucesso da conexão de teste, mas de falha no tempo de execução.
  • Usando a ferramenta de script wsadmin: Para fazer a origem de dados funcionar para a operação de conexão de teste e o tempo de execução, crie as mesmas configurações do caminho de classe do driver no escopo da célula e em todos os escopos do nó relevantes. Execute as seguintes etapas:
    1. Instale os arquivos do driver JDBC no nó do gerenciador de implementação; utilize esse nome do caminho para definir a variável de caminho de classe do driver para um provedor JDBC no escopo da célula.
    2. Certifique-se de que a origem de dados esteja associada ao provedor JDBC do gerenciador de implementação e tenha o mesmo escopo da célula.
    3. Em cada nó em que a origem de dados deve funcionar, instale os arquivos do driver JDBC e utilize o caminho para definir a variável do WebSphere para um provedor JDBC no escopo do nó. Cada um desses provedores deve ter a mesma configuração.
      Importante: Garanta o sucesso instalando os arquivos do driver em locais com nomes de caminho completo idênticos em todos os nós, incluindo o nó do gerenciador de implementação. Caso contrário, é provável que ocorra novamente o mesmo cenário de sucesso da conexão de teste, mas de falha no tempo de execução.

Utilize os recursos do escopo da célula apenas se todos os nós que precisam de acesso para a origem de dados, incluindo o nó do gerenciador de implementação, forem executados na mesma plataforma e tiverem os drivers JDBC instalados no mesmo local. Caso contrário, utilize o escopo do nó como a configuração do escopo maior para as origens de dados.

Transmitindo Consultas de Variáveis

É possível ignorar as consultas de variáveis de ambiente alterando as entradas do caminho de classe do provedor JDBC para valores com hardcode atribuído. No entanto, essa estratégia será bem-sucedida apenas se o caminho de classe for configurado de forma idêntica em todos os nós em que a origem de dados tiver que funcionar.

Ativando o Serviço de Conexão de Teste

Há três maneiras de ativar o serviço de conexão de teste: utilizando o console administrativo, a ferramenta wsadmin ou um programa Java independente. Cada processo chama os mesmos métodos no mesmo MBean.

Administrative console

WebSphere Application Server permite testar uma conexão a partir do console administrativo simplesmente apertando um botão: as páginas Coleção de Origem de Dados, Configurações de Origem de Dados, Coleção de Origem de Dados Versão 4 e Configurações da Origem de Dados Versão 4 têm os botões Testar Conexão. Após definir e salvar uma origem de dados, é possível clicar nesse botão para assegurar que os parâmetros na definição de origem de dados estejam corretos. Na página da coleção, é possível selecionar várias origens de dados e testá-las todas de uma vez. Observe que há certas condições que devem ser satisfeitas primeiro. Para obter informações adicionais, consulte o tópico, Testando uma conexão com o console administrativo.

Nota: A exceção a seguir ocorre quando você clica em Conexão de Teste para conectar uma origem de dados Sybase do console administrativo.
A conexão de teste falhou para a origem de dados isagent no servidor server1 no nó 
svtaix24Node01 com a seguinte exceção: java.lang.Exception: 
java.sql.SQLException: JZ006: Caught IOException: java.net.ConnectException: Um 
host remoto recusou uma operação de conexão tentada.DSRA0010E: SQL State = JZ006, 
Código de Erro = 0
Esta exceção ocorre quando o número da porta da origem de dados Sybase não tem correspondência para a porta configurada no servidor Sybase. O número da porta padrão é 5000. Verifique o número da porta do seu servidor Sybase no arquivo de interfaces em /<sybase install directory>.

Ferramenta WsAdmin

A ferramenta wsadmin fornece uma interface de script para um intervalo integral das atividades de administração do WebSphere Application Server. Como a funcionalidade Testar Conexão é implementada como um método em um MBean e wsadmin pode chamar métodos MBean, wsadmin pode ser utilizada para testar conexões para origens de dados. Você possui duas opções para testar uma conexão de origem de dados através de wsadmin:

O objeto AdminControl de wsadmin tem uma operação testConnection que testa as propriedades de configuração de um objeto de origem de dados. Para obter informações, consulte o tópico, Testando uma conexão usando o wsadmin.

É possível também testar uma conexão chamando a operação MBean. Use o exemplo no tópico, Exemplo: Testando conexão de origem de dados usando wsadmin, como um guia para esta técnica.

Programa independente Java

Finalmente, é possível testar uma conexão executando o método testConnection no MBean DataSourceCfgHelper. Esse método permite transmitir o ID de configuração da origem de dados configurada. O programa Java conecta-se a um servidor JMX (Java Management Extensions) em execução para acessar o MBean. Em uma instalação do WebSphere Application Server, Network Deployment do Application Server, você se conecta ao servidor JMX em execução no gerenciador de implementação, geralmente na porta 8879.

O valor de retorno dessa chamada é 0, um número positivo ou uma exceção. 0 indica que a operação concluiu com êxito, sem avisos. Um número positivo indica que a operação concluiu com êxito, com o número de avisos. Uma exceção indica que o teste da conexão falhou.

Nota: Exemplo: Testando uma conexão usando testConnection(ConfigID).

O código de amostra a seguir cria uma instância da origem de dados e uma instância da conexão associada, além de testá-las para assegurar a conectividade do banco de dados.

Este programa utiliza JMX para se conectar a um servidor em execução e chamar o método testConnection no MBean DataSourceCfgHelper. O acrônimo ND em uma linha de comentário indica que o seguinte código se aplica ao WebSphere Application Server WebSphere Application Server, Network Deployment. A palavra Base em uma linha de comentário indica que o seguinte código se aplica ao WebSphere Application Server.

/**
 * Descrição
 * Programa de teste do adaptador de recurso para certificar-se de que as interfaces de MBean funcionam.
 * As seguintes interfaces são testadas
 * 
 *  ---  testConnection()
 * 
 * 
 * O seguinte é necessário para executar
 * C:\src>java -Djava.ext.dirs=C:\WebSphere\AppServer\lib;C:\WebSphere\AppServer\java\jre\lib\ext testDSGUI
 * deve incluir jre para log.jar e mail.jar, exceção da classe else get não localizada
 * 
 * 
 */

import java.util.Iterator;
import java.util.Locale;
import java.util.Properties;
import java.util.Set;

import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.RuntimeMBeanException;
import javax.management.RuntimeOperationsException;

import com.ibm.websphere.management.AdminClient;
import com.ibm.websphere.management.AdminClientFactory;
import com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException;

public class testDSGUI {

//Utilizar a porta 8880 para uma instalação Base ou a porta 8879 para instalação ND
String port = "8880";
// String port = "8879";
String host = "localhost";
final static boolean verbose = true;

// por exemplo, um ID de configuração para DataSource declarado no nível do nó para Base
private static final String resURI = "cells/cat/nodes/cat|resources.xml#DataSource_1";

// por exemplo, um DataSource 4.0 declarado no nível do nó para Base
//    private static final String resURI = "cells/cat/nodes/cat|resources.xml#WAS40DataSource_1";

// por exemplo, DataSource Apache Derby declarado no nível do servidor para Base
//private static final String resURI = "cells/cat/nodes/cat/servers/server1/resources.xml#DataSource_6";

// por exemplo, DataSource no nível do nó para ND
//private static final String resURI = "cells/catNetwork/nodes/cat|resources.xml#DataSource_1";

// por exemplo, DataSource no nível do servidor para ND
//private static final String resURI = "cells/catNetwork/nodes/cat/servers/server1|resources.xml#DataSource_4";

// por exemplo, DataSource no nível da célula para ND
//private static final String resURI = "cells/catNetwork|resources.xml#DataSource_1";

 public static void main(String[] args) {
  testDSGUI cds = new testDSGUI();
  cds.run(args);
 }

/**
 * Este método testa o ResourceMbean.
 * 
 * @param args
 * @exception Exception
 */
 public void run(String[] args) {

  try {

	System.out.println("Connecting to the application server.......");

        /*************************************************************************/
        /**    Inicializar o AdminClient                                         */
        /*************************************************************************/	
	Properties adminProps = new Properties();
	adminProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
	adminProps.setProperty(AdminClient.CONNECTOR_HOST, host);
	adminProps.setProperty(AdminClient.CONNECTOR_PORT, port);
	AdminClient adminClient = null;
	try {
	    adminClient = AdminClientFactory.createAdminClient(adminProps);
	} catch (com.ibm.websphere.management.exception.ConnectorException ce) {
  	    System.out.println("NLS: Cannot make a connection to the application server\n");
	    ce.printStackTrace();
	    System.exit(1);
	}

       /*************************************************************************/
       /**    Localizar o Mbean                                                 */
       /*************************************************************************/
	ObjectName handle = null;
	try {
                // Enviar uma cadeia localizadora 
                // por exemplo, para uma instalação Base isto é suficiente
                ObjectName queryName = new ObjectName("WebSphere:type=DataSourceCfgHelper,*");

                // para ND é preciso especificar de qual nó/processo você deseja testar
                // por exemplo, executar no servidor
//ND: ObjectName queryName = new OjectName
				("WebSphere:cell=catNetwork,node=cat,process=server1,type=DataSourceCfgHelper,*");
                // por exemplo, executar no agente do nó
//ND: ObjectName queryName = new ObjectName
				("WebSphere:cell=catNetwork,node=cat,process=nodeagent,type=DataSourceCfgHelper,*");
//ND: eg run in the   Manager
//ND: ObjectName queryName = new ObjectName
			("WebSphere:cell=catNetwork,node=catManager,process=dmgr,type=DataSourceCfgHelper,*");
	Set s = adminClient.queryNames(queryName, null);
	Iterator iter = s.iterator();
	while (iter.hasNext()) {
                // usar o primeiro MBean que for localizado
	 	handle = (ObjectName) iter.next();
		System.out.println("Found this ->" + handle);
		}
		if (handle == null) {
			System.out.println("NLS: Did not find this MBean>>" + queryName);
			System.exit(1);
		}
	} catch (MalformedObjectNameException mone) {
		System.out.println("Verifique a variável de programa queryName" + mone);
	} catch (com.ibm.websphere.management.exception.ConnectorException ce) {
		System.out.println("Não é possível conectar-se ao servidor de aplicativos" + ce);
	}

         /*************************************************************************/
         /**           Construir parâmetros para transmitir ao Mbean              */
         /*************************************************************************/
	String[] signature = { "java.lang.String" };
	Object[] params = { resURI };
	Object result = null;

       	if (verbose) {
		System.out.println("\nTesting connection to the database using " + handle);
	}

	try {
               /*************************************************************************/
               /**  Começar a testar a conexão ao banco de dados                        */
               /*************************************************************************/
		result = adminClient.invoke(handle, "testConnection", params, signature);
	} catch (MBeanException mbe) {
		// ****** todas as exceções do usuário vêm aqui
		if (verbose) {
			Exception ex = mbe.getTargetException(); // esta é uma exceção real do Mbean
			System.out.println("\nNLS:Mbean Exception was received contains " + ex);
			ex.printStackTrace();
			System.exit(1);
		}
	} catch (InstanceNotFoundException infe) {
		System.out.println("Cannot find " + infe);
	} catch (RuntimeMBeanException rme) {
		Exception ex = rme.getTargetException();
		ex.printStackTrace(System.out);
		throw ex;
	} catch (Exception ex) {
		System.out.println("\nUnexpected Exception occurred: " + ex);
		ex.printStackTrace();
	}

         /*************************************************************************/
         /**  Processar o resultado.  O resultado será o número de avisos          */
         /**  emitidos.  Um resultado de 0 indica uma conexão com êxito sem        */
         /**  avisos.                                                        */
         /*************************************************************************/

	//Um resultado de 0 indica uma conexão com êxito sem avisos.
	System.out.println("Result= " + result);

  } catch (RuntimeOperationsException roe) {
	Exception ex = roe.getTargetException();
	ex.printStackTrace(System.out);
  } catch (Exception ex) {
	System.out.println("General exception occurred");
	ex.printStackTrace(System.out);
  }
 }
}
Dica: Assegure-se de executar o serviço de conexão de teste no mesmo nível que uma origem de dados existente. Por exemplo, não execute o serviço de conexão de teste no nível do nó se sua origem de dados está configurada no nível do servidor. Se o serviço de conexão de teste e a configuração da origem de dados não existir no mesmo nível, um exceção de falha no carregamento pode resultar. Nesta situação, especifique a origem do script db2profile na máquina e assegure-se de que o ambiente contenha ponteiros para as bibliotecas nativas do DB2. O script db2profile existe no diretório-raiz do ID de usuário doDB2.

Ícone que indica o tipo de tópico Tópico de Conceito



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cdat_testcon
Nome do arquivo: cdat_testcon.html