Développement d'application : Programmation des applications client

| | |

Connectivité du pilote JDBC DB2 Universal Type 4 à DB2 VM/VSE |non prise en charge

|

Le pilote JDBC DB2 Universal ne prend pas en charge la connectivité de type |4 à DB2 pour les bases de données VM/VSE. Les rubriques intitulées |"Définition de l'environnement Java Windows" et "Installation du pilote |JDBC DB2 Universal" du manuel Application |Development Guide: Programming Client Applications, ainsi que le centre de |documentation DB2 UDB indiquent à tort que le pilote JDBC DB2 Universal prend en |charge cette connectivité de type 4 à DB2 pour les bases de données VM/VSE.

Concentrateur de connexions du pilote JDBC de DB2 Universal et équilibrage des charges de travail Sysplex

Les applications Java qui utilisent DB2 Universal JDBC Driver type 4 connectivity pour accéder aux serveurs DB2 UDB pour z/OS profitent des fonctions du concentrateur de connexions et d'équilibrage des charges de travail Sysplex.

Ces fonctions sont identiques aux fonctions du concentrateur de connexions et d'équilibrage des charges de travail Sysplex de DB2 Connect.

Le concentrateur de connexions Pilote JDBC universel DB2 permet de réduire les ressources nécessaires aux serveurs de base de données de DB2 UDB pour z/OS pour prendre en charge de nombreuses applications client ; il permet à de nombreux objets de connexion d'utiliser la même connexion physique, ce qui réduit le nombre total de connexions physiques au serveur de base de données.

L'équilibrage des charges de travail Sysplex Pilote JDBC universel DB2 permet d'améliorer la disponibilité d'un groupe de partage des données car le pilote obtient souvent des informations d'état concernant les membres d'un groupe de partage de données. Le pilote utilise cette information pour déterminer le membre du partage de données vers lequel il doit acheminer la transaction suivante. Avec l'équilibrage des charges de travail Sysplex, le serveur DB2 UDB pour z/OS et Workload Manager pour z/OS (WLM) garantissent une distribution efficace du travail parmi les membres du groupe de partage de données et la transmission du travail à un autre membre d'un groupe de partage de données si un membre subit un incident.

Pilote JDBC universel DB2 utilise des objets de transfert et un groupe d'objets de transfert global pour prendre en charge le concentrateur de connexions et l'équilibrage des charges de travail Sysplex. Un objet de transfert existe pour chaque connexion physique au serveur de base de données. Lorsque vous activez le concentrateur de connexion et l'équilibrage des charges de travail Sysplex, vous définissez le nombre maximal de connexions physiques au serveur de base de données à n'importe quel point de cohérence en définissant le nombre maximal d'objet de transfert.

Au niveau du pilote, vous définissez des limites pour le nombre d'objets de transfert à l'aide des propriétés de configuration Pilote JDBC universel DB2.

Au niveau de la connexion, vous activez et désactivez l'équilibrage des charges de travail Sysplex et le concentrateur de connexions Pilote JDBC universel DB2, puis définissez les limites du nombre d'objets de transfert à l'aide des propriétés DataSource.

Vous pouvez contrôler le groupe d'objets de transfert global par l'une des deux méthodes suivantes :

Propriétés de configuration de Pilote JDBC universel DB2 pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex

Chacune des propriétés de configuration suivante est utilisée pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex

db2.jcc.dumpPool
Indique les types de statistiques qui sont écrites pour les événements de groupe de transfert global, outre les statistiques simplifiées qui sont écrites. Le groupe de transfert global est utilisé pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex.

Le type de données de db2.jcc.dumpPool est un nombre entier (ent.). Les propriétés de configuration db2.jcc.dumpPoolStatisticsOnSchedule et db2.jcc.dumpPoolStatisticsOnScheduleFile doivent également être définies pour le processus d'écriture des statistiques avant l'écriture de toute statistique.

Vous pouvez indiquer un ou plusieurs types de statistiques suivants avec la propriété db2.jcc.dumpPool :

Pour suivre plus d'un type d'événement, ajoutez les valeurs pour les types d'événements dont vous souhaitez exécuter la trace. Par exemple, supposons que vous souhaitiez suivre les événements DUMP_GET_OBJECT et DUMP_CREATE_OBJECT. Les équivalents numériques de ces valeurs sont 2 et 16 ; par conséquent, vous devez indiquer 18 pour la valeur db2.jcc.dumpPool.

La valeur par défaut est 0, ce qui signifie que les statistiques simplifiées uniquement sont écrites pour le groupe de transfert global.

db2.jcc.dumpPoolStatisticsOnSchedule
Vous devez indiquer la fréquence d'écriture, en secondes, des statistiques du groupe de transfert global vers le fichier indiqué par la propriété de configuration db2.jcc.dumpPoolStatisticsOnScheduleFile. Le groupe de transfert global est utilisé pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex.

La valeur par défaut est -1, ce qui signifie que les statistiques du groupe de transfert global ne sont pas écrites.

db2.jcc.dumpPoolStatisticsOnScheduleFile
Indique le nom du fichier dans lequel les statistiques du groupe de transfert global sont écrites. Le groupe de transfert global est utilisé pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex.

