Desarrollo de aplicaciones: Programación de aplicaciones del cliente

| | |

No se da soporte a la conectividad de Tipo 4 de DB2 Universal JDBC Driver a DB2 para VM/VSE

|

El DB2 Universal JDBC Driver no da soporte a la conectividad de tipo 4 a bases de |datos de DB2 para VM/VSE. Los temas titulados "Setting up the Windows Java environment" |e "Installing the DB2 Universal JDBC Driver" en la Application |Development Guide: Programming Client Applications, y el Centro de Información de DB2 UDB |establecen incorrectamente que el DB2 Universal JDBC Driver da soporte a la conectividad |de tipo 4 a las bases de datos de DB2 para VM/VSE.

Concentrador de conexiones del Controlador JDBC universal de DB2 y reparto de la carga de trabajo mediante Sysplex

Las aplicaciones Java que hacen uso de Conectividad de tipo 4 del controlador JDBC universal de DB2 para acceder a servidores de DB2 UDB para z/OS(R) pueden sacar provecho del concentrador de conexiones de ese producto y de las funciones de reparto de la carga de trabajo de Sysplex.

Estas funciones son similares al concentrador de conexiones y a las funciones de reparto de la carga de trabajo de DB2 Connect.

El concentrador de conexión Controlador JDBC universal de DB2 puede reducir los recursos que los servidores de base de datos de DB2 UDB para z/OS(R) requieren para dar soporte a muchas aplicaciones de cliente mediante el alquiler de muchos objetos de conexión que utilizan la misma conexión física, lo cual reduce el número total de conexiones físicas al servidor de base de datos.

El reparto de la carga de trabajo mediante Sysplex de Controlador JDBC universal de DB2 puede mejorar la disponibilidad de un grupo de compartimiento de datos pues el controlador obtiene información de estado frecuente sobre los miembros de un grupo de compartimiento de datos. El controlador utiliza esta información para determinar el miembro de compartimiento de datos hacia el que se debe encaminar la transacción siguiente. Mediante el reparto de la carga de trabajo proporcionado por Sysplex, el servidor de DB2 UDB para z/OS y el Gestor de carga de trabajo para z/OS (WLM) aseguran que el trabajo se distribuya eficientemente entre los miembros del grupo de compartimiento de datos y que ese trabajo se transfiera a otro miembro de un grupo de compartimiento de datos si un miembro tiene un error.

El Controlador JDBC universal de DB2 utiliza objetos de transporte y una agrupación de objetos de transporte global para permitir la utilización del concentrador de conexiones y el reparto de la carga de trabajo mediante Sysplex. Existe un objeto de transporte para cada conexión física establecida con el servidor de bases de datos. Cuando el usuario habilita el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex, establece el número máximo de conexiones físicas con el servidor de bases de datos para cualquier momento en el tiempo mediante el establecimiento del número máximo de objetos de transporte.

A nivel del controlador, el usuario establece límites respecto al número de objetos de transporte utilizando propiedades de configuración del Controlador JDBC universal de DB2.

A nivel de la conexión, el usuario habilita e inhabilita el concentrador de conexiones del Controlador JDBC universal de DB2 y el reparto de la carga de trabajo de Sysplex, y establece límites respecto al número de objetos de transporte utilizando propiedades de DataSource.

Puede supervisar la agrupación de objetos de transporte global en cualquiera de estas dos maneras:

Propiedades de configuración del Controlador JDBC universal de DB2 para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex

Las propiedades de configuración siguientes se utilizan para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex

db2.jcc.dumpPool
Especifica los tipos de estadísticas que se escriben para los sucesos de la agrupación de transporte global, además de las estadísticas de resumen que se escriben. La agrupación de transporte global se utiliza para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex.

El tipo de datos de db2.jcc.dumpPool es integer (int.). También es necesario definir las propiedades de configuración db2.jcc.dumpPoolStatisticsOnSchedule y db2.jcc.dumpPoolStatisticsOnScheduleFile para escribir estadísticas antes de escribir cualquier estadística.

Puede especificar uno o más de los tipos siguientes de estadísticas mediante la propiedad db2.jcc.dumpPool:

Para rastrear más de un tipo de suceso, añada los valores correspondientes a los tipos de sucesos que desee rastrear. Por ejemplo, suponga que desea rastrear sucesos DUMP_GET_OBJECT y DUMP_CREATE_OBJECT. Los equivalentes numéricos de estos valores son 2 y 16, por lo que especifica 18 para el valor de db2.jcc.dumpPool.

El valor por omisión es 0, que significa que solamente se escriben estadísticas de resumen para la agrupación de transporte global.

db2.jcc.dumpPoolStatisticsOnSchedule
Especifica la frecuencia, en segundos, con que se escriben estadísticas de la agrupación de transporte global en el archivo especificado por la propiedad de configuración db2.jcc.dumpPoolStatisticsOnScheduleFile. La agrupación de transporte global se utiliza para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex.

El valor por omisión es -1, que significa que no se escriben estadísticas de la agrupación de transporte global.

db2.jcc.dumpPoolStatisticsOnScheduleFile
Especifica el nombre del archivo en el que se escriben estadísticas de la agrupación de transporte global. La agrupación de transporte global se utiliza para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex.

Si no se especifica la propiedad de configuración db2.jcc.dumpPoolStatisticsOnScheduleFile, no se escriben estadísticas de la agrupación de transporte global.

