Servicio de conexión de prueba

WebSphere Application Server proporciona un servicio de conexión de prueba para validar las configuraciones de origen de datos. La operación testConnection genera una instancia de la configuración de origen de datos, obtiene una conexión y, a continuación, cierra la conexión de inmediato.

Si la definición de origen de datos incluye una variable de WebSphere, necesita determinar pueden afectar los valores de ámbito de la variable y del origen de datos a los resultados de conexión de prueba. El siguiente paso es elegir cuál de las tres maneras desea escoger para activar el servicio de conexión de prueba: mediante la consola administrativa, la herramienta wsadmin o un programa Java™ autónomo.

Comprobación de los valores de ámbito

La asociación de variables de WebSphere con las configuraciones de origen de datos puede generar resultados de la conexión de prueba que no sean congruentes con el comportamiento del tiempo de ejecución de la aplicación. En algunos casos, una operación de conexión de prueba falla, pero el origen de datos físico funciona correctamente en el tiempo de ejecución de la aplicación. La causa del posible conflicto es la diferencia entre cómo maneja el servidor de aplicaciones los valores de ámbito de las variables de WebSphere en el tiempo de ejecución y cómo maneja esos mismos valores de ámbito para una operación de conexión de prueba. La comprensión de la diferencia ayuda a crear configuraciones de origen de datos satisfactorias.

Durante la ejecución, WebSphere Application Server invoca un origen de datos físico resolviendo la variable correspondiente en un nivel en que existe uno de los criterios siguientes:
  • El ámbito de la variable puede contener la configuración del origen de datos, esto es, la variable tiene el ámbito mayor.
  • La variable y el origen de datos tienen ámbitos idénticos.
Para satisfaces estas condiciones, el servidor de aplicaciones intenta resolver la variable en cada nivel del espectro de ámbitos. Es decir, el producto intenta resolver la variable en el ámbito de servidor, después en el ámbito de clúster, después en el ámbito de nodo y por último en el ámbito de célula.
No obstante, el servidor de aplicaciones sólo prueba las conexiones en un ámbito, es decir, realiza la operación de prueba en la JVM del mismo ámbito que el de la configuración de origen de datos. El producto intenta resolver la variable de vía de acceso de la clase de controlador únicamente en dicho ámbito.
Tabla 1. Correlación del ámbito del origen de datos con la JVM de conexión de prueba. La correlación del ámbito del origen de datos de célula, nodo, clúster y servidor con la JVM de conexión de prueba correspondiente en la que se lleva a cabo la operación.
Ámbito del origen de datos JVM donde se realizan la operación de conexión de prueba
Cell Proceso del gestor
Nodo Proceso de agente de nodo (del nodo relevante)
Clúster Agente de nodo de cada nodo que contiene un miembro de clúster
Servidor Servidor; si el servidor no está disponible, la operación de conexión de prueba se vuelve a intentar en el agente de nodo del nodo que contiene el servidor de aplicaciones.
[z/OS]Restricción: En una implementación del despliegue de red del servidor de aplicaciones no puede probar las conexiones de los siguientes orígenes de datos a nivel de nodo o clúster:
  • Controlador de IBM Data Server para JDBC y origen de datos SQLJ con un controlador del tipo 2
  • Origen de datos del proveedor de controlador JDBC de DB2 Universal con un controlador de tipo 2
Puede crear configuraciones a nivel de clúster o a nivel de nodo de los orígenes de datos para utilizarlas con las aplicaciones; estas configuraciones deben funcionar correctamente en el entorno de ejecución. Sin embargo, para ejecutar correctamente la conexión de prueba en los orígenes de datos debe probar los orígenes de datos solamente a nivel de servidor. El servidor de aplicaciones emitirá la siguiente excepción para una conexión de prueba a nivel de nodo:
java.sql.SQLException: Error al cargar la biblioteca nativa T2 db2jcct2DSRA0010E:
Estado de SQL = null, Código de error = -99,999
Sin embargo, en algunos casos, el error puede ser parecido al siguiente mensaje:
T2zOS exception: [jcc][T2zos]T2zosReusableConnection.flowConnect:initRRSAFAttach
:2528: Connection dead
Estos dos orígenes de datos se basan en los controladores JDBC de tipo 2, que necesitan acceder a la biblioteca nativa T2. El entorno de ejecución para el servidor de aplicaciones proporciona ese acceso para los orígenes de datos en un proceso de servidor, pero el servicio de conexión de prueba no proporciona acceso a estos archivos nativos cuando se ejecuta en el proceso de agente de nodo.

Por lo tanto, cuando cree estos orígenes de datos en el ámbito de nodo o en el ámbito de clúster, es posible que desee crear temporalmente las mismas configuraciones en el ámbito de servidor para realizar pruebas. Ejecute la operación de operación a nivel de servidor para determinar si los valores de origen de datos son válidos para la configuración global.