Si la propriété de configuration db2.jcc.dumpPoolStatisticsOnScheduleFile n'est pas indiquée, les statistiques du groupe de transfert global ne sont pas écrites.

db2.jcc.maxTransportObjectIdleTime
Indique la durée, en secondes, de la présence d'un objet de transfert inutilisé dans un groupe de transfert global avant de pouvoir le supprimer du groupe. Les objets de transfert sont utilisés pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex.

La valeur par défaut de la propriété de configuration db2.jcc.maxTransportObjectIdleTime est définie sur 60. La définition du paramètre db2.jcc.maxTransportObjectIdleTime sur une valeur inférieure à 0 engendre la suppression immédiate des objets de transfert inutilisés dans le groupe. Cette action n'est pas recommandée parce qu'elle peut engendrer une perte de performances considérable.

db2.jcc.maxTransportObjectWaitTime
Indique le délai d'attente maximal, en secondes, d'une application pour un objet de transfert si la valeur db2.jcc.maxTransportObjects a été atteinte. Les objets de transfert sont utilisés pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex. Lorsqu'une application attend plus longtemps que la valeur db2.jcc.maxTransportObjectWaitTime, le groupe d'objet de transfert global émet une exception SQL.

La valeur par défaut de la propriété de configuration db2.jcc.maxTransportObjectWaitTime est définie sur -1. Toute valeur négative signifie que les applications attendent toujours.

db2.jcc.maxTransportObjects
Indique la limite supérieure du nombre d'objets de transfert dans un groupe d'objets de transfert global pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex. Lorsque le nombre d'objets de transfert d'un groupe atteint la valeur du paramètre db2.jcc.maxTransportObjects, les objets de transfert qui n'ont pas été utilisés pendant une durée supérieure à la valeur définie dans db2.jcc.maxTransportObjectIdleTime sont supprimés du groupe.

La valeur par défaut de la propriété de configuration db2.jcc.maxTransportObjects est définie sur -1, ce qui signifie qu'aucune limite n'existe pour le nombre d'objets de transfert dans le groupe d'objets de transfert global.

db2.jcc.minTransportObjects
Indique la limite inférieure du nombre d'objets de transfert dans un groupe d'objets de transfert global pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex. Lorsqu'une machine JVM est créée, le groupe ne contient aucun objet de transfert. Les objets de transfert sont ajoutés au groupe au besoin. Lorsque la valeur du paramètre db2.jcc.minTransportObjects est atteinte, le nombre d'objet de transfert du groupe d'objets de transfert global ne descend jamais en dessous de la valeur du paramètre db2.jcc.minTransportObjects pendant toute la durée de l'utilisation de la machine JVM.

La valeur par défaut de la propriété de configuration du paramètre db2.jcc.minTransportObjects est définie sur 0. Toute valeur inférieure ou égale à 0 signifie que le groupe d'objets de transfert global peut se vider.

Propriétés DataSource Pilote JDBC universel DB2 pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex

Chacune des propriétés DataSource Pilote JDBC universel DB2 suivantes est utilisée pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex.

enableConnectionConcentrator
Indique si la fonction du concentrateur de connexions du Pilote JDBC universel DB2 est activée. La fonction du concentrateur de connexions est disponible uniquement pour les connexions aux serveurs DB2 UDB pour z/OS.

Le type de données de la propriété enableConnectionConcentrator est une valeur booléenne. La valeur par défaut est false. Toutefois, si enableSysplexWLB est définie sur true, la valeur par défaut est true.

enableSysplexWLB
Indique si la fonction de l'équilibrage des charges de travail Sysplex du Pilote JDBC universel DB2 est activée. La fonction de l'équilibrage des charges de travail Sysplex est disponible uniquement pour les connexions aux serveurs DB2 UDB pour z/OS.

Le type de données de la propriété enableSysplexWLB est une valeur booléenne. La valeur par défaut est false. Toutefois, si enableSysplexWLB est définie sur true, enableConnectionConcentrator est définie sur true par défaut.

maxTransportObjects
Indique le nombre maximal d'objets de transfert qui peuvent être utilisés pour toutes les connexions avec l'objet DataSource associé. Les objets de transfert sont utilisés pour le concentrateur de connexions et l'équilibrage des charges de travail Sysplex. La valeur maxTransportObjects est ignorée si les propriétés enableConnectionConcentrator ou enableSysplexWLB ne sont pas paramétrées pour permettre l'utilisation du concentrateur de connexions ou l'équilibrage des charges de travail Sysplex.

Le type de données de cette propriété est un nombre entier (ent.).

Si la valeur maxTransportObjects n'a pas été atteinte et qu'un objet de transfert n'est pas disponible dans le groupe d'objets de transfert global, le groupe crée un nouvel objet de transfert. Si la valeur maxTransportObjects a été atteinte, l'application attend pendant la durée spécifiée dans la propriété de configuration db2.jcc.maxTransportObjectWaitTime. Une fois cette durée écoulée, si un objet de transfert n'est toujours pas disponible dans le groupe, le groupe émet une exception SQL.

La propriété maxTransportObjects ne se substitue pas à la propriété de configuration db2.jcc.maxTransportObjects. La propriété maxTransportObjects n'a pas d'effet sur les connexions des autres objets DataSource. Si la valeur maxTransportObjects est supérieure à la valeur db2.jcc.maxTransportObjects, maxTransportObjects n'augmente pas la valeur db2.jcc.maxTransportObjects.

