Identification et résolution des problèmes liés à l'expiration de transactions et aux interblocages JPA
Les interblocages de base de données et l'expiration de transactions résultent de conflits entre deux clients ou plus qui tentent d'accéder à la même ressource de base de données. L'interblocage est un cas particulier où une condition de blocage circulaire se produit entre deux clients ou plus, chacun étant bloqué par les autres, mais aucun ne peut fonctionner. En règle générale, ces phénomènes ne constituent pas des erreurs de programmation. Ils sont provoqués par une logique métier qui accède à des ressources de base de données de façon complexe et interdépendante.
Pourquoi et quand exécuter cette tâche
Il est possible de réduire ces conditions en suivant les meilleures pratiques et stratégies décrites ci-après.
Procédure
- Identifier les ressources de base de données concernées ayant provoqué l'erreur.
- Examiner les exceptions (le cas échéant) lorsque l'erreur se produit pour obtenir des indices quant aux entités défectueuses ayant provoqué la condition d'échec.
- Si le fournisseur JPA par défaut de WebSphere Application Server est utilisé, vous pouvez activer le groupe de trace "eclipselink.logging.level.sql" pour les applications EclipseLink ou "openjpa.jdbc.SQL=all" pour les applications OpenJPA afin de collecter les instructions SQL et les informations d'unité d'exécution des ressources de base de données concernées. En recueillant des informations, vous pouvez identifier les clients et les entités qui sont les artefacts ayant provoqué la condition d'échec.
- Pour un scénario d'utilisation plus complexe, vous pouvez consulter la documentation de base de données relative à n'importe quel outil ou technique spécialisés permettant d'identifier les objets et la transaction ayant provoqué les problèmes de conflit de données.
- Lorsque vous avez identifié les problèmes, consultez la logique métier qui utilise ces ressources afin de vous assurer que le fait de les utiliser ne provoque pas d'autres conflits. Il n'existe aucune solution recommandée pour résoudre les problèmes d'interblocage et d'expiration. Les solutions varient en fonction de la complexité des relations entre la logique métier et les entités.
Le concept de base relatif à la résolution des interblocages et des expirations consiste à réduire au maximum le temps de mise en attente des ressources et de permettre aux autres clients d'accéder à une même ressource. Si un conflit est inévitable, une application doit établir des moyens de reprise lorsque de telles conditions d'échec se produisent. Les stratégies suivantes peuvent vous permettre de réduire les conditions de problème et vous pouvez déterminer si vous pouvez appliquer une ou plusieurs d'entre elles pour résoudre un problème :
- Assurez-vous que la logique métier ne verrouille pas les entités plus que nécessaire. Une application JPA en lecture seule doit utiliser la sémantique de verrouillage optimiste offerte par défaut par JPA. JPA 2.0 introduit des fonctions de verrouillage pessimiste qui permettent aux applications de verrouiller explicitement des entités de façon pessimiste et à la demande. Vous devez optimiser le nombre de verrous pessimistes appliqués à tout moment. Si le verrouillage est trop important, les risques de conditions d'interblocage et d'expiration augmentent et les accès concurrents et le débit des applications diminuent.
- Evitez de définir un niveau d'isolement de connexion de source de données plus restrictif que nécessaire. Le niveau d'isolement a le même effet que la sémantique de verrouillage pessimiste au niveau connexion. JPA nécessite au minimum un niveau d'isolement de type "lecture validée" pour garantir l'intégrité des données de base. Le niveau d'isolement par défaut du gestionnaire de connexions WebSphere Application Server est propre à la base de données. Pour obtenir des informations sur la spécification d'API JDBCConnectionSpec, voir la rubrique Interfaces de programmation.
- Réduisez la durée des transactions actives. Les transactions actives étendues sont susceptibles de mettre en attente les ressources requises par d'autres clients. Validez les transactions dès qu'elles ont terminé d'utiliser leurs ressources.
- Optimisez la logique métier pour éviter une interdépendance entre les unités. Si deux ensembles de logique métier utilisent des ressources similaires, pensez à mettre à jour les ressources dans le même ordre de manière à éviter la dépendance circulaire d'interblocage classique. Cela varie en fonction du niveau d'isolement utilisé. L'effet est le même que lorsqu'un verrouillage implicite est appliqué aux ressources, comme expliqué dans la stratégie suivante.
- Utilisez le verrouillage pessimiste pour synchroniser les accès concurrents à une ressource commune. Lorsque les stratégies décrites précédemment ne s'appliquent pas à votre situation, vous avez la possibilité d'utiliser le verrouillage pessimiste afin de synchroniser les accès à des ressources communes utilisées par différents clients. L'application peut utiliser les fonctions de verrouillage pessimiste JPA 2.0 pour empêcher d'autres clients d'accéder à la ressource commune tant que la transaction n'est pas validée ou annulée. Le fait d'augmenter l'utilisation de verrous pessimistes peut affecter les accès concurrents et le débit. La fonction Tentative d'accès JPA de WebSphere Application Server est un autre moyen permettant de verrouiller des ressources de données sur la base d'un appel EJB ou d'un nom de tâche défini par l'utilisateur.
- Gérez et restaurez les exceptions liées à des interblocages et à des expirations. La plupart des serveurs de base de données comportent un mécanisme de prévention d'interblocage intégré. Lorsqu'une condition d'interblocage est détectée, la stratégie type utilisée par la base de données consiste à annuler l'une des requêtes et à permettre à l'autre de s'exécuter correctement. Toutefois, la requête arrêtée est spécifique à la base de données et n'est pas déterministe. Si une application le permet, il peut s'avérer judicieux de récupérer la condition d'interblocage et de relancer l'opération.
Concepts associés:
Tâches associées:
Référence associée:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_jpadeadlock
Nom du fichier : tejb_jpadeadlock.html