Exigences relatives au réglage des niveaux d'isolement de l'accès aux données
Cette rubrique présente les critères et les effets de la définition de niveaux d'isolement pour les composants d'accès aux données comprenant des modules Enterprise JavaBeans (EJB) 2.x et ultérieurs.
Dans un module EJB 1.1, vous pouvez définir le niveau d'isolement au niveau de la méthode ou au niveau du bean. Cette opération est également possible pour les beans CMP (persistance gérée par conteneur) que vous assemblez dans des modules EJB 2.x. WebSphere Application Server permet au descripteur de déploiement d'un bean CMP de déclarer le niveau de version 1.1, quelle que soit la version du module.
Toutefois, il n'est pas possible de définir un niveau d'isolement au niveau de la méthode ou du bean pour les autres beans se trouvant dans un module EJB 2.x, y compris pour les beans CMP 2.x. WebSphere Application Server version 5.0 ne permet plus aux modules EJB 2.0 d'utiliser cette fonction, afin de fournir une architecture garantissant une utilisation plus efficace des connexions.
- Vous ne pouvez pas spécifier de niveau d'isolement au niveau de la méthode EJB ou au niveau du bean.
- Si vous configurez une application JDBC, un bean BMP (persistance gérée par bean) ou un servlet en vue de sa participation dans des transactions globales, les connexions partagées ne peuvent pas accepter de niveau d'isolement propre à l'utilisateur. WebSphere Application Server ne peut mettre en place un niveau d'isolement défini par un utilisateur que sur une connexion non partagée au sein d'une transaction globale. En général, il est préférable de ne pas spécifier de niveaux d'isolement sur des connexions partageables.
- Niveau d'isolement sur les connexions utilisées par les beans CMP 2.x
- Dans un module EJB 2.x, lorsqu'un bean CMP 2.x utilise une nouvelle source de données pour accéder à la base de données dorsale, le niveau d'isolement esr terminée par l'environnement d'exécution WebSphere Application Server, selon le type de tentative d'accès associé au bean ou à la méthode appelante. Les utilisateurs de connexions non CMP peuvent accéder aux mêmes sources de données et utiliser les règles de tentative d'accès et le support des profils d'application pour gérer leur contrôle d'accès concurrents.
- Connexions utilisées par les autres beans enterprise 2.X et les composants autres que CMP
- Pour toutes les autres instances de connexion JDBC (connexions autres que celles utilisées par les beans CMP), vous pouvez spécifier un niveau d'isolement sur la référence de ressource de la source de données. Pour les connexions
partageables qui s'exécutent dans des transactions globales, il s'agit du seul moyen de définir le niveau d'isolement. Vous ne pouvez pas définir directement le niveau
d'isolement via la méthode setTransactionIsolation() sur une connexion
partageable qui s'exécute dans une transaction globale. Pour utiliser un niveau d'isolement différent
sur une telle connexion, vous devez fournir une référence de ressource
différente. Définissez ces valeurs par défaut via votre outil d'assemblage.
Chaque référence de ressource est associée à un seul niveau d'isolement. Si votre application utilise le nom JNDI (Java™ Naming and Directory Interface) de référence de ressource pour rechercher une source de données, chaque connexion renvoyée par cette source présente le même niveau d'isolement.
Les développeurs de composants qui doivent utiliser des connexions partageables avec différents niveaux d'isolement peuvent créer plusieurs références de ressources, attribuer à chacune un nom JNDI différent et coder leurs composants pour qu'ils recherchent la source de données appropriée, avec le niveau d'isolement voulu. De cette manière, des connexions distinctes sont utilisées avec différents niveaux d'isolement.
Il est possible de mapper ces références de ressources multiples vers une même source de données configurée. Dans ce cas, les connexions proviennent toujours du même pool sous-jacent mais le gestionnaire de connexions n'autorise pas le partage de connexions demandées par des références de ressources avec différents niveaux d'isolement. Prenons le scénario ci-après.- Une source de données est liée à deux références de ressources : jdbc/RRResRef et jdbc/RCResRef.
- Dans la référence RRResRef, le niveau d'isolement défini est RepeatableRead, tandis que dans RCResRef, le niveau d'isolement spécifié est ReadCommitted.
Le produit ne requiert pas la définition d'un niveau d'isolement sur une référence de ressource de source de données pour un module d'application non CMP. Si vous n'indiquez aucun niveau d'isolement sur la référence de ressource ou spécifiez TRANSACTION_NONE, l'environnement d'exécution WebSphere Application Server utilise un niveau d'isolement par défaut pour la source de données. Le serveur d'applications utilise un paramètre par défaut basé sur le pilote JDBC.
Pour la plupart des pilotes, WebSphere Application Server utilise le niveau d'isolement par défaut TRANSACTION_REPEATABLE_READ. Pour les pilotes Oracle, cependant, il utilise le niveau d'isolement TRANSACTION_READ_COMMITTED. Consultez le tableau ci-dessous pour obtenir rapidement les informations relatives aux niveaux d'isolement.
Base de données : Niveau d'isolement par défaut : DB2 RR Oracle RC Sybase RR Informix RR Apache Derby RR SQL Server RR Remarque : Ces mêmes niveaux d'isolement par défaut sont utilisés pour les recherches JNDI directes d'une source de données.- RR = Lecture reproductible JDBC (TRANSACTION_REPEATABLE_READ)
- RC = Lecture validée JDBC (TRANSACTION_READ_COMMITTED)
Pour personnaliser le niveau d'isolement par défaut, vous pouvez recourir à la propriété personnalisée webSphereDefaultIsolationLevel, relative à la source de données. Dans la plupart des cas, il est préférable de définir le niveau d'isolement dans le descripteur de déploiement lors de la mise en forme du fichier EAR. Cependant, dans certaines situations, vous pouvez également être amené à personnaliser le niveau d'isolement par défaut. Cette propriété n'aura aucun effet si l'une des options précédente est utilisée ; la propriété personnalisée est fournie pour les cas où le niveau d'isolement ne peut être défini d'aucune autre manière.
Utilisez les valeurs suivantes pour définir la propriété personnalisée webSphereDefaultIsolationLevel :
Pour définir cette propriété personnalisée pour une source de données :Valeurs possibles Niveau d'isolement JDBC Niveau d'isolement DB2 8 TRANSACTION_SERIALIZABLE Lecture reproductible (RR) 4 (par défaut) TRANSACTION_REPEATABLE_READ Lecture stable (RS) 2 TRANSACTION_READ_COMMITTED Lecture non reproductible (CS) 1 TRANSACTION_READ_UNCOMMITTED Lecture non validée (UR) 0
TRANSACTION_NONE Lecture non validée - Cliquez sur .
- Dans la section Propriétés supplémentaires, sélectionnez Sources de données.
- Cliquez sur le nom de la source de données.
- Cliquez sur Propriétés personnalisées.
- Créez la propriété personnalisée webSphereDefaultIsolationLevel.
- Cliquez sur Nouveau.
- Dans la zone du nom, indiquez webSphereDefaultIsolationLevel.
- Indiquez l'une des valeurs possibles dans la zone adéquate.
- Niveau d'isolement de la référence de ressource
- Niveau d'isolement indiqué par la règle de tentative d'accès.
- Propriété personnalisée définissant le niveau d'isolement.
- Paramètre par défaut de WebSphere Application Server.