La valeur par défaut de la propriété maxTransportObjects est définie sur -1, ce qui signifie que le nombre d'objets de transfert pour DataSource est limité uniquement par la valeur db2.jcc.maxTransportObjects pour le pilote.

Exemple d'activation des fonctions d'équilibrage des charges de travail Sysplex et du concentrateur de connexions Pilote JDBC universel DB2 dans WebSphere Application Server

La procédure qui suit est un exemple d'activation des fonctions d'équilibrage des charges de travail Sysplex et du concentrateur de connexions Pilote JDBC universel DB2 avec WebSphere Application Server.

Conditions préalables

Configuration minimale du serveur :

Configuration minimale du client :

Procédure

Pour activer les fonctions d'équilibrage des charges de travail Sysplex et le concentrateur de connexions Pilote JDBC universel DB2 avec WebSphere Application Server, procédez comme suit :

  1. Vérifiez que le niveau du Pilote JDBC universel DB2 permet de prendre en charge le concentrateur de connexions ainsi que l'équilibrage des charges de travail Sysplex en émettant la commande suivante dans l'interpréteur de commandes sur z/OS ou sur System Services sous UNIX :
    java com.ibm.db2.jcc.DB2Jcc -version
    Recherchez une ligne semblable à celle-ci dans les résultats :
    [ibm][db2][jcc]
    Driver: IBM DB2 JDBC Universal Driver Architecture n n
    n doit être une version 2.7 ou suivante.
  2. Définissez les propriétés de configuration du Pilote JDBC universel DB2 afin d'activer le concentrateur de connexions ou l'équilibrage des charges de travail Sysplex pour toutes les instances DataSource qui sont créées sous ce pilote.

    Définissez les propriétés de configuration dans un fichier DB2JccConfiguration.properties.

    1. Créez un fichier DB2JccConfiguration.properties ou modifiez le fichier DB2JccConfiguration.properties existant.
    2. Définissez les propriétés de configuration suivantes :
      • db2.jcc.minTransportObjects
      • db2.jcc.maxTransportObjects
      • db2.jcc.maxTransportObjectWaitTime
      • db2.jcc.dumpPool
      • db2.jcc.dumpPoolStatisticsOnScheduleFile
      Commencez par des paramètres similaires aux paramètres suivants :
      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. Ajoutez le chemin d'accès au répertoire pour DB2JccConfiguration.properties au chemin d'accès de classe Pilote JDBC universel DB2 de WebSphere Application Server.
  3. Définissez les propriétés de source de données Pilote JDBC universel DB2 afin d'activer les fonctions du concentrateur de connexions ou d'équilibrage des charges de travail Sysplex.

    Dans la console d'administration de WebSphere Application Server, définissez les propriétés suivantes pour les sources de données utilisées par votre application pour la connexion au serveur de base de données :

    • enableSysplexWLB
    • enableConnectionConcentrator
    • maxTransportObjects
    Supposons que vous souhaitiez utiliser les fonctions du concentrateur de connexions ainsi que les fonctions d'équilibrage des charges de travail Sysplex. Commencez par des paramètres similaires aux paramètres suivants :
    Tableau 26. Exemple de paramètres de propriétés de source de données pour les fonctions d'équilibrage des charges de travail Sysplex et du concentrateur de connexions Pilote JDBC universel DB2
    Propriété Définition
    enableSysplexWLB true1
    maxTransportObjects 100
    Remarques :
    1. La propriété enableConnectionConcentrator est définie sur true par défaut car la propriété enableSysplexWLB est définie sur true.
  4. Redémarrez WebSphere Application Server.

Méthodes de contrôle des fonctions d'équilibrage des charges de travail Sysplex et du concentrateur de connexions Pilote JDBC universel DB2

Pour contrôler ces fonctions, vous devez contrôler le groupe d'objets de transfert global. Vous pouvez contrôler le groupe d'objets de transfert global par l'une des deux méthodes suivantes :

Propriétés de configuration pour le contrôle du groupe d'objets de transfert global

Les propriétés de configuration db2.jcc.dumpPool, db2.jcc.dumpPoolStatisticsOnSchedule et db2.jcc.dumpPoolStatisticsOnScheduleFile permettent de contrôler le groupe des objets de transfert global à l'aide de la fonction de trace.

Par exemple, l'ensemble suivant des paramètres de propriétés de configuration engendre l'écriture de message d'erreur Sysplex et de message d'erreur de vidage de groupe toutes les 60 secondes vers un fichier appelé /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

Le fichier de statistiques du groupe contient des entrées qui ressemblent aux entrées suivantes :

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

Les significations de ces zones sont les suivantes :