Si el ámbito de la variable WebSphere es menor que el del origen de datos, la operación de conexión de prueba falla. La tabla siguiente muestra los escenarios que generan este error y también los que se realizan correctamente.
Tabla 2. Resultados de la conexión de prueba para distintas combinaciones de origen de datos y variables WebSphere. En la tabla se muestran los resultados de la conexión de prueba para distintas combinaciones de orígenes de datos y variables de WebSphere
Ámbito del origen de datos Variables a nivel de célula Variables a nivel de nodo Variables a nivel de servidor
Nivel de célula Bien Error Error
Nivel de nodo Bien Bien Error
Nivel de servidor Bien Bien Bien

De modo contrario a lo previsto, estos errores de conexión de prueba no suelen generar anomalías durante la ejecución. Asegúrese de que todos los clientes que deben utilizar el origen de datos puedan acceder a la ubicación de los archivos de controlador JDBC y configure la variable de WebSphere con la vía de acceso completa de dicha ubicación.

No obstante, una de las combinaciones de ámbito de la Tabla 2 puede generar el caso contrario: la operación de conexión de prueba es satisfactoria, pero el origen de datos falla en el tiempo de ejecución. Esta anomalía se produce cuando hay un origen de datos de ámbito de célula que utiliza una variable WebSphere de ámbito de célula. La prueba de conexión es correcta debido a que la operación se lleva a cabo en el proceso del gestor de despliegue (como se indica en la Tabla 1), donde el servidor de aplicaciones puede resolver la variable de ámbito de célula. El origen de datos puede fallar en tiempo de ejecución dado que la variable de ámbito de célula puede alterarse temporalmente con un valor nulo.

Cuando crea un nodo, el servidor de aplicaciones crea variables de entorno para todos los controladores JDBC soportados en el ámbito de nodo e inicializa cada variable con una serie vacía. Debido a que un servidor de aplicaciones intenta resolver variables desde el extremo inferior del espectro del ámbito hasta el extremo superior, la variable del ámbito de nodo altera temporalmente la variable de ámbito de célula durante la ejecución. El servidor lee la serie vacía y la acepta como la classpath del controlador JDBC. La classpath nula genera una excepción classNotFound cuando el servidor intenta utilizar el origen de datos.

Al utilizar cualquiera de las opciones administrativas del servidor de aplicaciones, puede impedir que la serie vacía se convierta en el valor final de la variable de la classpath del controlador.

  • Utilización de la consola administrativa de WebSphere Application Server: el programa del asistente del origen de datos copia el valor de la variable de ámbito de célula (que se especifica en el asistente de creación del proveedor JDBC) en la variable de ámbito de nodo del mismo nombre. El programa del asistente efectúa esta operación de copia sólo si la variable de ámbito de nodo tiene el valor de serie vacía, de este modo, el programa no cambia una classpath válida que haya especificado anteriormente.
    Para asegurarse de que el origen de datos funciona con la variable de ámbito de nodo durante la ejecución, siga estos pasos:
    1. Instale los archivos del controlador JDBC en el nodo del gestor de despliegue, al igual que en cada nodo en el que deba funcionar el origen de datos.
    2. Utilice la vía de acceso del archivo del controlador en el gestor de despliegue para definir la variable de WebSphere para un proveedor JDBC en el ámbito de célula.
    3. Asegúrese de que el origen de datos esté asociado al proveedor JDBC del gestor de despliegue y tenga el mismo ámbito de célula.
      Importante: Asegúrese de que la operación se realice correctamente instalando los archivos de controlador en las ubicaciones que tengan nombres idénticos de vía de acceso completa, incluido el nodo del gestor de despliegue. De lo contrario, es probable que vuelva a reproducirse el mismo caso de una conexión de prueba correcta pero con un error de tiempo de ejecución.
  • Utilización de la herramienta de scripts wsadmin: para que funcione el origen de datos para la operación de conexión de prueba y durante la ejecución, cree las mismas configuraciones de classpath del controlador en el ámbito de célula y en todos los ámbitos de nodo relevantes. Siga estos pasos:
    1. Instale los archivos del controlador JDBC en el nodo del gestor de despliegue. Utilice dicho nombre de vía de acceso para definir la variable de classpath del controlador para un proveedor JDBC en el ámbito de célula.
    2. Asegúrese de que el origen de datos esté asociado al proveedor JDBC del gestor de despliegue y tenga el mismo ámbito de célula.
    3. En cada nodo en el que debe funcionar el origen de datos, instale los archivos del controlador JDBC y utilice la vía de acceso para definir la variable WebSphere para un proveedor JDBC en el ámbito de nodo. Cada una de estos proveedores deben tener la misma configuración.
      Importante: Asegúrese de que la operación se realice correctamente instalando los archivos de controlador en las ubicaciones que tengan nombres idénticos de vía de acceso completa, incluido el nodo del gestor de despliegue. De lo contrario, es probable que vuelva a reproducirse el mismo caso de una conexión de prueba correcta pero con un error de tiempo de ejecución.