db2.jcc.maxTransportObjectIdleTime
Especifica la cantidad de tiempo, en segundos, que un objeto de transporte no utilizado permanece en una agrupación de objetos de transporte global antes de que pueda ser suprimido de la agrupación. Los objetos de transporte se utilizan para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex.

El valor por omisión de la propiedad de configuración db2.jcc.maxTransportObjectIdleTime es 60. Si db2.jcc.maxTransportObjectIdleTime se establece en un valor menor que 0, los objetos de transporte no utilizados se suprimen de la agrupación inmediatamente. Esta acción no es recomendable, pues puede producir un grave deterioro del rendimiento.

db2.jcc.maxTransportObjectWaitTime
Especifica la cantidad máxima de tiempo, en segundos, que una aplicación espera a un objeto de transporte si se ha alcanzado el valor de db2.jcc.maxTransportObjects. Los objetos de transporte se utilizan para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex. Cuando una aplicación espera durante un tiempo mayor que el valor de db2.jcc.maxTransportObjectWaitTime, la agrupación de objetos de transporte global emite una excepción de SQL.

El valor por omisión de la propiedad de configuración db2.jcc.maxTransportObjectWaitTime es -1. Un valor negativo cualquiera significa que las aplicaciones esperan indefinidamente.

db2.jcc.maxTransportObjects
Especifica el número máximo de objetos de transporte de una agrupación de objetos de transporte global para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex. Cuando el número de objetos de transporte de la agrupación alcanza el valor de db2.jcc.maxTransportObjects, los objetos de transporte que no se han utilizado durante un tiempo mayor que el valor de db2.jcc.maxTransportObjectIdleTime se suprimen de la agrupación.

El valor por omisión de la propiedad de configuración db2.jcc.maxTransportObjects es -1, que significa que no existe ningún límite respecto al número de objetos de transporte de la agrupación de objetos de transporte global.

db2.jcc.minTransportObjects
Especifica el número mínimo de objetos de transporte de una agrupación de objetos de transporte global para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex. Cuando se crea una JVM, no existen objetos de transporte en la agrupación. Se añaden objetos de transporte a la agrupación a medida que sean necesarios. Cuando se alcanza el valor de db2.jcc.minTransportObjects, el número de objetos de transporte de la agrupación de objetos de transporte global no desciende nunca por debajo del valor de db2.jcc.minTransportObjects durante la vida útil de la JVM.

El valor por omisión de la propiedad de configuración db2.jcc.minTransportObjects es 0. Cualquier valor menor o igual que 0 significa que la agrupación de objetos de transporte global puede llegar a estar vacía.

Propiedades de DataSource del Controlador JDBC universal de DB2 para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex

Las siguientes propiedades de DataSource del Controlador JDBC universal de DB2 se utilizan para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex

enableConnectionConcentrator
Indica si la función del concentrador de conexiones del Controlador JDBC universal de DB2 está habilitada. La función del concentrador de conexiones solamente puede utilizarse para conexiones con servidores de DB2 UDB para z/OS.

El tipo de datos de la propiedad enableConnectionConcentrator es booleano. El valor por omisión es falso. Sin embargo, si enableSysplexWLB está establecido en verdadero, el valor por omisión es verdadero.

enableSysplexWLB
Indica si está habilitada la función de reparto de la carga de trabajo de Sysplex para el Controlador JDBC universal de DB2. La función de reparto de la carga de trabajo de Sysplex solamente puede utilizarse para conexiones con servidores de DB2 UDB para z/OS.

El tipo de datos de la propiedad enableSysplexWLB es booleano. El valor por omisión es falso. Sin embargo, si enableSysplexWLB está establecido en verdadero, el valor de enableConnectionConcentrator se establece en "verdadero" por omisión.

maxTransportObjects
Especifica el número máximo de objetos de transporte que se pueden utilizar para todas las conexiones con el objeto DataSource asociado. Los objetos de transporte se utilizan para el concentrador de conexiones y el reparto de la carga de trabajo de Sysplex. El valor de maxTransportObjects no se tiene en cuenta si las propiedades enableConnectionConcentrator o enableSysplexWLB no están establecidas para habilitar la utilización del concentrador de conexiones o el reparto de la carga de trabajo de Sysplex.

El tipo de datos de esta propiedad es integer (int.).

Si no se ha alcanzado el valor de maxTransportObjects y no hay objeto de transporte disponible en la agrupación de objetos de transporte global, la agrupación crea un nuevo objeto de transporte. Si se alcanzado el valor de maxTransportObjects, la aplicación debe esperar durante la cantidad de tiempo especificada por la propiedad de configuración db2.jcc.maxTransportObjectWaitTime. Si transcurrida esa cantidad de tiempo no existe todavía ningún objeto de transporte disponible en la agrupación, la agrupación emite una excepción de SQL.

La propiedad maxTransportObjects no prevalece sobre la propiedad de configuración db2.jcc.maxTransportObjects. La propiedad maxTransportObjects no tiene ningún efecto sobre las conexiones de otros objetos DataSource. Si el valor de maxTransportObjects es mayor que el valor de db2.jcc.maxTransportObjects, maxTransportObjects no aumenta el valor de db2.jcc.maxTransportObjects.

El valor por omisión de la propiedad maxTransportObjects es -1, que significa que el número de objetos de transporte para DataSource está limitado solamente por el valor de db2.jcc.maxTransportObjects correspondiente al controlador.

Ejemplo de habilitación de las funciones del concentrador de conexiones del Controlador JDBC universal de DB2 y del reparto de la carga de trabajo de Sysplex en WebSphere Application Server