npr
Nombre total de requêtes émises par le Pilote JDBC universel DB2 au groupe depuis la création du groupe.
nsr
Nombre de requêtes réussies, émises par le Pilote JDBC universel DB2 au groupe depuis la création du groupe. Une requête réussie signifie que le groupe a renvoyé un objet.
lwroc
Nombre d'objets qui ont été réutilisés mais sans appartenir au groupe. Cette situation se produit si un objet de connexion libère un objet de transfert dans les limites de la transaction. Si l'objet de connexion nécessite un objet de transfert ultérieurement et que l'objet de transfert d'origine n'a pas été utilisé par un autre objet de connexion, l'objet de connexion peut utiliser cet objet de transfert.
hwroc
Nombre d'objets du groupe qui ont été réutilisés.
coc
Nombre d'objets créés par le Pilote JDBC universel DB2 depuis la création du groupe.
aooc
Nombre d'objets qui dépassent le délai d'inactivité indiqué dans la propriété de configuration db2.jcc.maxTransportObjectIdleTime puis qui ont été supprimés du groupe.
rmoc
Nombre d'objets qui ont été supprimés du groupe depuis sa création.
nbr
Nombre de requêtes émises par le Pilote JDBC universel DB2 au groupe qui ont été bloquées par le groupe parce que ce dernier a atteint sa capacité maximale. Une requête bloquée peut aboutir si un objet est renvoyé au groupe avant le dépassement de la valeur de configuration db2.jcc.maxTransportObjectWaitTime et l'émission d'une exception.
tbt
Temps total en millisecondes pour les requêtes qui ont été bloquées par le groupe. Ce temps peut être très supérieur au temps d'exécution écoulé de l'application si cette dernière utilise plusieurs unités d'exécution.
tpo
Nombre d'objets qui se trouvent actuellement dans le groupe.
Interfaces de programmation d'application pour le contrôle du groupe d'objets de transfert global

Vous pouvez écrire des applications afin de regrouper les statistiques du groupe d'objets de transfert global. Ces applications créent des objets dans la classe DB2PoolMonitor et appellent des méthodes d'extraction d'informations du groupe.

Par exemple, le code suivant crée un objet pour le contrôle du groupe d'objets de transfert global :

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

Après avoir créé l'objet DB2PoolMonitor, vous pouvez utiliser les méthodes suivantes pour contrôler le groupe d'objets de transfert global.

getMonitorVersion
Format :
public int getMonitorVersion()

Permet d'extraire la version de la classe DB2PoolMonitor livrée avec Pilote JDBC universel DB2.

totalRequestsToPool
Format :
public int totalRequestsToPool()

Permet d'extraire le nombre total de requêtes émises par le Pilote JDBC universel DB2 au groupe depuis la création de ce dernier.

successfullRequestsFromPool
Format :
public int successfullRequestsFromPool()

Permet d'extraire le nombre de requêtes réussies, émises par le Pilote JDBC universel DB2 au groupe depuis la création de ce dernier. Une requête réussie signifie que le groupe a renvoyé un objet.

numberOfRequestsBlocked
Format :
public int numberOfRequestsBlocked()

Permet d'extraire le nombre de requêtes émises par le Pilote JDBC universel DB2 au groupe qui ont été bloquées par le groupe parce que ce dernier a atteint sa capacité maximale. Une requête bloquée peut aboutir si un objet est renvoyé au groupe avant le dépassement de la valeur de configuration db2.jcc.maxTransportObjectWaitTime et l'émission d'une exception.

totalTimeBlocked
Format :
public long totalTimeBlocked()

Permet d'extraire le temps total en millisecondes pour les requêtes qui ont été bloquées par le groupe. Ce temps peut être très supérieur au temps d'exécution écoulé de l'application si cette dernière utilise plusieurs unités d'exécution.

lightWeightReusedObjectCount
Format :
public int lightWeightReusedObjectCount()

Permet d'extraire le nombre d'objets qui ont été réutilisés mais sans appartenir au groupe. Cette situation se produit si un objet de connexion libère un objet de transfert dans les limites de la transaction. Si l'objet de connexion nécessite un objet de transfert ultérieurement et que l'objet de transfert d'origine n'a pas été utilisé par un autre objet de connexion, l'objet de connexion peut utiliser cet objet de transfert.

heavyWeightReusedObjectCount
Format :
public int heavyWeightReusedObjectCount()

Permet d'extraire le nombre d'objets du groupe qui ont été réutilisés.

createdObjectCount
Format :
public int createdObjectCount()

Permet d'extraire le nombre d'objets créés par le Pilote JDBC universel DB2 depuis la création du groupe.

agedOutObjectCount
Format :
public int agedOutObjectCount()

Permet d'extraire le nombre d'objets qui dépassent le délai d'inactivité indiqué dans la propriété de configuration db2.jcc.maxTransportObjectIdleTime, puis qui ont été supprimés du groupe.

removedObjectCount
Format :
public int removedObjectCount()

Permet d'extraire le nombre d'objets qui ont été supprimés du groupe depuis sa création.

totalPoolObjects
Format :
public int totalPoolObjects()

Nombre d'objets qui se trouvent actuellement dans le groupe.

Mot clé de configuration CLI/ODBC OleDbReportIsLongForLongTypes

Le mot clé OleDbReportIsLongForLongTypes est pris en charge par les serveurs de base de données suivants :

Description du mot clé :
La BD OLE insère le marqueur DBCOLUMNFLAGS_ISLONG dans les données de type LONG.
Syntaxe du mot clé db2cli.ini :
OleDbReportIsLongForLongTypes = 0 | 1
Attribut d'instruction équivalent :
SQL_ATTR_REPORT_ISLONG_FOR_LONGTYPES_OLEDB
Paramètre par défaut :
Les types LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC et LONG VARGRAPHIC FOR BIT DATA) ne comportent pas le marqueur DBCOLUMNFLAGS_ISLONG, ce qui peut entraîner l'utilisation des colonnes dans la clause WHERE.
Remarques sur la syntaxe :
 