Utilice los recursos de ámbito de célula sólo si todos los nodos que necesiten acceso al origen de datos, incluido el nodo del gestor de despliegue, se ejecutan en la misma plataforma y tienen instalados los controladores JDBC en la misma ubicación. De lo contrario, utilice el ámbito de nodo como el valor de ámbito mayor para los orígenes de datos.

Omisión de las búsquedas de variables

Puede omitir las búsquedas de variables de entorno cambiando las entradas de classpath del proveedor de JDBC por valores codificados. No obstante, esta estrategia sólo es correcta sólo si configura la classpath de igual modo en todos los nodos donde debe funcionar el origen de datos.

Activación del servicio de conexión de prueba

Hay tres formas de activar el servicio de conexión de prueba: mediante la consola administrativa, la herramienta wsadmin o un programa autónomo Java. Cada proceso invoca los mismos métodos en el mismo MBean.

Consola de administración

WebSphere Application Server permite probar una conexión desde la consola administrativa con sólo pulsar un botón: las páginas Colección de orígenes de datos, Valores de orígenes de datos, Colección de orígenes de datos Versión 4 y Valores de orígenes de datos Versión 4 incluyen todas botones Conexión de prueba. Una vez definido y guardado el origen de datos, puede pulsar este botón para verificar que los parámetros de la definición del origen de datos son los correctos. En la página de la colección, puede seleccionar varios orígenes de datos y probarlos todos a la vez. Tenga en cuanta que se deben cumplir primero determinadas condiciones. Para obtener más información, consulte el tema Prueba de una conexión con la consola administrativa.

Nota: Se produce la excepción siguiente cuando pulsa Conexión de prueba para conectar con un origen de datos Sybase desde la consola administrativa.
La conexión de prueba ha fallado para el origen de datos isagent en el servidor server1 del nodo 
svtaix24Node01 con la excepción siguiente: java.lang.Exception: 
java.sql.SQLException: JZ006: Se ha detectado la excepción IOException: java.net.ConnectException: Un 
host remoto ha rechazado una operación de conexión.DSRA0010E: SQL State = JZ006, 
Código de error = 0
Esta excepción se produce cuando el número de puerto del origen de datos Sybase no coincide con el puerto configurado en el servidor Sybase. El número de puerto predeterminado es 5000. Compruebe el número de puerto para el servidor Sybase en el archivo de interfaces bajo /<directorio_instalación_sybase>.

Herramienta WsAdmin

La herramienta wsadmin proporciona una interfaz de scripts para una amplia gama de actividades de administración de WebSphere Application Server. Como la función de Conexión de prueba se implementa como método en un MBean, y wsadmin puede invocar métodos de MBean, wsadmin se puede utilizar para comprobar conexiones con los orígenes de datos. Tiene dos opciones para probar una conexión de origen de datos mediante wsadmin:

El objeto AdminControl de wsadmin tiene una operación testConnection que comprueba las propiedades de configuración de un objeto de origen de datos. Para obtener información, consulte el tema Prueba de una conexión utilizando wsadmin.

También puede comprobar una conexión invocando la operación de MBean. Utilice el ejemplo del tema Ejemplo: Prueba de conexión de orígenes de datos utilizando wsadmin como guía para esta técnica.

Programa autónomo Java

Finalmente, puede probar una conexión ejecutando el método testConnection en el MBean DataSourceCfgHelper. Este método permite pasar el ID de configuración del origen de datos configurado. El programa Java se conecta con un servidor JMX (Java Management Extensions) en ejecución para acceder al MBean. En una instalación de WebSphere Application Server, Network Deployment de Application Server, se conecta al servidor JMX que se está ejecutando en el gestor de despliegue, normalmente en el puerto 8879.

El valor de retorno de esta invocación es 0, un número positivo o una excepción. 0 indica que la operación se ha realizado satisfactoriamente, sin ningún aviso. Un número positivo indica que la operación se ha realizado satisfactoriamente, con el número de avisos. Una excepción indica que no se ha podido realizar la comprobación de la conexión.

Nota: Ejemplo: comprobación de una conexión utilizando testConnection(ConfigID).

El siguiente código de ejemplo crea una instancia de origen de datos y una instancia de conexión asociada, y las prueba para garantizar la conectividad de la base de datos.

Este programa utiliza JMX para conectarse a un servidor en ejecución e invocar el método testConnection en el MBean DataSourceCfgHelper. El acrónimo ND de una línea de comentarios indica que el código siguiente se aplica a WebSphere Application Server WebSphere Application Server, Network Deployment. La palabra Base de una línea de comentarios indica que el código siguiente se aplica a WebSphere Application Server.