El procedimiento siguiente es un ejemplo de la habilitación de las funciones del concentrador de conexiones del Controlador JDBC universal de DB2 y del reparto de la carga de trabajo de Sysplex en WebSphere(R) Application Server.

Requisitos previos

Requisitos del servidor:

Requisitos del cliente:

Procedimiento

Para habilitar las funciones del concentrador de conexiones del Controlador JDBC universal de DB2 y del reparto de la carga de trabajo de Sysplex en WebSphere Application Server:

  1. Compruebe que el Controlador JDBC universal de DB2 esté en el nivel correcto para permitir la utilización de las funciones del concentrador de conexiones y del reparto de la carga de trabajo de Sysplex; para ello emita el mandato siguiente desde el procesador de línea de mandatos de z/OS, o desde Servicios del sistema de UNIX(R)
    java com.ibm.db2.jcc.DB2Jcc -version
    Encuentre una línea como la siguiente en los datos de salida:
    [ibm][db2][jcc] Driver: IBM DB2 JDBC Universal Driver Architecture n n
    n debe ser 2.7 o posterior.
  2. Defina propiedades de configuración del Controlador JDBC universal de DB2 para habilitar el concentrador de conexiones o el reparto de la carga de trabajo de Sysplex para todas las instancias de DataSource que se crean en el controlador.

    Defina las propiedades de configuración en un archivo DB2JccConfiguration.properties.

    1. Cree un archivo DB2JccConfiguration.properties o edite el archivo DB2JccConfiguration.properties existente.
    2. Defina las propiedades de configuración siguientes:
      • db2.jcc.minTransportObjects
      • db2.jcc.maxTransportObjects
      • db2.jcc.maxTransportObjectWaitTime
      • db2.jcc.dumpPool
      • db2.jcc.dumpPoolStatisticsOnScheduleFile
      Comience con valores similares a estos:
      db2.jcc.minTransportObjects=0
      db2.jcc.maxTransportObjects=1500
      db2.jcc.maxTransportObjectWaitTime=-1
      db2.jcc.dumpPool=0
      db2.jcc.dumpPoolStatisticsOnScheduleFile=
        /home/WAS/logs/srv1/poolstats
      
    3. Añada la vía de acceso de directorios de DB2JccConfiguration.properties a la vía de acceso de clases del Controlador JDBC universal de DB2 para WebSphere Application Server.
  3. Defina propiedades de fuente de datos del Controlador JDBC universal de DB2 para habilitar las funciones del concentrador de conexiones o del reparto de la carga de trabajo de Sysplex.

    En la consola administrativa de WebSphere Application Server, defina las propiedades siguientes para la fuente de datos que la aplicación utiliza para conectar con el servidor de bases de datos:

    • enableSysplexWLB
    • enableConnectionConcentrator
    • maxTransportObjects
    Suponga que desea disponer de la función del concentrador de conexiones así como de la función del reparto de la carga de trabajo de Sysplex. Comience con valores similares a estos:
    Tabla 26. Ejemplo de valores de propiedades de fuente de datos para las funciones del concentrador de conexiones del Controlador JDBC universal de DB2 y del reparto de la carga de trabajo de Sysplex
    Propiedad Valor
    enableSysplexWLB verdadero1
    maxTransportObjects 100
    Notas:
    1. La propiedad enableConnectionConcentrator está establecida en "verdadero" por omisión, pues la propiedad enableSysplexWLB está establecida en "verdadero".
  4. Reinicie WebSphere Application Server.

Métodos para supervisar las funciones del concentrador de conexiones del Controlador JDBC universal de DB2 y del reparto de la carga de trabajo de Sysplex

Para supervisar las funciones del concentrador de conexiones del Controlador JDBC universal de DB2 y del reparto de la carga de trabajo de Sysplex, es necesario que supervise la agrupación de objetos de transporte global. Puede supervisar la agrupación de objetos de transporte global en cualquiera de estas dos maneras:

Propiedades de configuración para supervisar la agrupación de objetos de transporte global

Las propiedades de configuración db2.jcc.dumpPool, db2.jcc.dumpPoolStatisticsOnSchedule y db2.jcc.dumpPoolStatisticsOnScheduleFile controlan el rastreo de la agrupación de objetos de transporte global.

Por ejemplo, el conjunto siguiente de valores de propiedades de configuración hacen que se escriban cada 60 segundos mensajes de error de Sysplex y mensajes de error de la agrupación de vuelcos en un archivo llamado /home/WAS/logs/srv1/poolstats:

db2.jcc.dumpPool=DUMP_SYSPLEX_MSG|DUMP_POOL_ERROR
db2.jcc.dumpPoolStatisticsOnSchedule=60
db2.jcc.dumpPoolStatisticsOnScheduleFile=/home/WAS/logs/srv1/poolstats

Una entrada del archivo de estadísticas de agrupación tiene este aspecto:

hora Scheduled PoolStatistics npr:2575 nsr:2575 lwroc:439 
hwroc:1764 coc:372 aooc:362 rmoc:362 nbr:2872 tbt:857520 tpo:10

Los significados de los campos son:

npr
Es el número total de peticiones que el Controlador JDBC universal de DB2 ha hecho a la agrupación desde que ésta se creó.
nsr
Es el número de peticiones satisfactorias que el Controlador JDBC universal de DB2 ha hecho a la agrupación desde que ésta se creó. Una petición satisfactoria significa que la agrupación devolvió un objeto.
lwroc
Es el número de objetos que se reutilizaron, pero que no estaban en la agrupación. Esto puede ocurrir si un objeto de conexión libera un objeto de transporte en un límite de transacción. Si el objeto de conexión necesita un objeto de transporte más tarde, y el objeto de transporte original no ha sido utilizado por ningún otro objeto de conexión, el objeto de conexión puede utilizar ese objeto de transporte.
hwroc
Es el número de objetos de la agrupación que se reutilizaron.
coc
Es el número de objetos que el Controlador JDBC universal de DB2 ha creado desde que se creó la agrupación.
aooc
Es el número de objetos que excedieron el tiempo de inactividad especificado por la propiedad de configuración db2.jcc.maxTransportObjectIdleTime y se suprimieron de la agrupación.
rmoc
Es el número de objetos que se han suprimido de la agrupación desde que ésta se creó.
nbr
Es el número de peticiones que el Controlador JDBC universal de DB2 hizo a la agrupación que fueron bloqueadas por la agrupación porque ésta había alcanzado su capacidad máxima. Una petición bloqueada puede ser satisfactoria si se devuelve un objeto a la agrupación antes de que se exceda el valor de configuración de db2.jcc.maxTransportObjectWaitTime y se emita una excepción.
tbt
Es el tiempo total, en milisegundos, para las peticiones que fueron bloqueadas por la agrupación. Este tiempo puede ser mucho mayor que el tiempo de ejecución transcurrido de la aplicación si la aplicación utiliza varias hebras.
tpo
Es el número de objetos que están actualmente en la agrupación.
Interfaces de programación de aplicaciones para supervisar la agrupación de objetos de transporte global

Puede escribir aplicaciones para recoger estadísticas sobre la agrupación de objetos de transporte global. Estas aplicaciones crean objetos en la clase DB2PoolMonitor e invocan métodos para recuperar información sobre la agrupación.

Por ejemplo, el código siguiente crea un objeto para supervisar la agrupación de objetos de transporte global:

import com.ibm.db2.jcc.DB2PoolMonitor;
DB2PoolMonitor transportObjectPoolMonitor =  
	DB2PoolMonitor.getPoolMonitor (DB2PoolMonitor.TRANSPORT_OBJECT);

Después de crear el objeto DB2PoolMonitor, puede utilizar los métodos siguientes para supervisar la agrupación de objetos de transporte global.

getMonitorVersion
Formato:
public int getMonitorVersion()

Obtiene la versión de la clase DB2PoolMonitor que se proporciona con el Controlador JDBC universal de DB2.

totalRequestsToPool
Formato:
public int totalRequestsToPool()

Obtiene el número total de peticiones que el Controlador JDBC universal de DB2 ha hecho a la agrupación desde que ésta se creó.

successfullRequestsFromPool
Formato:
public int successfullRequestsFromPool()

Obtiene el número de peticiones satisfactorias que el Controlador JDBC universal de DB2 ha hecho a la agrupación desde que ésta se creó. Una petición satisfactoria significa que la agrupación devolvió un objeto.

numberOfRequestsBlocked
Formato:
public int numberOfRequestsBlocked()

Obtiene el número de peticiones que el Controlador JDBC universal de DB2 hizo a la agrupación que fueron bloqueadas por la agrupación porque ésta había alcanzado su capacidad máxima. Una petición bloqueada puede ser satisfactoria si se devuelve un objeto a la agrupación antes de que se exceda el valor de configuración de db2.jcc.maxTransportObjectWaitTime y se emita una excepción.

totalTimeBlocked
Formato:
public long totalTimeBlocked()

Obtiene el tiempo total, en milisegundos, para las peticiones que fueron bloqueadas por la agrupación. Este tiempo puede ser mucho mayor que el tiempo de ejecución transcurrido de la aplicación si la aplicación utiliza varias hebras.

lightWeightReusedObjectCount
Formato:
public int lightWeightReusedObjectCount()

Obtiene el número de objetos que se reutilizaron, pero que no estaban en la agrupación. Esto puede ocurrir si un objeto de conexión libera un objeto de transporte en un límite de transacción. Si el objeto de conexión necesita un objeto de transporte más tarde, y el objeto de transporte original no ha sido utilizado por ningún otro objeto de conexión, el objeto de conexión puede utilizar ese objeto de transporte.

heavyWeightReusedObjectCount
Formato:
public int heavyWeightReusedObjectCount()

Obtiene el número de objetos de la agrupación que se reutilizaron.

createdObjectCount
Formato:
public int createdObjectCount()

Obtiene el número de objetos que el Controlador JDBC universal de DB2 ha creado desde que se creó la agrupación.

agedOutObjectCount
Formato:
public int agedOutObjectCount()

Obtiene el número de objetos que excedieron el tiempo de inactividad especificado por la propiedad de configuración db2.jcc.maxTransportObjectIdleTime y se suprimieron de la agrupación.

removedObjectCount
Formato:
public int removedObjectCount()

Obtiene el número de objetos que se han suprimido de la agrupación desde que ésta se creó.

totalPoolObjects
Formato:
public int totalPoolObjects()

Es el número de objetos que están actualmente en la agrupación.

Palabra clave de configuración de CLI/ODBC OleDbReportIsLongForLongTypes

La palabra clave OleDbReportIsLongForLongTypes puede utilizarse con los siguientes servidores de bases de datos:

Descripción de la palabra clave:
Realiza los tipos de datos LONG del distintivo de OLE DB con DBCOLUMNFLAGS_ISLONG.
Sintaxis de la palabra clave en db2cli.ini:
OleDbReportIsLongForLongTypes = 0 | 1
Atributo de sentencia equivalente:
SQL_ATTR_REPORT_ISLONG_FOR_LONGTYPES_OLEDB
Valor por omisión:
Los tipos LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC y LONG VARGRAPHIC FOR BIT DATA) no tienen establecido el distintivo DBCOLUMNFLAGS_ISLONG, lo cual puede hacer que las columnas se utilicen en la cláusula WHERE.
Notas sobre la utilización:
 

El motor de cursor de cliente de OLE DB y el Creador de mandatos de OLE DB .NET Data Provider generan sentencias de actualización y supresión basadas en la información de columna que proporciona IBM DB2 OLE DB Provider. Si la sentencia generada contiene un tipo LONG en la cláusula WHERE, la sentencia fallará porque los tipos LONG no se pueden utilizar en una búsqueda con un operador de igualdad. El establecimiento de la palabra clave OleDbReportIsLongForLongTypes en 1 hará que IBM DB2 OLE DB Provider informe de tipos LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC y LONG VARGRAPHIC FOR BIT DATA) con el distintivo DBCOLUMNFLAGS_ISLONG establecido. Esto evitará que se utilicen columnas largas en la cláusula WHERE.

Palabra clave de configuración de CLI/ODBC OleDbSQLColumnsSortByOrdinal

La palabra clave OleDbSQLColumnsSortByOrdinal puede utilizarse con los siguientes servidores de bases de datos:

Descripción de la palabra clave:
Hace que las bases de datos de OLE IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) devuelvan un conjunto de filas clasificadas según la columna ORDINAL_POSITION.
Sintaxis de la palabra clave en db2cli.ini:
OleDbSQLColumnsSortByOrdinal = 0 | 1
Atributo de sentencia equivalente:
SQL_ATTR_SQLCOLUMNS_SORT_BY_ORDINAL_OLEDB
Valor por omisión:
IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) devuelve el conjunto de filas clasificado según las columnas TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME.
Notas sobre la utilización:
 

La especificación de Microsoft OLE DB requiere que IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) devuelva el conjunto de filas clasificadas según las columnas TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. IBM DB2 OLE DB Provider se ajusta a la especificación. Sin embargo, las aplicaciones que utilizan el proveedor Microsoft ODBC Bridge (MSDASQL) generalmente se han codificado para obtener el conjunto de filas clasificado según ORDINAL_POSITION. El establecimiento de la palabra clave OleDbSQLColumnsSortByOrdinal en 1 hará que el proveedor devuelva un conjunto de filas clasificado según ORDINAL_POSITION.

Grupo de propiedades DB2 Data Source para IBM DB2 OLE DB Provider

IBM DB2 OLE DB Provider ha añadido un nuevo grupo de propiedades: DB2 Data Source. El conjunto de propiedades para DB2 Data Source es DBPROPSET_DB2DATASOURCE.

El GUID para el conjunto de propiedades es {0x8a80412a,0x7d94,0x4fec,{0x87,0x3e,0x6c,0xd1,0xcd,0x42,0x0d,0xcd}}

DBPROPSET_DB2DATASOURCE tiene tres propiedades:

DB2PROP_REPORTISLONGFORLONGTYPES

#define DB2PROP_REPORTISLONGFORLONGTYPES 4
Grupo de propiedades: DB2 Data Source 
Conjunto de propiedades: DB2PROPSET_DATASOURCE
Tipo: VT_BOOL
R/W típica: R/W
Descripción: Informar IsLong para Tipos grandes

El motor de cursor de cliente de OLE DB y el Creador de mandatos de OLE DB .NET Data Provider generan sentencias de actualización y supresión basadas en la información de columna que proporciona IBM DB2 OLE DB Provider. Si la sentencia generada contiene un tipo LONG en la cláusula WHERE, la sentencia fallará porque los tipos LONG no se pueden utilizar en una búsqueda con un operador de igualdad.

Tabla 27. Valores de DB2PROP_REPORTISLONGFORLONGTYPES
Valores Significado
VARIANT_TRUE Hará que IBM DB2 OLE DB Provider informe de tipos LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC y LONG VARGRAPHIC FOR BIT DATA) con el distintivo DBCOLUMNFLAGS_ISLONG establecido. Esto evitará que se utilicen columnas largas en la cláusula WHERE.
VARIANT_FALSE DBCOLUMNFLAGS_ISLONG no se ha establecido para LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC y LONG VARGRAPHIC FOR BIT DATA. Éste es el valor por omisión.
DB2PROP_RETURNCHARASWCHAR

#define DB2PROP_RETURNCHARASWCHAR 2
Grupo de propiedades: DB2 Data Source 
Conjunto de propiedades: DB2PROPSET_DATASOURCE
Tipo: VT_BOOL
R/W típica: R/W
Descripción: Devolver Char como WChar

Tabla 28. Valores de DB2PROP_RETURNCHARASWCHAR
Valores Significado
VARIANT_TRUE OLE DB describe las columnas de tipo CHAR, VARCHAR, LONG VARCHAR o CLOB como DBTYPE_WSTR. La página de códigos de los datos implicados en ISequentialStream será UCS-2. Éste es el valor por omisión.
VARIANT_FALSE OLE DB describe las columnas de tipo CHAR, VARCHAR, LONG VARCHAR o CLOB como DBTYPE_STR. La página de códigos de los datos implicados en ISequentialStream será la página de códigos local del cliente.
DB2PROP_SORTBYORDINAL