Le moteur de curseur du client de OLE BD et le générateur de commandes (CommandBuilder) de OLE DB .NET Data Provider génère une mise à jour et supprime des instructions en fonction des informations de colonnes fournies par IBM DB2 OLE DB Provider. Si la clause WHERE de l'instruction générée contient un type LONG, elle échouera car le type LONG ne peut pas être utilisé dans une recherche avec un opérateur d'égalité. Si l'on attribue la valeur 1 au mot clé OleDbReportIsLongForLongTypes, IBM DB2 OLE DB Provider signale les types LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC et LONG VARGRAPHIC FOR BIT DATA) dotés du marqueur DBCOLUMNFLAGS_ISLONG. Ceci évite l'utilisation de colonnes longues dans la clause WHERE.

Mot clé de configuration CLI/ODBC OleDbSQLColumnsSortByOrdinal

Le mot clé OleDbSQLColumnsSortByOrdinal est pris en charge par les serveurs de base de données suivants :

Description du mot clé :
Permet à IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) d'OLE DB de renvoyer un ensemble de lignes triées par colonne ORDINAL_POSITION.
Syntaxe du mot clé db2cli.ini :
OleDbSQLColumnsSortByOrdinal = 0 | 1
Attribut d'instruction équivalent :
SQL_ATTR_SQLCOLUMNS_SORT_BY_ORDINAL_OLEDB
Paramètre par défaut :
IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) renvoie un ensemble de lignes triées par colonnes TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME.
Remarques sur la syntaxe :
 

La spécification Microsoft OLE DB requiert que IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) renvoie l'ensemble de lignes trié en fonction des colonnes TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME et COLUMN_NAME. IBM DB2 OLE DB Provider respecte cette spécification. En revanche, les applications qui utilisent Microsoft ODBC Bridge Provider (MSDASQL) sont généralement codées pour le tri de l'ensemble de lignes par ORDINAL_POSITION (position ordinale). Si vous attribuez la valeur 1 au mot clé OleDbSQLColumnsSortByOrdinal, le fournisseur renverra un ensemble de lignes triées par ORDINAL_POSITION.

Groupe de propriétés DB2 Data Source d'IBM DB2 OLE DB Provider

IBM DB2 OLE DB Provider a ajouté un nouveau groupe de propriétés : DB2 Data Source. DBPROPSET_DB2DATASOURCE est le jeu de propriétés de DB2 Data Source.

Le GUID de ce jeu de propriétés est {0x8a80412a,0x7d94,0x4fec,{0x87,0x3e,0x6c,0xd1,0xcd,0x42,0x0d,0xcd}}

DBPROPSET_DB2DATASOURCE comprend trois propriétés :

DB2PROP_REPORTISLONGFORLONGTYPES

#define DB2PROP_REPORTISLONGFORLONGTYPES 4
Property group: DB2 Data Source 
Property set: DB2PROPSET_DATASOURCE
Type: VT_BOOL
Typical R/W: R/W
Description: Report IsLong for Long Types

Le moteur de curseur du client de OLE BD et le générateur de commandes (CommandBuilder) de OLE DB .NET Data Provider génère une mise à jour et supprime des instructions en fonction des informations de colonnes fournies par IBM DB2 OLE DB Provider. Si la clause WHERE de l'instruction générée contient un type LONG, elle échouera car le type LONG ne peut pas être utilisé dans une recherche avec un opérateur d'égalité.

Tableau 27. Valeurs de DB2PROP_REPORTISLONGFORLONGTYPES
Valeurs Signification
VARIANT_TRUE Permet à IBM DB2 OLE DB Provider de signaler des types LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC et LONG VARGRAPHIC FOR BIT DATA) dotés du marqueur DBCOLUMNFLAGS_ISLONG. Ceci évite l'utilisation de colonnes longues dans la clause WHERE.
VARIANT_FALSE DBCOLUMNFLAGS_ISLONG n'est pas défini pour LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC et LONG VARGRAPHIC FOR BIT DATA. Il s'agit de la valeur par défaut.
DB2PROP_RETURNCHARASWCHAR

#define DB2PROP_RETURNCHARASWCHAR 2
Property group: DB2 Data Source 
Property set: DB2PROPSET_DATASOURCE
Type: VT_BOOL
Typical R/W: R/W
Description: Return Char as WChar

Tableau 28. Valeurs de DB2PROP_RETURNCHARASWCHAR
Valeurs Signification
VARIANT_TRUE OLE DB décrit les colonnes de type CHAR, VARCHAR, LONG VARCHAR, ou CLOB comme étant DBTYPE_WSTR. La page de codes des données concernée dans ISequentialStream est UCS-2. Il s'agit de la valeur par défaut.
VARIANT_FALSE OLE DB décrit les colonnes de type CHAR, VARCHAR, LONG VARCHAR, ou CLOB comme étant DBTYPE_STR. La page de codes des données concernée dans ISequentialStream est la page de codes locale du client.
DB2PROP_SORTBYORDINAL