/**
 * Descripción
 * Programa de prueba de adaptador de recursos para garantizar que las interfaces del MBean
funcionan.
 * Se prueban las siguientes interfaces
 * 
 *  ---  testConnection()
 * 
 * 
 * Necesitamos lo siguiente para ejecutar
 * C:\src>java -Djava.ext.dirs=C:\WebSphere\AppServer\lib;C:\WebSphere\AppServer\java\jre\lib\ext testDSGUI
 *debe incluir jre para log.jar y mail.jar, o se obtiene una excepción de clase no encontrada
 * 
 * 
 */

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 {

//Utilice el puerto 8880 para la instalación Base o el puerto 8879 para la instalación ND
String port = "8880";
// String port = "8879";
String host = "localhost";
final static boolean verbose = true;

// por ejemplo, un ID de configuración de DataSource declarado a nivel de nodo para la instalación Base
private static final String resURI = "cells/cat/nodes/cat|resources.xml#DataSource_1";

// por ejemplo, un DataSource 4.0 declarado a nivel de nodo para la instalación Base
//    private static final String resURI = "cells/cat/nodes/cat|resources.xml#WAS40DataSource_1";

// por ejemplo, un DataSource de Apache Derby declarado a nivel de servidor para la instalación Base
//private static final String resURI = "cells/cat/nodes/cat/servers/server1/resources.xml#DataSource_6";

// por ejemplo, un DataSource a nivel de nodo para la instalación ND
//private static final String resURI = "cells/catNetwork/nodes/cat|resources.xml#DataSource_1";

// por ejemplo, un DataSource a nivel de servidor para la instalación ND
//private static final String resURI = "cells/catNetwork/nodes/cat/servers/server1|resources.xml#DataSource_4";

// por ejemplo, un DataSource a nivel de célula para la instalación 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 prueba el ResourceMbean.
 * 
 * @param args
 * @exception Exception
 */
 public void run(String[] args) {

           try {

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

        /*************************************************************************/
        /**    Inicializar 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 el Mbean                                                */
       /*************************************************************************/
		ObjectName handle = null;
	         try {
                // Enviar una serie de localizador 
                // por ejemplo, para una Base, esto es suficiente
                ObjectName queryName = new ObjectName("WebSphere:type=DataSourceCfgHelper,*");

                // para la instalación ND, deberá especificar desde qué nodo/proceso desea realizar la prueba
                // por ejemplo, ejecutar en el servidor
//ND: ObjectName queryName = new OjectName
				 			("WebSphere:cell=catNetwork,node=cat,process=server1,type=DataSourceCfgHelper,*");
                // por ejemplo, ejecutar en el agente de nodo
//ND: ObjectName queryName = new ObjectName
				 			("WebSphere:cell=catNetwork,node=cat,process=nodeagent,type=DataSourceCfgHelper,*");
//ND: por ejemplo, ejecutar en el Gestor
//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()) {
                // utilizar el primer MBean que se encuentra
	 		 	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("Check the program variable queryName" + mone);
	} catch (com.ibm.websphere.management.exception.ConnectorException ce) {
				System.out.println("Cannot connect to the application server" + ce);
	}

         /*************************************************************************/
         /**           Crear parámetros para pasarlos a 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 {
               /*************************************************************************/
               /**  Empezar a probar la conexión con la base de datos                   */
               /*************************************************************************/
				result = adminClient.invoke(handle, "testConnection", params, signature);
	} catch (MBeanException mbe) {
				// ****** todas las excepciones de usuario vienen aquí
			if (verbose) {
						Exception ex = mbe.getTargetException(); // ésta es la excepción real del 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();
	}

         /*************************************************************************/
         /**  Procesar el resultado.  El resultado será el número de avisos        */
         /**  emitidos.  El resultado 0 indica una conexión satisfactoria sin      */
         /**  avisos. */
         /*************************************************************************/

		//El resultado 0 indica una conexión satisfactoria sin 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);
  }
 }
}
Consejo: Asegúrese de ejecutar el servicio de conexión de prueba al mismo nivel que un origen de datos existente. Por ejemplo, no ejecute el servicio de conexión de prueba a nivel de nodo si el origen de datos se configura a nivel de servidor. Si el servicio de conexión de prueba y la configuración de origen de datos no existen en el mismo nivel, es posible que se produzca una excepción de anomalía de carga. En esta situación, cree el origen del script db2profile en la máquina y asegúrese de que el entorno contiene punteros a las bibliotecas nativas de DB2. El script db2profile se encuentra en el directorio raíz del ID de usuario de DB2.

Icon that indicates the type of topic Concept topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cdat_testcon
File name: cdat_testcon.html