#define DB2PROP_SORTBYORDINAL 3
Grupo de propiedades: DB2 Data Source 
Conjunto de propiedades: DB2PROPSET_DATASOURCE
Tipo: VT_BOOL
R/W típica: R/W
Descripción: Clasificar por ordinal

La especificación de Microsoft OLE DB requiere que IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) devuelva el conjunto de filas clasificadas según las columnas TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. IBM DB2 OLE DB Provider se ajusta a la especificación. Sin embargo, las aplicaciones que utilizan el proveedor Microsoft ODBC Bridge (MSDASQL) generalmente se han codificado para obtener el conjunto de filas clasificado según ORDINAL_POSITION.

Tabla 29. Valores de DB2PROP_SORTBYORDINAL
Valores Significado
VARIANT_TRUE Hará que el proveedor devuelva un conjunto de filas clasificadas según ORDINAL_POSITION.
VARIANT_FALSE Hará que el proveedor devuelva un conjunto de filas clasificado según TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. Éste es el valor por omisión.

Sintaxis de URL incorrecta en el diagrama de sintaxis de DB2Binder

En el tema "Instalación del controlador JDBC universal de DB2", el diagrama de sintaxis de DB2Binder define de modo incorrecto la sintaxis de URL para el controlador JDBC universal de DB2. La representación correcta de la sintaxis de URL para DB2Binder se muestra en el diagrama siguiente:

Sintaxis de DB2Binder
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual>>-java--com.ibm.db2.jcc.DB2Binder------------------------------>
 
>---url jdbc:db2://servidor-+-----------+-/basedatos------------>
                            '-:--puerto-'
 
>---user ID-usuario---password contraseña--+--------------+----->
                                           '--size entero-'
 
>--+------------------------------+----------------------------->
   '--collection nombre-colección-'
 
>--+---------------------------------+--+-------+--------------><
   |              .-,--------------. |  '--help-'
   |              V                | |
   '--tracelevel ---opción-rastreo-+-'
 

Redireccionamiento de clientes del controlador JDBC universal de DB2

La característica de redireccionamiento automático de clientes en DB2 Universal Database (UDB) para Linux, UNIX, y Windows permite que las aplicaciones cliente se recuperen de una pérdida de comunicación con el servidor para que puedan continuar trabajando con una interrupción mínima.

Cuando un servidor se bloquea, cada cliente conectado a dicho servidor recibe un error de comunicación, que finaliza la conexión y da lugar a un error de la aplicación. En los casos en que la disponibilidad sea importante, debe tener soporte de configuración redundante o de gestión de anomalías. (La gestión de anomalías es la capacidad de un servidor para asumir operaciones cuando falla otro servidor.) En cualquiera de los casos, el cliente del controlador JDBC universal de DB2 intenta volver a establecer la conexión con un nuevo servidor o con el servidor original, que se puede estar ejecutando en un nodo anómalo. Cuando se restablece la conexión, la aplicación recibe una excepción de SQL que informa sobre la anomalía de la transacción, pero la aplicación puede continuar con la siguiente transacción.

Restricciones

Procedimiento

Después de que el administrador de bases de datos especifique la ubicación del servidor alternativo en una base de datos determinada en la instancia del servidor, las ubicaciones del servidor primario y alternativo se devuelven al cliente en el momento de la conexión. El controlador JDBC universal de DB2 crea una instancia del objeto Referenceable DB2ClientRerouteServerList y almacena dicha instancia en su memoria temporal. Si se pierde la comunicación, el controlador JDBC universal de DB2 intenta restablecer la conexión utilizando la información del servidor que se devuelve desde el servidor.

La propiedad de DataSource clientRerouteServerListJNDIName proporciona soporte adicional de redireccionamiento de clientes en el cliente; clientRerouteServerListJNDIName tiene dos funciones:

La propiedad clientRerouteServerListJNDIName identifica una referencia JNDI para una instancia de DB2ClientRerouteServerList en un depósito JNDI de información del servidor alternativo. Tras una conexión satisfactoria con el servidor principal, la información sobre el servidor alternativo que suministra clientRerouteServerListJNDIName queda sobrescrita por la información procedente del servidor. El controlador JDBC universal de DB2 intentará propagar la información actualizada al almacén JNDI tras una gestión de anomalías si la propiedad clientRerouteServerListJNDIName está definida. Si se especifica clientRerouteServerListJNDIName, la información del servidor primario que se especifica en DB2ClientRerouteServerList se utilizará para la conexión. Si no se especifica el servidor primario, se utilizará la información de serverName especificada en la fuente de datos.

DB2ClientRerouteServerList es un bean Java serializable con cuatro propiedades:

Se proporcionan los métodos getter y setter para acceder a estas propiedades. La definición de la clase de DB2ClientRerouteServerList es la siguiente:

package com.ibm.db2.jcc;
public class DB2ClientRerouteServerList 
  implements java.io.Serializable,
  javax.naming.Referenceable
{
  public String[] alternateServerName;
  public synchronized void 
    setAlternateServerName(String[] alternateServer);
  public String[] getAlternateServerName();
  public int[] alternatePortNumber;
  public synchronized void 
    setAlternatePortNumber(int[] alternatePortNumberList);
  public int[] getAlternatePortNumber();
  
  public synchronized void 
    setPrimaryServerName (String primaryServerName);
  public String getPrimaryServerName ();
  public synchronized void setPrimaryPortNumber (int primaryPortNumber)
  public int getPrimaryPortNumber (); 
}