#define DB2PROP_SORTBYORDINAL 3
Property group: DB2 Data Source 
Property set: DB2PROPSET_DATASOURCE
Type: VT_BOOL
Typical R/W: R/W
Description: Sort By Ordinal

La spécification Microsoft OLE DB requiert que IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) renvoie l'ensemble de lignes trié en fonction des colonnes TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME et COLUMN_NAME. IBM DB2 OLE DB Provider respecte cette spécification. En revanche, les applications qui utilisent Microsoft ODBC Bridge Provider (MSDASQL) sont généralement codées pour le tri de l'ensemble de lignes par ORDINAL_POSITION (position ordinale).

Tableau 29. Valeurs de DB2PROP_SORTBYORDINAL
Valeurs Signification
VARIANT_TRUE Le fournisseur renverra un ensemble de lignes triées par position ordinale (ORDINAL_POSITION).
VARIANT_FALSE Le fournisseur renverra un ensemble de lignes triées par TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. Il s'agit de la valeur par défaut.

Syntaxe d'URL incorrecte dans le diagramme de syntaxe DB2Binder

Dans la rubrique "Installing the DB2 Universal JDBC Driver", le diagramme de syntaxe DB2Binder définit de façon erronée la syntaxe de l'URL pour le pilote JDBC de DB2 Universal. La représentation correcte de la syntaxe de l'URL de DB2Binder figure dans le schéma suivant :

Syntaxe de DB2Binder
Lire le diagrammeSauter le diagramme>>-java--com.ibm.db2.jcc.DB2Binder------------------------------>
 
>---url jdbc:db2://serveur-+---------+-/base de données--------->
                           '-:--port-'
 
>---user ID-utilisateur---password mot-de-passe----------------->
 
>--+--------------+--+-------------------------------+---------->
   '--size entier-'  '--collection nom de collection-'
 
>--+----------------------------------+--+-------+-------------><
   |              .-,---------------. |  '--help-'
   |              V                 | |
   '--tracelevel ---option de trace-+-'
 

Redirection des clients du pilote JDBC DB2 Universal

Sous DB2 Universal Database (UDB) pour Linux, UNIX, et Windows, la fonction de redirection automatique du client permet aux applications client de récupérer après une perte de communication avec le serveur et de continuer à fonctionner après une interruption minimale.

A chaque verrouillage de serveur, chaque client connecté à ce serveur reçoit une erreur de transmission qui met fin à la connexion et engendre une erreur d'application. Si la disponibilité est importante, vous devez disposer d'une configuration redondante ou d'une prise en charge de la fonction de secours. La fonction de secours est la possibilité dont dispose un serveur de reprendre les opérations lorsqu'un autre serveur échoue. Dans tous les cas, le client du pilote JDBC de DB2 Universal tente de rétablir la connexion à un nouveau serveur ou au serveur original, qui est susceptible de fonctionner sur un noeud de secours. Lorsque la connexion est rétablie, l'application reçoit une exception SQLException qui l'informe de l'échec de la transaction mais ne l'empêche pas de passer à la transaction suivante.

Restrictions

Procédure

Une fois l'emplacement du serveur de remplacement spécifié sur une base de données particulière au niveau de l'instance du serveur, l'emplacement du serveur principal et du serveur de remplacement sont renvoyés au client au moment de la connexion. Le pilote JDBC de DB2 Universal crée une instance d'objet DB2ClientRerouteServerList pouvant être référencée et stocke cette instance dans sa mémoire transitoire. Si la communication est perdue, le pilote JDBC de DB2 Universal JDBC tente de rétablir la connexion grâce aux informations du serveur que le serveur a renvoyé.

La propriété clientRerouteServerListJNDIName DataSource offre un support supplémentaire de redirection du client au niveau de ce dernier. Cette propriété remplit deux fonctions :

La propriété clientRerouteServerListJNDIName permet d'identifier une référence JNDI à une instance DB2ClientRerouteServerList dans un référentiel JNDI d'informations de serveur de remplacement. Une fois la connexion au serveur principal établie, les informations de serveur de remplacement fournies par clientRerouteServerListJNDIName sont remplacées par celles provenant du serveur. Le pilote JDBC DB2 Universal tente de propager les informations mises à jour vers le magasin JNDI après une reprise en ligne si la propriété clientRerouteServerListJNDIName est définie. Si tel est le cas, les informations du serveur principal spécifiées dans DB2ClientRerouteServerList seront utilisées pour la connexion. Si le serveur principal n'est pas spécifié, les informations serverName spécifiées sur la source de données seront utilisées.

DB2ClientRerouteServerList est un bean Java sérialisable doté de quatre propriétés :

Les méthodes getter et setter (consultation et modification) permettant l'accès à ces propriétés sons fournies. Voici la définition de la classe DB2ClientRerouteServerList :

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 (); 
}

Une connexion de secours nouvellement établie est configurée avec les propriétés de source de données initiales, à l'exception du nom de serveur et du numéro de port. En outre, tout registre spécial DB2 UDB modifié lors de la connexion d'origine est rétabli dans la connexion de secours par le pilote JDBC de DB2 Universal.