Se configura una conexión de gestión de anomalías establecida utilizando las propiedades originales de la fuente de datos, salvo en lo que respecta al nombre del servidor y el número de puerto. Además, los registros especiales de DB2 UDB que se modificaron durante la conexión original los restablece en la conexión de gestión de anomalías el controlador JDBC universal de DB2.

Cuando se produce un error de comunicaciones, el controlador JDBC universal de DB2 primero intenta recuperar el servidor primario. Si esta recuperación falla, el controlador intenta conectar con la ubicación alternativa (gestión de anomalías). Tras restablecer una conexión, el controlador emite una java.sql.SQLException a la aplicación con el SQLCODE -4498, para indicar a la aplicación que la conexión se ha vuelto a establecer de modo automático con el servidor alternativo. La aplicación puede entonces reintentar su transacción.

Procedimiento para hacer que DB2ClientRerouteServerList sea permanente

Para configurar el almacenamiento para hacer que DB2ClientRerouteServerList sea permanente, realice los pasos siguientes:

  1. Cree una instancia de DB2ClientRerouteServerList y vincule dicha instancia al registro JNDI. Por ejemplo:
    // Crear un contexto inicial para operaciones
    de asignación de nombres
    InitialContext registry = new InitialContext();
    // Crear un objeto DB2ClientRerouteServerList
    DB2ClientRerouteServerList address=new DB2ClientRerouteServerList();
    
    // Definir el número de puerto y nombre de servidor para el servidor
    primario
    address.setPrimaryPortNumber(50000);
    address.setPrimaryServerName("mvs1.sj.ibm.com");
    
    // Definir el número de puerto y nombre de servidor para el
    // servidor alternativo
    int[] port = {50002};
    String[] server = {"mvs3.sj.ibm.com"};
    address.setAlternatePortNumber(port);
    address.setAlternateServerName(server);
        
    registry.rebind("serverList", address);
    
  2. Asigne el nombre JNDI del objeto DB2ClientRerouteServerList a la propiedad de DataSource clientRerouteServerListJNDIName. Por ejemplo:
    datasource.setClientRerouteServerListJNDIName("serverList");

Personalización de las propiedades de configuración del controlador JDBC universal de DB2

Las propiedades de configuración del controlador JDBC universal de DB2 le permiten establecer correctamente valores que tienen un ámbito de nivel de todo el controlador. Estos valores se aplican a aplicaciones e instancias de DataSource. Puede modificar los valores sin tener que cambiar el código fuente de la aplicación ni las características de DataSource.

Cada valor de propiedad de configuración de controlador JDBC universal de DB2 tiene el siguiente formato:

propiedad=valor

Si la propiedad de configuración comienza por db2.jcc.override, significa que se aplica a todas las conexiones y prevalece sobre cualquier propiedad Connection o DataSource con el mismo nombre de propiedad. Si la propiedad de configuración comienza por db2.jcc o db2.jcc.default, el valor de la propiedad de configuración es un valor por omisión. Los valores de las propiedades Connection o DataSource prevalecen sobre este valor.

Procedimiento

Para establecer propiedades de configuración:

Puede establecer las siguientes propiedades de configuración del controlador JDBC universal de DB2. Todas las propiedades son opcionales.

db2.jcc.override.traceFile
Habilita el rastreo del controlador JDBC universal de DB2 para código del controlador Java y especifica el nombre en el que se basan los nombres de archivos de rastreo.

Especifique un nombre de archivo completamente calificado para el valor de la propiedad db2.jcc.override.traceFile.

La propiedad db2.jcc.override.traceFile prevalece sobre la propiedad traceFile para un objeto Connection o DataSource.

Por ejemplo, la especificación del siguiente valor para db2.jcc.override.traceFile habilita el rastreo de código Java del controlador JDBC universal de DB2 en un archivo denominado /SYSTEM/tmp/jdbctrace:

db2.jcc.override.traceFile=/SYSTEM/tmp/jdbctrace

Debe establecer las propiedades de rastreo bajo la dirección del Soporte de software de IBM.

db2.jcc.sqljUncustomizedWarningOrException
Especifica la acción que emprende el controlador JDBC universal de DB2 cuando se ejecuta una aplicación SQLJ no personalizada. db2.jcc.sqljUncustomizedWarningOrException puede tener los siguientes valores:
0
El controlador JDBC universal de DB2 no genera ningún Aviso ni Excepción cuando se ejecuta una aplicación SQLJ no personalizada. Éste es el valor por omisión.
1
El controlador JDBC universal de DB2 genera un Aviso cuando se ejecuta una aplicación SQLJ no personalizada.
2
El controlador JDBC universal de DB2 genera una Excepción cuando se ejecuta una aplicación SQLJ no personalizada.

Función db2secFreeToken eliminada

La función db2secFreeToken (Liberar memoria retenida por señal) ya no forma parte de la API del conector de autentificación de usuario db2secGssapiServerAuthFunctions_1.

Despliegue cuidadoso de los conectores de seguridad personalizados

La integridad de la instalación de DB2 Universal Database (UDB) puede verse afectada si en el despliegue de los conectores de seguridad éstos no se han codificado, revisado y probado de modo apropiado. DB2 UDB toma precauciones para muchos de los tipos más comunes de anomalías, pero no puede garantizar una integridad completa cuando se despliegan conectores de seguridad escritos por el usuario.

Conectores de seguridad

Si utiliza su propio conector de seguridad personalizado, puede utilizar un ID de usuario de hasta 255 caracteres en una sentencia connect emitida a través del CLP o de una sentencia de SQL dinámico.

Las API del conector de seguridad