Lorsqu'un arrêt anormal de la communication se produit, le pilote JDBC de DB2 Universal tente d'abord une reprise vers le serveur principal. Si la reprise échoue, le pilote tente de se connecter à l'emplacement de remplacement (fonction de secours). Une fois la connexion rétablie, le pilote émet une exception java.sql.SQLException vers l'application avec SQLCODE -4498, qui indique à l'application le rétablissement automatique de la connexion vers le serveur de remplacement. L'application peut alors relancer sa transaction.

Procédure rendant DB2ClientRerouteServerList persistant

Procédez comme suit pour configurer la mémoire de façon à rendre DB2ClientRerouteServerList persistant :

  1. Créez une instance de DB2ClientRerouteServerList, puis liez-la au registre JNDI. Par exemple :
    // Create a starting context for naming operations
    InitialContext registry = new InitialContext();
    // Create a DB2ClientRerouteServerList object
    DB2ClientRerouteServerList address=new DB2ClientRerouteServerList();
    
    // Set the port number and server name for the primary server
    address.setPrimaryPortNumber(50000);
    address.setPrimaryServerName("mvs1.sj.ibm.com");
    
    // Set the port number and server name for the alternate server
    int[] port = {50002};
    String[] server = {"mvs3.sj.ibm.com"};
    address.setAlternatePortNumber(port);
    address.setAlternateServerName(server);
        
    registry.rebind("serverList", address);
    
  2. Attribuez le nom JNDI de l'objet DB2ClientRerouteServerList à la propriété clientRerouteServerListJNDIName de la source de données (DataSource). Par exemple :
    datasource.setClientRerouteServerListJNDIName("serverList");

Personnalisation des propriétés de configuration du pilote JDBC de DB2 Universal

Les propriétés de configuration du pilote JDBC de DB2 Universal vous permettent de définir les valeurs de propriété dont la portée s'étend au niveau du pilote. Ces paramètres s'appliquent aux instances des applications et DataSource. Vous pouvez les modifier sans modifier le code source de l'application ni les caractéristiques de DataSource.

Chaque paramètre de propriété de configuration du pilote JDBC de DB2 Universal se présente sous la forme suivante :

propriété=value

Si la propriété de configuration commence par db2.jcc.override, elle s'applique à toutes les connexions et remplace toute propriété Connection ou DataSource portant le même nom de propriété. Si la propriété de configuration commence par db2.jcc or db2.jcc.default, il s'agit d'une propriété de configuration par défaut. Les paramètres de propriété Connection ou DataSource remplacent cette valeur.

Procédure

Pour définir les propriétés de configuration, procédez comme suit :

Vous pouvez définir les propriétés de configuration du pilote JDBC de DB2 Universal ci-dessous. Toutes les propriétés sont facultatives.

db2.jcc.override.traceFile
Permet au pilote JDBC de DB2 Universal d'assurer le traçage du code pilote Java et de préciser le nom sur lequel sont basés les noms de fichiers de trace.

Indiquez un nom qualifié complet du fichier pour la valeur de la propriété db2.jcc.override.traceFile.

La propriété db2.jcc.override.traceFile remplace la propriété traceFile pour l'objet Connection ou DataSource.

Par exemple, en paramétrant db2.jcc.override.traceFile comme suit, vous activez le traçage du code Java du pilote JDBC de DB2 Universal dans un fichier nommé /SYSTEM/tmp/jdbctrace :

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

Il est recommandé de définir les propriétés de trace en collaboration avec le service de support IBM Software Support.

db2.jcc.sqljUncustomizedWarningOrException
Permet de préciser l'action réalisée par le pilote JDBC de DB2 Universal lorsqu'une application SQLJ non personnalisée s'exécute. Les valeurs suivantes peuvent être attribuées à db2.jcc.sqljUncustomizedWarningOrException :
0
Le pilote JDBC de DB2 Universal ne génère pas d'avertissement ni d'exception lorsqu'une application SQLJ non personnalisée s'exécute. Il s'agit de la valeur par défaut.
1
Le pilote JDBC de DB2 Universal génère un avertissement lorsqu'une application SQLJ non personnalisée s'exécute.
2
Le pilote JDBC de DB2 Universal génère une exception lorsqu'une application SQLJ non personnalisée s'exécute.

Fonction db2secFreeToken supprimée

La fonction db2secFreeToken (mémoire libre gérée par le jeton) ne fait plus partie de l'API du plug-in d'authentification utilisateur db2secGssapiServerAuthFunctions_1.

Déployer les plug-ins de sécurité personnalisés avec précaution

L'intégrité de votre installation DB2 Universal Database (UDB) peut être compromise si le déploiement des plug-ins de sécurité n'est pas correctement codé, révisé et testé. DB2 UDB est protégé contre de nombreux types d'incidents courants, mais son intégrité n'est pas totalement garantie en cas de déploiement de plug-in de sécurité écrits par l'utilisateur.

Plug-ins de sécurité

Si vous utilisez votre plug-in de sécurité personnel, vous pouvez utiliser un ID utilisateur composé de 255 caractères au maximum sur une instruction de connexion émise par l'intermédiaire de l'interpréteur de commandes ou d'une instruction SQL dynamique.

API du plug-in de sécurité