Para las API db2secGetGroupsForUser, db2secValidatePassword y db2secGetAuthIDs, el parámetro de entrada, nombrebd, puede ser nulo y su parámetro de entrada de longitud correspondiente, lonnombrebd, se establecerá en 0.

Convenios de denominación de los conectores de seguridad (Linux y UNIX)

Ahora .so se acepta como una extensión de nombre de archivo para las bibliotecas de conectores de seguridad escritas por el usuario en todas las plataformas Linux y UNIX.

En AIX, las bibliotecas de conectores de seguridad pueden tener una extensión de .a o .so. Si existen ambas versiones de una biblioteca de conector, se utiliza la versión .a.

Para HP-UX en PA-RISC, las bibliotecas de conectores de seguridad pueden tener una extensión de .sl o .so. Si existen ambas versiones de una biblioteca de conector, se utiliza la versión .sl.

En las demás plataformas Linux y UNIX, .so es la única extensión de nombre de archivo soportada para las bibliotecas de conectores de seguridad.

Restricciones sobre las bibliotecas de conectores de seguridad

En AIX, las bibliotecas de conectores de seguridad pueden tener la extensión de nombre de archivo .a o .so. El mecanismo utilizado para cargar la biblioteca de conectores depende de la extensión que se utilice:

Bibliotecas de conectores con la extensión de nombre de archivo .a
Se da por supuesto que las bibliotecas de conectores con las extensiones de nombre de archivo .a son archivos que contienen miembros de objetos compartidos. Estos miembros se deben denominar shr.o (32 bits) o shr64.o (64 bits). Un solo archivo puede contener tanto miembros de 32 bits como de 64 bits, lo que permite desplegarlos en ambos tipos de plataformas.

Por ejemplo, para crear una biblioteca de conectores de tipo archivo de 32 bits:

  xlc_r -qmkshrobj -o shr.o MiConector.c -bE:MiConector.exp
  ar rv MiConector.a shr.o
Bibliotecas de conectores con la extensión de nombre de archivo .so
Se da por supuesto que las bibliotecas de conectores con las extensiones de nombre de archivo .so son objetos compartidos que se pueden cargar de forma dinámica. Este tipo de objeto es de 32 o de 64 bits, en función de las opciones de compilador y enlazador utilizadas al crearlo. Por ejemplo, para crear una biblioteca de conectores de 32 bits:
  xlc_r -qmkshrobj -o MiConector.so MiConector.c -bE:MiConector.exp

En todas plataformas que no sean AIX, siempre se da por supuesto que las bibliotecas de conectores de seguridad son objetos compartidos que se pueden cargar de forma dinámica.

| | |

Soporte de conector de GSS-API para DB2 Universal JDBC Driver

|

Con el release de DB2 UDB Versión 8.2 para Linux, UNIX, Windows, puede |crear su propio mecanismo de autentificación en el formato de conectores (bibliotecas |cargables). El motor DB2 UDB carga y accede a estos conectores para realizar |la autentificación de usuario. Para dar soporte a las aplicaciones de cliente escritas en |Java, DB2 Universal JDBC Driver proporciona soporte de conector de seguridad en DB2 UDB |V8.2, FixPak 4.

|

Para aplicaciones de Java que utilizan DB2 Universal JDBC Driver para realizar la |autentificación de conector, los usuarios necesitan implantar sus propios conectores |ampliando la clase abstracta de autentificación com.ibm.db2.jcc.DB2JCCPlugin y estableciendo |las siguientes propiedades:

| |

Tenga en cuenta el ejemplo siguiente:

|
   java.util.Properties properties = new java.util.Properties();
|   properties.put("user", "db2admin");
|   properties.put("password", "admindb2");
|   properties.put("pluginName", "gssapi_simple");
|   properties.put("securityMechanism",
|   new String(""+com.ibm.db2.jcc.DB2BaseDataSource.PLUGIN_SECURITY+""));
|   properties.put("plugin", new JCCSimpleGSSPlugin());
|   Connection con = java.sql.DriverManager.getConnection(url, properties);

Los conectores de seguridad de API GSS no dan soporte a autentificación de múltiples flujos

La autentificación de API GSS está limitada al flujo de un símbolo desde el cliente hasta el servidor y de un símbolo desde el servidor hasta el cliente. Estos símbolos se obtienen de gss_init_sec_context() en el cliente y de gss_accept_sec_context() en el servidor. Los conectores de API GSS que intenten flujos adicionales generarán un error inesperado de conector de seguridad, que hará que la conexión falle.

Los conectores de seguridad API GSS no dan soporte a cifrado y firma de mensajes

El cifrado y la firma de mensajes no está disponible en los conectores de seguridad de API GSS.

Finalización implícita de transacciones en aplicaciones autónomas

Todas las finalizaciones de aplicaciones (normales y anormales) retrotraen de forma implícita unidades de trabajo restantes, independientemente del sistema operativo.

Soporte de transacciones distribuidas

En la documentación Novedades para DB2 Universal Database (UDB) Versión 8.2, la información sobre el Soporte de transacciones distribuidas para el apartado de mejoras del controlador JDBC universal de DB2 contiene información incorrecta. La última frase de este apartado es incorrecta. La información correcta es la siguiente:

Como en la Versión 8.2, DB2 UDB proporciona soporte para el proceso de transacciones distribuidas que se ajusta a la especificación XA. Este soporte implanta las especificaciones Java 2 Platform Enterprise Edition (J2EE) Java Transaction Service (JTS) y Java Transaction API (JTA).

[ Principio de página |Página anterior | Página siguiente | Contenido ]