Pour les API db2secGetGroupsForUser, db2secValidatePassword et db2secGetAuthIDs, le paramètre d'entrée dbname peut être nul et la valeur 0 attribuée à son paramètre d'entrée de longueur correspondant dbnamelen.

Conventions de dénomination du plug-in de sécurité(Linux et UNIX)

.so est désormais accepté comme suffixe de nom de fichier des bibliothèques de plug-ins de sécurité écrits par l'utilisateur sur toutes les plateformes Linux et UNIX.

Sous AIX, le suffixe .a ou .so peut être attribué aux bibliothèques de plug-ins de sécurité. Si les deux versions de bibliothèque de plug-ins existent, la version .a est utilisée.

Pour HP-UX on PA-RISC, le suffixe .sl ou .so peut être attribué aux bibliothèques de plug-ins de sécurité. Si les deux versions de bibliothèque de plug-ins existent, la version .sl est utilisée.

Sur toutes les autres plateformes Linux et UNIX, .so est le seul suffixe de nom de fichier pris en charge pour les bibliothèques de plug-ins de sécurité.

Restrictions sur les bibliothèques de plug-ins de sécurité

Sous AIX, le suffixe de nom de fichier .a ou .so peut être attribué aux bibliothèques de plug-ins de sécurité. Le mécanisme utilisé pour charger la bibliothèque de plug-ins dépend du suffixe utilisé :

Bibliothèques de plug-ins portant le suffixe de nom de fichier .a
Les bibliothèques de plug-ins portant les suffixes de nom de fichier .a sont supposées être des archives contenant des membres objet partagés. Ces membres doivent être appelés shr.o (32-bits) ou shr64.o (64-bits). Une seule archive peut contenir les membres à 32-bits et à 64-bits, lui permettant d'être déployée sur les deux types de plateforme.

Par exemple, pour construire une bibliothèque de plug-ins de style d'archive, procédez comme suit :

  xlc_r -qmkshrobj -o shr.o MyPlugin.c -bE:MyPlugin.exp
  ar rv MyPlugin.a shr.o
Bibliothèques de plug-ins portant le suffixe de nom de fichier .so
Les bibliothèques de plug-ins portant le suffixe de nom de fichier .so sont supposées être des objets partagés téléchargeables de manière dynamique. Ces objets sont soit à 32-bits soit à 64-bits, selon les options du compilateur et de l'éditeur de liens utilisées lors de leur construction. Par exemple, pour construire une bibliothèque de plug-ins à 32-bits :
  xlc_r -qmkshrobj -o MyPlugin.so MyPlugin.c -bE:MyPlugin.exp

Sur toutes les plateformes autres qu'AIX, les bibliothèques de plug-ins de sécurité sont toujours supposées être des objets partagés téléchargeables de manière dynamique.

| | |

Prise en charge du module d'extension GSS-API du pilote JDBC DB2 |Universal

|

Avec l'édition de la version 8.2 de DB2 UDB pour Linux, UNIX, |Windows, vous pouvez créer vos propres méthodes d'authentification sous forme |de modules d'extension (bibliothèques à charger). Le moteur DB2 UDB |accède aux modules d'extension préalablement chargés pour effectuer une authentification |d'utilisateur. Afin de prendre en charge les applications client écrites en |Java, le pilote JDBC DB2 Universal fournit un support de module d'extension |de sécurité dans la version 8.2 de DB2 UDB, FixPak 4.

|

Pour les applications Java qui se servent du pilote JDBC DB2 Universal pour |authentifier le module d'extension, les utilisateurs |doivent implémenter leur propre module d'extension en étendant la classe |abstraite com.ibm.db2.jcc.DB2JCCPlugin et en définissant les propriétés |suivantes :

| |

Voici quelques exemples :

|
   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);

Les plug-ins de sécurité GSS-API ne prennent pas en charge l'authentification à transmissions multiples

L'authentification GSS-API ne transmet qu'un seul jeton du client au serveur et un jeton du serveur au client. Ces jetons s'obtiennent sur le client, à partir de gss_init_sec_context(), et sur le serveur, à partir de gss_accept_sec_context(). Les plug-ins GSS-API qui tentent d'autres transmissions génèrent une erreur imprévue, entraînant l'échec de la connexion.

Les plug-ins de sécurité GSS-API ne prennent pas en charge le chiffrement et la signature des messages

Le chiffrement et la signature des messages ne sont pas disponibles dans les plug-ins de sécurité GSS-API.

Arrêt implicite des opérations dans des applications autonomes

Toutes les résiliations d'application (normales et anormales) mettent fin de manière implicite aux unités de travail en attente, quel que soit le système d'exploitation.

Prise en charge des transactions réparties

Dans la documentation Nouveautés de DB2 Universal Database (UDB) version 8.2, des erreurs figurent dans la partie traitant de la prise en charge des transactions réparties de la section relative aux améliorations du pilote JDBC de DB2 Universal. La dernière phrase de cette section est incorrecte. La voici après correction :

A partir de la version 8.2, DB2 UDB prend en charge le traitement des transactions réparties conformes à la spécification XA. Cette prise en charge met en oeuvre les spécifications Java 2 Platform Enterprise Edition (J2EE) Java Transaction Service (JTS) et Java Transaction API (JTA).

[ Début de page |Page précédente | Page suivante | Table des matières ]